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 567E8C433F5 for ; Wed, 18 May 2022 01:47:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233950AbiERBrz (ORCPT ); Tue, 17 May 2022 21:47:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57982 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233908AbiERBrT (ORCPT ); Tue, 17 May 2022 21:47:19 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4C2D554BDF for ; Tue, 17 May 2022 18:47:08 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-2fefb9975c5so7807467b3.21 for ; Tue, 17 May 2022 18:47:08 -0700 (PDT) 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=4FeaUrAcLPRNiyzpAHQ0qcCXUD7YXoCTIslsK0eD41Y=; b=fY1LqfrKQ18+zKLGy9WAd1jhk4VwDPAd0IP4P/GayWs6ndMf1nwMh8ZeYcvmBvuQ86 GpQQbyLBSjF23S7zqVvGdVp+NhPNYUcEUibP9bZO93rvR/t4RaRptXl2EOOp6+M7siuk yyRO+Wl6PuJWn7Xwhyh8gZ85CQPKMf/I/wBMMl0V/SycgsCafQq1iRHTvJ9moWxQmf46 rZyxEQjVEhddig/3bxo3Z7eq6tArA9FnKVE89X+ECO3qXcalVE8q0pmjvTzgQoZD9u8Y 1jNa9K1p0P9tENosGYdbO0KFHBjCCY+zlhZh6sG36xX4v5+dFYKBdKat1qNZevsdhVt/ sD6A== 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=4FeaUrAcLPRNiyzpAHQ0qcCXUD7YXoCTIslsK0eD41Y=; b=Yctb6Ps7fdFFAgc75u2RI9XzpoxoE6nBCjDe2PfaL+GQl5xyrQ/j8n6JmTEI+12sR3 aMJlJstWA4S8ko7DgHVpbZmFX5gWVXHu3vYlymy4ejTbSL7ULwMxIgz8XzOXVuL46uaX ZO8Zp1Gp/j/5Lxb7wDR5HzsLcmvcWRhStNJSonFb1Em6d99AQ1UJNnjG7YSJP0/w+xEW gRPscXVFQpKJcssgW8P+izH/NIQjNWduzMog04HMMmVSHqcgneqR5paO90iRQnxNwvfI 9RIKx9GbWdLBGVSK4I3GzOOTNJb+DhjdEPwj6rLOACDZMRt1JhjlFD0jeXogPymF3TMX n7Lg== X-Gm-Message-State: AOAM530x//URpklhvvgeII6Ddh4AVfYXNL9+08kP/K+f1Cj6UInXfaTE Qg0GNcNLYeJd8+ixOqnSEdh+xxymM1U= X-Google-Smtp-Source: ABdhPJxuNk1xSGxsu2QLdajUUp4vZke7U/gS7MXlBwFIqZvnz7q0GxTwsMzXdo4nRCJXJA5BHFLhn+OxTdg= X-Received: from yuzhao.bld.corp.google.com ([2620:15c:183:200:f7bc:90c9:d86e:4ea8]) (user=yuzhao job=sendgmr) by 2002:a81:2684:0:b0:2f8:46f4:7c6d with SMTP id m126-20020a812684000000b002f846f47c6dmr30129509ywm.444.1652838427172; Tue, 17 May 2022 18:47:07 -0700 (PDT) Date: Tue, 17 May 2022 19:46:28 -0600 In-Reply-To: <20220518014632.922072-1-yuzhao@google.com> Message-Id: <20220518014632.922072-10-yuzhao@google.com> Mime-Version: 1.0 References: <20220518014632.922072-1-yuzhao@google.com> X-Mailer: git-send-email 2.36.0.550.gb090851708-goog Subject: [PATCH v11 09/14] mm: multi-gen LRU: optimize multiple memcgs From: Yu Zhao To: Andrew Morton , linux-mm@kvack.org Cc: Andi Kleen , Aneesh Kumar , Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Johannes Weiner , Jonathan Corbet , Linus Torvalds , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Peter Zijlstra , Tejun Heo , Vlastimil Babka , Will Deacon , linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, x86@kernel.org, page-reclaim@google.com, 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): +[1, 3]% IOPS BW patch1-8: 2154k 8415MiB/s patch1-9: 2205k 8613MiB/s memcached (anon): +[132, 136]% Ops/sec KB/sec patch1-8: 819618.49 31838.48 patch1-9: 1916516.06 74447.92 Mixed workloads: fio (buffered I/O): +[59, 61]% IOPS BW 5.18-rc1: 1378k 5385MiB/s patch1-9: 2205k 8613MiB/s memcached (anon): +[229, 233]% Ops/sec KB/sec 5.18-rc1: 578946.00 22489.44 patch1-9: 1916516.06 74447.92 Configurations: (changes since patch 6) 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 f292e7e761b1..a7e768675707 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -128,6 +128,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 @@ -4290,6 +4297,22 @@ static void lru_gen_age_node(struct pglist_data *pgd= at, struct scan_control *sc) =20 VM_WARN_ON_ONCE(!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); @@ -4699,7 +4722,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; @@ -4765,6 +4789,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 @@ -4793,8 +4820,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()) @@ -4816,6 +4845,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(); @@ -4841,13 +4872,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.36.0.550.gb090851708-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 6703EC433EF for ; Wed, 18 May 2022 03:04:40 +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=mtY2Dcl1RLYiG0Wm4P8Dc8a78EJZYN6/izcD1eIote0=; b=dlHretoOcXy8evw0FxwnpiVyNV GCzvf9D920LfnAxlt3S/iWhATfwx2bPNhu1Oz6Rtq2aXSRkzJGAg+KZOUYd/6q+4tRKqW/ZwnxfLh bY/Gi2fbF8nIw/BxWRS0HLvYEO/S5b5sPHFC+WW3NDP/DDZWITNqRis6tOzgZrFBASqn/cB18+Q9r lAy3gU8dd2yJrNq7e8zfFN9rJ12za7T4583ntcd0L0iLvLTfi/3pzGTpbhhDwb0iFjzCanHqIjXzW l6Nl7CQdwjIdoTwqJnoYtLh6r3bj8mnUhjo/p8fVbeIjJvfs+eA7RwWcugFBbXe+DBAdVRJpDBjk4 hkaiAkVg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nr9xm-00GmvQ-Bb; Wed, 18 May 2022 03:03:04 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nr9wa-00GmIb-9p for linux-arm-kernel@bombadil.infradead.org; Wed, 18 May 2022 03:01:48 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :Cc:To:From:Subject:References:Mime-Version:Message-Id:In-Reply-To:Date: Sender:Reply-To:Content-ID:Content-Description; bh=4FeaUrAcLPRNiyzpAHQ0qcCXUD7YXoCTIslsK0eD41Y=; b=La7DGjkFh2dQtDEALxEYACrRoj cWH8HrG3HQPw3hZMHgMDMrM+W+u3dcq6ussPOJ/zfhSu7pOq0Kwo25P1xqqMxlGxEaZVz04o8hH11 WYv0daUsyubTiBS3lAZ7xbus3fGKZkDrHOVBjuaKhzLeUKQBItNG+VsJcgY6uO1gGT3ukKgTrFG4z zEs8OfTcDwF/c1XjlBex31TJvLxsRbRI/nHwQ+zpId0Ntc4ZbnkCkWrVoNvb8UzaSxS/hAW5mCvpV qtMSyBTVkG/aSaqEGdMtNc/wP/PGctAbrVfM8D6v2ZEK0824Ij1b2X5ndQSMo45LLdTVN+cycqfqD 6LkPb05g==; Received: from mail-yw1-x114a.google.com ([2607:f8b0:4864:20::114a]) by desiato.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nr8mM-001Oxk-MQ for linux-arm-kernel@lists.infradead.org; Wed, 18 May 2022 01:47:14 +0000 Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-2d7eaa730d9so8132317b3.13 for ; Tue, 17 May 2022 18:47:08 -0700 (PDT) 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=4FeaUrAcLPRNiyzpAHQ0qcCXUD7YXoCTIslsK0eD41Y=; b=fY1LqfrKQ18+zKLGy9WAd1jhk4VwDPAd0IP4P/GayWs6ndMf1nwMh8ZeYcvmBvuQ86 GpQQbyLBSjF23S7zqVvGdVp+NhPNYUcEUibP9bZO93rvR/t4RaRptXl2EOOp6+M7siuk yyRO+Wl6PuJWn7Xwhyh8gZ85CQPKMf/I/wBMMl0V/SycgsCafQq1iRHTvJ9moWxQmf46 rZyxEQjVEhddig/3bxo3Z7eq6tArA9FnKVE89X+ECO3qXcalVE8q0pmjvTzgQoZD9u8Y 1jNa9K1p0P9tENosGYdbO0KFHBjCCY+zlhZh6sG36xX4v5+dFYKBdKat1qNZevsdhVt/ sD6A== 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=4FeaUrAcLPRNiyzpAHQ0qcCXUD7YXoCTIslsK0eD41Y=; b=zEf1joVDNBYyAhthfnX2O/1Fp0dSyb57soR0oWbv4dVSnJoxTcAh8kWRu320aRKajj 89EdtQG0bLEzBSsLZJWY+vWsbQT9ZjCZ3mJt7Iuer9dQW3Akzn5pwJ0lSvASAWL6h4hL tdPcDy5whVNgQ57iSK6e3JkpKHMc+RoekNzgWPJhEXwb7sZEnck/WP4P7CzsjuTzM12u gAwuiQ3+GsyNgXATbaBNreJ4mtHTw5qUl1G7NsCRD/vC+mrtOtA9HC8i1ScAGOG7Je+4 9jMZPT2xDZdSCAz+ZTW4ISNMNVivTYZAZq/BK0q/48E9vh+aUikjTUYwM11RhSc4FS2t GUiA== X-Gm-Message-State: AOAM531wBIxkqGP0nS0ZXWXHP5MkkwnUK9zUFgFA1i5sass6PvhDnb40 EftzD5zzFHIyTx1h++sIaenOf3CUrY4= X-Google-Smtp-Source: ABdhPJxuNk1xSGxsu2QLdajUUp4vZke7U/gS7MXlBwFIqZvnz7q0GxTwsMzXdo4nRCJXJA5BHFLhn+OxTdg= X-Received: from yuzhao.bld.corp.google.com ([2620:15c:183:200:f7bc:90c9:d86e:4ea8]) (user=yuzhao job=sendgmr) by 2002:a81:2684:0:b0:2f8:46f4:7c6d with SMTP id m126-20020a812684000000b002f846f47c6dmr30129509ywm.444.1652838427172; Tue, 17 May 2022 18:47:07 -0700 (PDT) Date: Tue, 17 May 2022 19:46:28 -0600 In-Reply-To: <20220518014632.922072-1-yuzhao@google.com> Message-Id: <20220518014632.922072-10-yuzhao@google.com> Mime-Version: 1.0 References: <20220518014632.922072-1-yuzhao@google.com> X-Mailer: git-send-email 2.36.0.550.gb090851708-goog Subject: [PATCH v11 09/14] mm: multi-gen LRU: optimize multiple memcgs From: Yu Zhao To: Andrew Morton , linux-mm@kvack.org Cc: Andi Kleen , Aneesh Kumar , Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Johannes Weiner , Jonathan Corbet , Linus Torvalds , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Peter Zijlstra , Tejun Heo , Vlastimil Babka , Will Deacon , linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, x86@kernel.org, page-reclaim@google.com, 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-20220518_024711_555205_C1B8C166 X-CRM114-Status: GOOD ( 19.59 ) 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 c3VsdHM6CiAgTWl4ZWQgd29ya2xvYWRzOgogICAgZmlvIChidWZmZXJlZCBJL08pOiArWzEsIDNd JQogICAgICAgICAgICAgICAgSU9QUyAgICAgICAgIEJXCiAgICAgIHBhdGNoMS04OiAyMTU0ayAg ICAgICAgODQxNU1pQi9zCiAgICAgIHBhdGNoMS05OiAyMjA1ayAgICAgICAgODYxM01pQi9zCgog ICAgbWVtY2FjaGVkIChhbm9uKTogK1sxMzIsIDEzNl0lCiAgICAgICAgICAgICAgICBPcHMvc2Vj ICAgICAgS0Ivc2VjCiAgICAgIHBhdGNoMS04OiA4MTk2MTguNDkgICAgMzE4MzguNDgKICAgICAg cGF0Y2gxLTk6IDE5MTY1MTYuMDYgICA3NDQ0Ny45MgoKICBNaXhlZCB3b3JrbG9hZHM6CiAgICBm aW8gKGJ1ZmZlcmVkIEkvTyk6ICtbNTksIDYxXSUKICAgICAgICAgICAgICAgIElPUFMgICAgICAg ICBCVwogICAgICA1LjE4LXJjMTogMTM3OGsgICAgICAgIDUzODVNaUIvcwogICAgICBwYXRjaDEt OTogMjIwNWsgICAgICAgIDg2MTNNaUIvcwoKICAgIG1lbWNhY2hlZCAoYW5vbik6ICtbMjI5LCAy MzNdJQogICAgICAgICAgICAgICAgT3BzL3NlYyAgICAgIEtCL3NlYwogICAgICA1LjE4LXJjMTog NTc4OTQ2LjAwICAgIDIyNDg5LjQ0CiAgICAgIHBhdGNoMS05OiAxOTE2NTE2LjA2ICAgNzQ0NDcu OTIKCiAgQ29uZmlndXJhdGlvbnM6CiAgICAoY2hhbmdlcyBzaW5jZSBwYXRjaCA2KQoKICAgIGNh 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 aWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBmMjkyZTdlNzYxYjEu LmE3ZTc2ODY3NTcwNyAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMK QEAgLTEyOCw2ICsxMjgsMTMgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiAJLyogQWx3YXlzIGRp c2NhcmQgaW5zdGVhZCBvZiBkZW1vdGluZyB0byBsb3dlciB0aWVyIG1lbW9yeSAqLwogCXVuc2ln bmVkIGludCBub19kZW1vdGlvbjoxOwogCisjaWZkZWYgQ09ORklHX0xSVV9HRU4KKwkvKiBoZWxw IG1ha2UgYmV0dGVyIGNob2ljZXMgd2hlbiBtdWx0aXBsZSBtZW1jZ3MgYXJlIGF2YWlsYWJsZSAq LworCXVuc2lnbmVkIGludCBtZW1jZ3NfbmVlZF9hZ2luZzoxOworCXVuc2lnbmVkIGludCBtZW1j Z3NfbmVlZF9zd2FwcGluZzoxOworCXVuc2lnbmVkIGludCBtZW1jZ3NfYXZvaWRfc3dhcHBpbmc6 MTsKKyNlbmRpZgorCiAJLyogQWxsb2NhdGlvbiBvcmRlciAqLwogCXM4IG9yZGVyOwogCkBAIC00 MjkwLDYgKzQyOTcsMjIgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGds aXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAogCVZNX1dBUk5fT05f T05DRSghY3VycmVudF9pc19rc3dhcGQoKSk7CiAKKwkvKgorCSAqIFRvIHJlZHVjZSB0aGUgY2hh bmNlIG9mIGdvaW5nIGludG8gdGhlIGFnaW5nIHBhdGggb3Igc3dhcHBpbmcsIHdoaWNoCisJICog Y2FuIGJlIGNvc3RseSwgb3B0aW1pc3RpY2FsbHkgc2tpcCB0aGVtIHVubGVzcyB0aGVpciBjb3Jy ZXNwb25kaW5nCisJICogZmxhZ3Mgd2VyZSBjbGVhcmVkIGluIHRoZSBldmljdGlvbiBwYXRoLiBU aGlzIGltcHJvdmVzIHRoZSBvdmVyYWxsCisJICogcGVyZm9ybWFuY2Ugd2hlbiBtdWx0aXBsZSBt ZW1jZ3MgYXJlIGF2YWlsYWJsZS4KKwkgKi8KKwlpZiAoIXNjLT5tZW1jZ3NfbmVlZF9hZ2luZykg eworCQlzYy0+bWVtY2dzX25lZWRfYWdpbmcgPSB0cnVlOworCQlzYy0+bWVtY2dzX2F2b2lkX3N3 YXBwaW5nID0gIXNjLT5tZW1jZ3NfbmVlZF9zd2FwcGluZzsKKwkJc2MtPm1lbWNnc19uZWVkX3N3 YXBwaW5nID0gdHJ1ZTsKKwkJcmV0dXJuOworCX0KKworCXNjLT5tZW1jZ3NfbmVlZF9zd2FwcGlu ZyA9IHRydWU7CisJc2MtPm1lbWNnc19hdm9pZF9zd2FwcGluZyA9IHRydWU7CisKIAljdXJyZW50 LT5yZWNsYWltX3N0YXRlLT5tbV93YWxrID0gJnBnZGF0LT5tbV93YWxrOwogCiAJbWVtY2cgPSBt ZW1fY2dyb3VwX2l0ZXIoTlVMTCwgTlVMTCwgTlVMTCk7CkBAIC00Njk5LDcgKzQ3MjIsOCBAQCBz dGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNj YW5fY29udHJvbCAqc2MsIGludCBzdwogCXJldHVybiBzY2FubmVkOwogfQogCi1zdGF0aWMgaW50 IGV2aWN0X2ZvbGlvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wg KnNjLCBpbnQgc3dhcHBpbmVzcykKK3N0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHN0cnVjdCBscnV2 ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLAorCQkJ Ym9vbCAqc3dhcHBlZCkKIHsKIAlpbnQgdHlwZTsKIAlpbnQgc2Nhbm5lZDsKQEAgLTQ3NjUsNiAr NDc4OSw5IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywg c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwCiAKIAlzYy0+bnJfcmVjbGFpbWVkICs9 IHJlY2xhaW1lZDsKIAorCWlmICh0eXBlID09IExSVV9HRU5fQU5PTiAmJiBzd2FwcGVkKQorCQkq c3dhcHBlZCA9IHRydWU7CisKIAlyZXR1cm4gc2Nhbm5lZDsKIH0KIApAQCAtNDc5Myw4ICs0ODIw LDEwIEBAIHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywg c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wKIAlpZiAoIW5yX3RvX3NjYW4pCiAJCXJldHVy biAwOwogCi0JaWYgKCFuZWVkX2FnaW5nKQorCWlmICghbmVlZF9hZ2luZykgeworCQlzYy0+bWVt Y2dzX25lZWRfYWdpbmcgPSBmYWxzZTsKIAkJcmV0dXJuIG5yX3RvX3NjYW47CisJfQogCiAJLyog bGVhdmUgdGhlIHdvcmsgdG8gbHJ1X2dlbl9hZ2Vfbm9kZSgpICovCiAJaWYgKGN1cnJlbnRfaXNf a3N3YXBkKCkpCkBAIC00ODE2LDYgKzQ4NDUsOCBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlu a19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYwog ewogCXN0cnVjdCBibGtfcGx1ZyBwbHVnOwogCWxvbmcgc2Nhbm5lZCA9IDA7CisJYm9vbCBzd2Fw cGVkID0gZmFsc2U7CisJdW5zaWduZWQgbG9uZyByZWNsYWltZWQgPSBzYy0+bnJfcmVjbGFpbWVk OwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTsKIAog CWxydV9hZGRfZHJhaW4oKTsKQEAgLTQ4NDEsMTMgKzQ4NzIsMTkgQEAgc3RhdGljIHZvaWQgbHJ1 X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29u dHJvbCAqc2MKIAkJaWYgKCFucl90b19zY2FuKQogCQkJYnJlYWs7CiAKLQkJZGVsdGEgPSBldmlj dF9mb2xpb3MobHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7CisJCWRlbHRhID0gZXZpY3RfZm9saW9z KGxydXZlYywgc2MsIHN3YXBwaW5lc3MsICZzd2FwcGVkKTsKIAkJaWYgKCFkZWx0YSkKIAkJCWJy ZWFrOwogCisJCWlmIChzYy0+bWVtY2dzX2F2b2lkX3N3YXBwaW5nICYmIHN3YXBwaW5lc3MgPCAy MDAgJiYgc3dhcHBlZCkKKwkJCWJyZWFrOworCiAJCXNjYW5uZWQgKz0gZGVsdGE7Ci0JCWlmIChz Y2FubmVkID49IG5yX3RvX3NjYW4pCisJCWlmIChzY2FubmVkID49IG5yX3RvX3NjYW4pIHsKKwkJ CWlmICghc3dhcHBlZCAmJiBzYy0+bnJfcmVjbGFpbWVkIC0gcmVjbGFpbWVkID49IE1JTl9MUlVf QkFUQ0gpCisJCQkJc2MtPm1lbWNnc19uZWVkX3N3YXBwaW5nID0gZmFsc2U7CiAJCQlicmVhazsK KwkJfQogCiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KLS0gCjIuMzYuMC41NTAuZ2IwOTA4NTE3MDgt Z29vZwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxp bnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LWFybS1rZXJuZWwK