From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id ED615C433EF for ; Wed, 9 Mar 2022 01:13:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230318AbiCIBOr (ORCPT ); Tue, 8 Mar 2022 20:14:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44746 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231848AbiCIBNs (ORCPT ); Tue, 8 Mar 2022 20:13:48 -0500 Received: from mail-oi1-x249.google.com (mail-oi1-x249.google.com [IPv6:2607:f8b0:4864:20::249]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A6E6D15AF3E for ; Tue, 8 Mar 2022 16:58:05 -0800 (PST) Received: by mail-oi1-x249.google.com with SMTP id x15-20020a54400f000000b002d9be4bd8a2so716071oie.20 for ; Tue, 08 Mar 2022 16:58:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=Ho7f/NeezaNx/+VE1xEC1BmmHhvU/tXr7U8nm19Ny/8=; b=Kug63PWFYJQb+IwWw8YfG9c5gyFA/+YkOMbdO97VJcnY3F7XuGvLqV1qb6eKsstYC6 fu8W4sy6PFGBz9UK+746zgHTSZVNYleA69c+Vq1TWk4/TU0EuK497e70zIiIOamehA0h Gr8W0c+sSHve+4eRxqrR5ljYMTvqacpM74fUU6qQ0A3IGEfMNnRqsozICggpkVL7/dY2 AvgPNCEIzB1Ja/2nNKG0O2O9vsy6qG9DZgHVDhhRhmUleDNdAcGGbCYTbG8epYqydwO0 gs5Tif4RsqE8crhUUYHOSkRUeNWcEXmkJs1SO+Rol7UpeJyHXqzn/uBhfzxuF7jaIr8/ O7WA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=Ho7f/NeezaNx/+VE1xEC1BmmHhvU/tXr7U8nm19Ny/8=; b=t4HvKu842SHGXwB26IKqe3oe5xBoMs10n6Z+RXIIWO5W1t6Pi0Nh0LD5iWhEYUREfI +xltbxWZDQcXaz082uvV+Lj1DQn5oSGS1pdiovUMrNB8dito528HR/PkULZFe7K32gsc KtE9NqPBu2/81SKMb8E8oW4rgA5rcUv/J8Tkj38zHzX3GehsLBbmcEZdd8pS1rNbqu0B ERq7ShRRfWBDLpEIxwcMig3GYmR7AX+uj4DXAypDDUXRxg2qSjzMwSf3ZCYn9W/XM+Fu 7/sdiiZ+VBGgd522sVpxiFUiRFRKWV/BTWbOKmQI69nMlA6SvyuOXDavUKxSMjKD1XBp yBAw== X-Gm-Message-State: AOAM533elqznhSBJdwloDzuFSZsg1/wHT3L5kHcwkImIe56PnYkMrchu k0fTPo3S7R5o1cIY2I4q0HkMvvViFBs= X-Google-Smtp-Source: ABdhPJzM4xXQoy+k+mVLsuJXY9MtpV9RL7jteuvpZLDCBS3uEqNMbJUnHqoKnZ3hL+Nd69OrayRE4a4XWJk= X-Received: from yuzhao.bld.corp.google.com ([2620:15c:183:200:57a6:54a6:aad1:c0a8]) (user=yuzhao job=sendgmr) by 2002:a05:6808:1455:b0:2d9:a01a:4bbd with SMTP id x21-20020a056808145500b002d9a01a4bbdmr4227260oiv.228.1646783316883; Tue, 08 Mar 2022 15:48:36 -0800 (PST) Date: Tue, 8 Mar 2022 16:47:19 -0700 In-Reply-To: <20220308234723.3834941-1-yuzhao@google.com> Message-Id: <20220308234723.3834941-10-yuzhao@google.com> Mime-Version: 1.0 References: <20220308234723.3834941-1-yuzhao@google.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog Subject: [PATCH v8 09/14] mm: multi-gen LRU: optimize multiple memcgs From: Yu Zhao To: Andrew Morton Cc: Andi Kleen , Aneesh Kumar , Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Jesse Barnes , Johannes Weiner , Jonathan Corbet , Linus Torvalds , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Rik van Riel , Vlastimil Babka , Will Deacon , Ying Huang , linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, page-reclaim@google.com, x86@kernel.org, Yu Zhao , Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , "=?UTF-8?q?Holger=20Hoffst=C3=A4tte?=" , Konstantin Kharlamov , Shuang Zhai , Sofia Trinh , Vaibhav Jain Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When multiple memcgs are available, it is possible to make better choices based on generations and tiers and therefore improve the overall performance under global memory pressure. This patch adds a rudimentary optimization to select memcgs that can drop single-use unmapped clean pages first. Doing so reduces the chance of going into the aging path or swapping. These two operations can be costly. A typical example that benefits from this optimization is a server running mixed types of workloads, e.g., heavy anon workload in one memcg and heavy buffered I/O workload in the other. Though this optimization can be applied to both kswapd and direct reclaim, it is only added to kswapd to keep the patchset manageable. Later improvements will cover the direct reclaim path. Server benchmark results: Mixed workloads: fio (buffered I/O): -[28, 30]% IOPS BW patch1-7: 3117k 11.9GiB/s patch1-8: 2217k 8661MiB/s memcached (anon): +[247, 251]% Ops/sec KB/sec patch1-7: 563772.35 21900.01 patch1-8: 1968343.76 76461.24 Mixed workloads: fio (buffered I/O): -[4, 6]% IOPS BW 5.17-rc2: 2338k 9133MiB/s patch1-8: 2217k 8661MiB/s memcached (anon): +[524, 530]% Ops/sec KB/sec 5.17-rc2: 313821.65 12190.55 patch1-8: 1968343.76 76461.24 Configurations: (changes since patch 5) cat mixed.sh modprobe brd rd_nr=3D2 rd_size=3D56623104 swapoff -a mkswap /dev/ram0 swapon /dev/ram0 mkfs.ext4 /dev/ram1 mount -t ext4 /dev/ram1 /mnt memtier_benchmark -S /var/run/memcached/memcached.sock \ -P memcache_binary -n allkeys --key-minimum=3D1 \ --key-maximum=3D50000000 --key-pattern=3DP:P -c 1 -t 36 \ --ratio 1:0 --pipeline 8 -d 2000 fio -name=3Dmglru --numjobs=3D36 --directory=3D/mnt --size=3D1408m \ --buffered=3D1 --ioengine=3Dio_uring --iodepth=3D128 \ --iodepth_batch_submit=3D32 --iodepth_batch_complete=3D32 \ --rw=3Drandread --random_distribution=3Drandom --norandommap \ --time_based --ramp_time=3D10m --runtime=3D90m --group_reporting & pid=3D$! sleep 200 memtier_benchmark -S /var/run/memcached/memcached.sock \ -P memcache_binary -n allkeys --key-minimum=3D1 \ --key-maximum=3D50000000 --key-pattern=3DR:R -c 1 -t 36 \ --ratio 0:1 --pipeline 8 --randomize --distinct-client-seed kill -INT $pid wait Client benchmark results: no change (CONFIG_MEMCG=3Dn) Signed-off-by: Yu Zhao Acked-by: Brian Geffon Acked-by: Jan Alexander Steffens (heftig) Acked-by: Oleksandr Natalenko Acked-by: Steven Barrett Acked-by: Suleiman Souhlal Tested-by: Daniel Byrne Tested-by: Donald Carr Tested-by: Holger Hoffst=C3=A4tte Tested-by: Konstantin Kharlamov Tested-by: Shuang Zhai Tested-by: Sofia Trinh Tested-by: Vaibhav Jain --- mm/vmscan.c | 45 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index 67dc4190e790..7375c9dae08f 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -127,6 +127,13 @@ struct scan_control { /* Always discard instead of demoting to lower tier memory */ unsigned int no_demotion:1; =20 +#ifdef CONFIG_LRU_GEN + /* help make better choices when multiple memcgs are available */ + unsigned int memcgs_need_aging:1; + unsigned int memcgs_need_swapping:1; + unsigned int memcgs_avoid_swapping:1; +#endif + /* Allocation order */ s8 order; =20 @@ -4348,6 +4355,22 @@ static void lru_gen_age_node(struct pglist_data *pgd= at, struct scan_control *sc) =20 VM_BUG_ON(!current_is_kswapd()); =20 + /* + * To reduce the chance of going into the aging path or swapping, which + * can be costly, optimistically skip them unless their corresponding + * flags were cleared in the eviction path. This improves the overall + * performance when multiple memcgs are available. + */ + if (!sc->memcgs_need_aging) { + sc->memcgs_need_aging =3D true; + sc->memcgs_avoid_swapping =3D !sc->memcgs_need_swapping; + sc->memcgs_need_swapping =3D true; + return; + } + + sc->memcgs_need_swapping =3D true; + sc->memcgs_avoid_swapping =3D true; + current->reclaim_state->mm_walk =3D &pgdat->mm_walk; =20 memcg =3D mem_cgroup_iter(NULL, NULL, NULL); @@ -4750,7 +4773,8 @@ static int isolate_folios(struct lruvec *lruvec, stru= ct scan_control *sc, int sw return scanned; } =20 -static int evict_folios(struct lruvec *lruvec, struct scan_control *sc, in= t swappiness) +static int evict_folios(struct lruvec *lruvec, struct scan_control *sc, in= t swappiness, + bool *swapped) { int type; int scanned; @@ -4816,6 +4840,9 @@ static int evict_folios(struct lruvec *lruvec, struct= scan_control *sc, int swap =20 sc->nr_reclaimed +=3D reclaimed; =20 + if (type =3D=3D LRU_GEN_ANON && swapped) + *swapped =3D true; + return scanned; } =20 @@ -4844,8 +4871,10 @@ static long get_nr_to_scan(struct lruvec *lruvec, st= ruct scan_control *sc, bool if (!nr_to_scan) return 0; =20 - if (!need_aging) + if (!need_aging) { + sc->memcgs_need_aging =3D false; return nr_to_scan; + } =20 /* leave the work to lru_gen_age_node() */ if (current_is_kswapd()) @@ -4867,6 +4896,8 @@ static void lru_gen_shrink_lruvec(struct lruvec *lruv= ec, struct scan_control *sc { struct blk_plug plug; long scanned =3D 0; + bool swapped =3D false; + unsigned long reclaimed =3D sc->nr_reclaimed; struct pglist_data *pgdat =3D lruvec_pgdat(lruvec); =20 lru_add_drain(); @@ -4892,13 +4923,19 @@ static void lru_gen_shrink_lruvec(struct lruvec *lr= uvec, struct scan_control *sc if (!nr_to_scan) break; =20 - delta =3D evict_folios(lruvec, sc, swappiness); + delta =3D evict_folios(lruvec, sc, swappiness, &swapped); if (!delta) break; =20 + if (sc->memcgs_avoid_swapping && swappiness < 200 && swapped) + break; + scanned +=3D delta; - if (scanned >=3D nr_to_scan) + if (scanned >=3D nr_to_scan) { + if (!swapped && sc->nr_reclaimed - reclaimed >=3D MIN_LRU_BATCH) + sc->memcgs_need_swapping =3D false; break; + } =20 cond_resched(); } --=20 2.35.1.616.g0bdcbb4464-goog From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4F20AC433F5 for ; Tue, 8 Mar 2022 23:52:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject:References: Mime-Version:Message-Id:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=NBXUXns8dYj6UcLWhuMR5UVzO8uhHUSrd58slxX6w4I=; b=L2npHOMh8U8a446WTAuVQc0IhU +BT/BHDV5OB6HXI8b4M4TCPE9I1uKS4LSB+4oDsGibSXiV9u4cspv624dvlpJ1lJBX1fdmf+2tN8/ K/SGv5MGoqlpIEuTWkSp5vlJO8uq31XPOxD/aIe3vtcE40Z2tYgOU/MgXhpA95oRC6f+c8UeG9Cd4 1o75vlQRz+ePSZsWfRJGm2dUleu3XakUDxxUgcTLyw/ILXTA8QTS0g8XrM/RglOXNPvWjvBY6jwl7 d/dGWzkTycuv/oWDgXmHvd84Xjj3RLEsFuhrs7NBNEeZUEQDEaS/sYuh/zXSIoooUZJAo2u8pQAhu hyULpULw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nRjbu-006bXF-Rg; Tue, 08 Mar 2022 23:51:23 +0000 Received: from mail-oi1-x249.google.com ([2607:f8b0:4864:20::249]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nRjZG-006aPA-V8 for linux-arm-kernel@lists.infradead.org; Tue, 08 Mar 2022 23:48:51 +0000 Received: by mail-oi1-x249.google.com with SMTP id bh17-20020a056808181100b002d4f3396ec3so650422oib.9 for ; Tue, 08 Mar 2022 15:48:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=Ho7f/NeezaNx/+VE1xEC1BmmHhvU/tXr7U8nm19Ny/8=; b=Kug63PWFYJQb+IwWw8YfG9c5gyFA/+YkOMbdO97VJcnY3F7XuGvLqV1qb6eKsstYC6 fu8W4sy6PFGBz9UK+746zgHTSZVNYleA69c+Vq1TWk4/TU0EuK497e70zIiIOamehA0h Gr8W0c+sSHve+4eRxqrR5ljYMTvqacpM74fUU6qQ0A3IGEfMNnRqsozICggpkVL7/dY2 AvgPNCEIzB1Ja/2nNKG0O2O9vsy6qG9DZgHVDhhRhmUleDNdAcGGbCYTbG8epYqydwO0 gs5Tif4RsqE8crhUUYHOSkRUeNWcEXmkJs1SO+Rol7UpeJyHXqzn/uBhfzxuF7jaIr8/ O7WA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=Ho7f/NeezaNx/+VE1xEC1BmmHhvU/tXr7U8nm19Ny/8=; b=ehGKNDm1+7nOIlvMqA8jkI/FaWaMAkEB1IGfqTGz4WLC4FiqMh+//u20BsCgHl9q12 O02mJYiiY8ZznnU+U/as7bbxUshxmlotRdN7ItpoupCuH2U+3+eFWogF49r/o2Db6GjM o3FjuYgOIorQYLscneRlHcuBDOev4tPmvO4O0PSmGQgGn7m4b1fKjW2hMuu0Tyv3fi9y nUrF2mlAFLxLxDyta5Kfg5MA4IVKQw1sfmKL5D/vVrA/bG9NjZm8yFa40bdZjkbmmt65 FI8xtlGk7WxVE/kmWoVN+br6Ywa2oSKHXh5yeJEWIZtdvd4+Yr6DAq8oqYFaPL5oTXVo zFNw== X-Gm-Message-State: AOAM533O/gYzOMD1IbbrabUae/tFHbgZrhwWZxI8GN8paJR4c4SlMKzc cWd1/9GYBtdCYylq7MdnIGmUpeHheUI= X-Google-Smtp-Source: ABdhPJzM4xXQoy+k+mVLsuJXY9MtpV9RL7jteuvpZLDCBS3uEqNMbJUnHqoKnZ3hL+Nd69OrayRE4a4XWJk= X-Received: from yuzhao.bld.corp.google.com ([2620:15c:183:200:57a6:54a6:aad1:c0a8]) (user=yuzhao job=sendgmr) by 2002:a05:6808:1455:b0:2d9:a01a:4bbd with SMTP id x21-20020a056808145500b002d9a01a4bbdmr4227260oiv.228.1646783316883; Tue, 08 Mar 2022 15:48:36 -0800 (PST) Date: Tue, 8 Mar 2022 16:47:19 -0700 In-Reply-To: <20220308234723.3834941-1-yuzhao@google.com> Message-Id: <20220308234723.3834941-10-yuzhao@google.com> Mime-Version: 1.0 References: <20220308234723.3834941-1-yuzhao@google.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog Subject: [PATCH v8 09/14] mm: multi-gen LRU: optimize multiple memcgs From: Yu Zhao To: Andrew Morton Cc: Andi Kleen , Aneesh Kumar , Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Jesse Barnes , Johannes Weiner , Jonathan Corbet , Linus Torvalds , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Rik van Riel , Vlastimil Babka , Will Deacon , Ying Huang , linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, page-reclaim@google.com, x86@kernel.org, Yu Zhao , Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , "=?UTF-8?q?Holger=20Hoffst=C3=A4tte?=" , Konstantin Kharlamov , Shuang Zhai , Sofia Trinh , Vaibhav Jain X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220308_154839_052902_D209420F X-CRM114-Status: GOOD ( 20.40 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org V2hlbiBtdWx0aXBsZSBtZW1jZ3MgYXJlIGF2YWlsYWJsZSwgaXQgaXMgcG9zc2libGUgdG8gbWFr ZSBiZXR0ZXIKY2hvaWNlcyBiYXNlZCBvbiBnZW5lcmF0aW9ucyBhbmQgdGllcnMgYW5kIHRoZXJl Zm9yZSBpbXByb3ZlIHRoZQpvdmVyYWxsIHBlcmZvcm1hbmNlIHVuZGVyIGdsb2JhbCBtZW1vcnkg cHJlc3N1cmUuIFRoaXMgcGF0Y2ggYWRkcyBhCnJ1ZGltZW50YXJ5IG9wdGltaXphdGlvbiB0byBz ZWxlY3QgbWVtY2dzIHRoYXQgY2FuIGRyb3Agc2luZ2xlLXVzZQp1bm1hcHBlZCBjbGVhbiBwYWdl cyBmaXJzdC4gRG9pbmcgc28gcmVkdWNlcyB0aGUgY2hhbmNlIG9mIGdvaW5nIGludG8KdGhlIGFn aW5nIHBhdGggb3Igc3dhcHBpbmcuIFRoZXNlIHR3byBvcGVyYXRpb25zIGNhbiBiZSBjb3N0bHku CgpBIHR5cGljYWwgZXhhbXBsZSB0aGF0IGJlbmVmaXRzIGZyb20gdGhpcyBvcHRpbWl6YXRpb24g aXMgYSBzZXJ2ZXIKcnVubmluZyBtaXhlZCB0eXBlcyBvZiB3b3JrbG9hZHMsIGUuZy4sIGhlYXZ5 IGFub24gd29ya2xvYWQgaW4gb25lCm1lbWNnIGFuZCBoZWF2eSBidWZmZXJlZCBJL08gd29ya2xv YWQgaW4gdGhlIG90aGVyLgoKVGhvdWdoIHRoaXMgb3B0aW1pemF0aW9uIGNhbiBiZSBhcHBsaWVk IHRvIGJvdGgga3N3YXBkIGFuZCBkaXJlY3QKcmVjbGFpbSwgaXQgaXMgb25seSBhZGRlZCB0byBr c3dhcGQgdG8ga2VlcCB0aGUgcGF0Y2hzZXQgbWFuYWdlYWJsZS4KTGF0ZXIgaW1wcm92ZW1lbnRz IHdpbGwgY292ZXIgdGhlIGRpcmVjdCByZWNsYWltIHBhdGguCgpTZXJ2ZXIgYmVuY2htYXJrIHJl c3VsdHM6CiAgTWl4ZWQgd29ya2xvYWRzOgogICAgZmlvIChidWZmZXJlZCBJL08pOiAtWzI4LCAz MF0lCiAgICAgICAgICAgICAgICBJT1BTICAgICAgICAgQlcKICAgICAgcGF0Y2gxLTc6IDMxMTdr ICAgICAgICAxMS45R2lCL3MKICAgICAgcGF0Y2gxLTg6IDIyMTdrICAgICAgICA4NjYxTWlCL3MK CiAgICBtZW1jYWNoZWQgKGFub24pOiArWzI0NywgMjUxXSUKICAgICAgICAgICAgICAgIE9wcy9z ZWMgICAgICBLQi9zZWMKICAgICAgcGF0Y2gxLTc6IDU2Mzc3Mi4zNSAgICAyMTkwMC4wMQogICAg ICBwYXRjaDEtODogMTk2ODM0My43NiAgIDc2NDYxLjI0CgogIE1peGVkIHdvcmtsb2FkczoKICAg IGZpbyAoYnVmZmVyZWQgSS9PKTogLVs0LCA2XSUKICAgICAgICAgICAgICAgIElPUFMgICAgICAg ICBCVwogICAgICA1LjE3LXJjMjogMjMzOGsgICAgICAgIDkxMzNNaUIvcwogICAgICBwYXRjaDEt ODogMjIxN2sgICAgICAgIDg2NjFNaUIvcwoKICAgIG1lbWNhY2hlZCAoYW5vbik6ICtbNTI0LCA1 MzBdJQogICAgICAgICAgICAgICAgT3BzL3NlYyAgICAgIEtCL3NlYwogICAgICA1LjE3LXJjMjog MzEzODIxLjY1ICAgIDEyMTkwLjU1CiAgICAgIHBhdGNoMS04OiAxOTY4MzQzLjc2ICAgNzY0NjEu MjQKCiAgQ29uZmlndXJhdGlvbnM6CiAgICAoY2hhbmdlcyBzaW5jZSBwYXRjaCA1KQoKICAgIGNh dCBtaXhlZC5zaAogICAgbW9kcHJvYmUgYnJkIHJkX25yPTIgcmRfc2l6ZT01NjYyMzEwNAoKICAg IHN3YXBvZmYgLWEKICAgIG1rc3dhcCAvZGV2L3JhbTAKICAgIHN3YXBvbiAvZGV2L3JhbTAKCiAg ICBta2ZzLmV4dDQgL2Rldi9yYW0xCiAgICBtb3VudCAtdCBleHQ0IC9kZXYvcmFtMSAvbW50Cgog ICAgbWVtdGllcl9iZW5jaG1hcmsgLVMgL3Zhci9ydW4vbWVtY2FjaGVkL21lbWNhY2hlZC5zb2Nr IFwKICAgICAgLVAgbWVtY2FjaGVfYmluYXJ5IC1uIGFsbGtleXMgLS1rZXktbWluaW11bT0xIFwK ICAgICAgLS1rZXktbWF4aW11bT01MDAwMDAwMCAtLWtleS1wYXR0ZXJuPVA6UCAtYyAxIC10IDM2 IFwKICAgICAgLS1yYXRpbyAxOjAgLS1waXBlbGluZSA4IC1kIDIwMDAKCiAgICBmaW8gLW5hbWU9 bWdscnUgLS1udW1qb2JzPTM2IC0tZGlyZWN0b3J5PS9tbnQgLS1zaXplPTE0MDhtIFwKICAgICAg LS1idWZmZXJlZD0xIC0taW9lbmdpbmU9aW9fdXJpbmcgLS1pb2RlcHRoPTEyOCBcCiAgICAgIC0t aW9kZXB0aF9iYXRjaF9zdWJtaXQ9MzIgLS1pb2RlcHRoX2JhdGNoX2NvbXBsZXRlPTMyIFwKICAg ICAgLS1ydz1yYW5kcmVhZCAtLXJhbmRvbV9kaXN0cmlidXRpb249cmFuZG9tIC0tbm9yYW5kb21t YXAgXAogICAgICAtLXRpbWVfYmFzZWQgLS1yYW1wX3RpbWU9MTBtIC0tcnVudGltZT05MG0gLS1n cm91cF9yZXBvcnRpbmcgJgogICAgcGlkPSQhCgogICAgc2xlZXAgMjAwCgogICAgbWVtdGllcl9i ZW5jaG1hcmsgLVMgL3Zhci9ydW4vbWVtY2FjaGVkL21lbWNhY2hlZC5zb2NrIFwKICAgICAgLVAg bWVtY2FjaGVfYmluYXJ5IC1uIGFsbGtleXMgLS1rZXktbWluaW11bT0xIFwKICAgICAgLS1rZXkt bWF4aW11bT01MDAwMDAwMCAtLWtleS1wYXR0ZXJuPVI6UiAtYyAxIC10IDM2IFwKICAgICAgLS1y YXRpbyAwOjEgLS1waXBlbGluZSA4IC0tcmFuZG9taXplIC0tZGlzdGluY3QtY2xpZW50LXNlZWQK CiAgICBraWxsIC1JTlQgJHBpZAogICAgd2FpdAoKQ2xpZW50IGJlbmNobWFyayByZXN1bHRzOgog IG5vIGNoYW5nZSAoQ09ORklHX01FTUNHPW4pCgpTaWduZWQtb2ZmLWJ5OiBZdSBaaGFvIDx5dXpo YW9AZ29vZ2xlLmNvbT4KQWNrZWQtYnk6IEJyaWFuIEdlZmZvbiA8YmdlZmZvbkBnb29nbGUuY29t PgpBY2tlZC1ieTogSmFuIEFsZXhhbmRlciBTdGVmZmVucyAoaGVmdGlnKSA8aGVmdGlnQGFyY2hs aW51eC5vcmc+CkFja2VkLWJ5OiBPbGVrc2FuZHIgTmF0YWxlbmtvIDxvbGVrc2FuZHJAbmF0YWxl bmtvLm5hbWU+CkFja2VkLWJ5OiBTdGV2ZW4gQmFycmV0dCA8c3RldmVuQGxpcXVvcml4Lm5ldD4K QWNrZWQtYnk6IFN1bGVpbWFuIFNvdWhsYWwgPHN1bGVpbWFuQGdvb2dsZS5jb20+ClRlc3RlZC1i eTogRGFuaWVsIEJ5cm5lIDxkamJ5cm5lQG10dS5lZHU+ClRlc3RlZC1ieTogRG9uYWxkIENhcnIg PGRAY2hhb3MtcmVpbnMuY29tPgpUZXN0ZWQtYnk6IEhvbGdlciBIb2Zmc3TDpHR0ZSA8aG9sZ2Vy QGFwcGxpZWQtYXN5bmNocm9ueS5jb20+ClRlc3RlZC1ieTogS29uc3RhbnRpbiBLaGFybGFtb3Yg PEhpLUFuZ2VsQHlhbmRleC5ydT4KVGVzdGVkLWJ5OiBTaHVhbmcgWmhhaSA8c3poYWkyQGNzLnJv Y2hlc3Rlci5lZHU+ClRlc3RlZC1ieTogU29maWEgVHJpbmggPHNvZmlhLnRyaW5oQGVkaS53b3Jr cz4KVGVzdGVkLWJ5OiBWYWliaGF2IEphaW4gPHZhaWJoYXZAbGludXguaWJtLmNvbT4KLS0tCiBt bS92bXNjYW4uYyB8IDQ1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr LS0tLQogMSBmaWxlIGNoYW5nZWQsIDQxIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA2N2RjNDE5MGU3OTAu LjczNzVjOWRhZTA4ZiAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMK QEAgLTEyNyw2ICsxMjcsMTMgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiAJLyogQWx3YXlzIGRp c2NhcmQgaW5zdGVhZCBvZiBkZW1vdGluZyB0byBsb3dlciB0aWVyIG1lbW9yeSAqLwogCXVuc2ln bmVkIGludCBub19kZW1vdGlvbjoxOwogCisjaWZkZWYgQ09ORklHX0xSVV9HRU4KKwkvKiBoZWxw IG1ha2UgYmV0dGVyIGNob2ljZXMgd2hlbiBtdWx0aXBsZSBtZW1jZ3MgYXJlIGF2YWlsYWJsZSAq LworCXVuc2lnbmVkIGludCBtZW1jZ3NfbmVlZF9hZ2luZzoxOworCXVuc2lnbmVkIGludCBtZW1j Z3NfbmVlZF9zd2FwcGluZzoxOworCXVuc2lnbmVkIGludCBtZW1jZ3NfYXZvaWRfc3dhcHBpbmc6 MTsKKyNlbmRpZgorCiAJLyogQWxsb2NhdGlvbiBvcmRlciAqLwogCXM4IG9yZGVyOwogCkBAIC00 MzQ4LDYgKzQzNTUsMjIgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGds aXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAogCVZNX0JVR19PTigh Y3VycmVudF9pc19rc3dhcGQoKSk7CiAKKwkvKgorCSAqIFRvIHJlZHVjZSB0aGUgY2hhbmNlIG9m IGdvaW5nIGludG8gdGhlIGFnaW5nIHBhdGggb3Igc3dhcHBpbmcsIHdoaWNoCisJICogY2FuIGJl IGNvc3RseSwgb3B0aW1pc3RpY2FsbHkgc2tpcCB0aGVtIHVubGVzcyB0aGVpciBjb3JyZXNwb25k aW5nCisJICogZmxhZ3Mgd2VyZSBjbGVhcmVkIGluIHRoZSBldmljdGlvbiBwYXRoLiBUaGlzIGlt cHJvdmVzIHRoZSBvdmVyYWxsCisJICogcGVyZm9ybWFuY2Ugd2hlbiBtdWx0aXBsZSBtZW1jZ3Mg YXJlIGF2YWlsYWJsZS4KKwkgKi8KKwlpZiAoIXNjLT5tZW1jZ3NfbmVlZF9hZ2luZykgeworCQlz Yy0+bWVtY2dzX25lZWRfYWdpbmcgPSB0cnVlOworCQlzYy0+bWVtY2dzX2F2b2lkX3N3YXBwaW5n ID0gIXNjLT5tZW1jZ3NfbmVlZF9zd2FwcGluZzsKKwkJc2MtPm1lbWNnc19uZWVkX3N3YXBwaW5n ID0gdHJ1ZTsKKwkJcmV0dXJuOworCX0KKworCXNjLT5tZW1jZ3NfbmVlZF9zd2FwcGluZyA9IHRy dWU7CisJc2MtPm1lbWNnc19hdm9pZF9zd2FwcGluZyA9IHRydWU7CisKIAljdXJyZW50LT5yZWNs YWltX3N0YXRlLT5tbV93YWxrID0gJnBnZGF0LT5tbV93YWxrOwogCiAJbWVtY2cgPSBtZW1fY2dy b3VwX2l0ZXIoTlVMTCwgTlVMTCwgTlVMTCk7CkBAIC00NzUwLDcgKzQ3NzMsOCBAQCBzdGF0aWMg aW50IGlzb2xhdGVfZm9saW9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29u dHJvbCAqc2MsIGludCBzdwogCXJldHVybiBzY2FubmVkOwogfQogCi1zdGF0aWMgaW50IGV2aWN0 X2ZvbGlvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBp bnQgc3dhcHBpbmVzcykKK3N0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHN0cnVjdCBscnV2ZWMgKmxy dXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLAorCQkJYm9vbCAq c3dhcHBlZCkKIHsKIAlpbnQgdHlwZTsKIAlpbnQgc2Nhbm5lZDsKQEAgLTQ4MTYsNiArNDg0MCw5 IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0 IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwCiAKIAlzYy0+bnJfcmVjbGFpbWVkICs9IHJlY2xh aW1lZDsKIAorCWlmICh0eXBlID09IExSVV9HRU5fQU5PTiAmJiBzd2FwcGVkKQorCQkqc3dhcHBl ZCA9IHRydWU7CisKIAlyZXR1cm4gc2Nhbm5lZDsKIH0KIApAQCAtNDg0NCw4ICs0ODcxLDEwIEBA IHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0 IHNjYW5fY29udHJvbCAqc2MsIGJvb2wKIAlpZiAoIW5yX3RvX3NjYW4pCiAJCXJldHVybiAwOwog Ci0JaWYgKCFuZWVkX2FnaW5nKQorCWlmICghbmVlZF9hZ2luZykgeworCQlzYy0+bWVtY2dzX25l ZWRfYWdpbmcgPSBmYWxzZTsKIAkJcmV0dXJuIG5yX3RvX3NjYW47CisJfQogCiAJLyogbGVhdmUg dGhlIHdvcmsgdG8gbHJ1X2dlbl9hZ2Vfbm9kZSgpICovCiAJaWYgKGN1cnJlbnRfaXNfa3N3YXBk KCkpCkBAIC00ODY3LDYgKzQ4OTYsOCBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2 ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYwogewogCXN0 cnVjdCBibGtfcGx1ZyBwbHVnOwogCWxvbmcgc2Nhbm5lZCA9IDA7CisJYm9vbCBzd2FwcGVkID0g ZmFsc2U7CisJdW5zaWduZWQgbG9uZyByZWNsYWltZWQgPSBzYy0+bnJfcmVjbGFpbWVkOwogCXN0 cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTsKIAogCWxydV9h ZGRfZHJhaW4oKTsKQEAgLTQ4OTIsMTMgKzQ5MjMsMTkgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9z aHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAq c2MKIAkJaWYgKCFucl90b19zY2FuKQogCQkJYnJlYWs7CiAKLQkJZGVsdGEgPSBldmljdF9mb2xp b3MobHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7CisJCWRlbHRhID0gZXZpY3RfZm9saW9zKGxydXZl Yywgc2MsIHN3YXBwaW5lc3MsICZzd2FwcGVkKTsKIAkJaWYgKCFkZWx0YSkKIAkJCWJyZWFrOwog CisJCWlmIChzYy0+bWVtY2dzX2F2b2lkX3N3YXBwaW5nICYmIHN3YXBwaW5lc3MgPCAyMDAgJiYg c3dhcHBlZCkKKwkJCWJyZWFrOworCiAJCXNjYW5uZWQgKz0gZGVsdGE7Ci0JCWlmIChzY2FubmVk ID49IG5yX3RvX3NjYW4pCisJCWlmIChzY2FubmVkID49IG5yX3RvX3NjYW4pIHsKKwkJCWlmICgh c3dhcHBlZCAmJiBzYy0+bnJfcmVjbGFpbWVkIC0gcmVjbGFpbWVkID49IE1JTl9MUlVfQkFUQ0gp CisJCQkJc2MtPm1lbWNnc19uZWVkX3N3YXBwaW5nID0gZmFsc2U7CiAJCQlicmVhazsKKwkJfQog CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KLS0gCjIuMzUuMS42MTYuZzBiZGNiYjQ0NjQtZ29vZwoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFy bS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1r ZXJuZWwK