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 9B3EAC433FE for ; Thu, 7 Apr 2022 03:17:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240051AbiDGDTU (ORCPT ); Wed, 6 Apr 2022 23:19:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43370 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240013AbiDGDS1 (ORCPT ); Wed, 6 Apr 2022 23:18:27 -0400 Received: from mail-il1-x14a.google.com (mail-il1-x14a.google.com [IPv6:2607:f8b0:4864:20::14a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0DF19DFDD4 for ; Wed, 6 Apr 2022 20:16:11 -0700 (PDT) Received: by mail-il1-x14a.google.com with SMTP id x6-20020a923006000000b002bea39c3974so2975097ile.12 for ; Wed, 06 Apr 2022 20:16:11 -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=/BTpyTC3BWITVgtzyo3yWI9ScJ2B23IF80HP+e4RTLs=; b=B+qgdKxMWufdOBeUFvxfs40yxRQ7wr/nUoKevP6v/dym/GHDI4umWm7dakxK+KMyIG pKTbn9qM+ALlw0LJ4lXKe+uPjIn7kNg442HN2penNhVKqSwWJlTgxh2R//+4KwhK4KTy jBR9nB940pfXEwDgg+3Ua63sSMFkbj3UMgy3/VYHTw/jYgQ6u70mJLUanJ/RVtfBv/NM t6pqlQjzQ7a/X2eGtAf+2IQbpPwTu3rMFj1QeOYxKx8t2DFExeZSyJy8pVs9Le8/4hQr Am4uio9JdJDvzBecumGJ552H6Pho70P2bDeqOopqV7jw9A5CayyaMPT3Xdu30OuCXenz PeOA== 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=/BTpyTC3BWITVgtzyo3yWI9ScJ2B23IF80HP+e4RTLs=; b=SieC+u6//aQ+dO8jHBgGYK3SBqEgsuG6zMCiO0AcZhcSPLvsAYbF4yDm6T+COpI9Bd bErARctGUFyz0Iqt9KfwATUgGeC/wWXtuxakdp99Q/Qp8oYXz3ajWRVWPfNwgBOkvkah m7XcTmvYIgHtuYpQluMf1lfVw3K3OTNsKywh1PkVr6zwKkDs3myOyuIEVKeci5me1ijS xaWZ83CGx0HZnEeYLIG2IukeqaqWrJ3jvNRvyreJMliuX6Z9bezOCFl8xKH6PWRpOXG2 8N8BUxLxSEEK6G788hC+rDzmbNHgKSdlBhWFQFQTefGuG5zt6f+3h8ZLzersLyY9ella cUKw== X-Gm-Message-State: AOAM532fNTAkchKr+tXuiAzarX8vfDX/UWokQDHdpuplVWwhMOezQz5z 92dMQMnx+H8IY9bvFFnPGvPmV1DRAz4= X-Google-Smtp-Source: ABdhPJy3glMkK9W/PAxRI8gGi5IapTHMDsOIhIIaou07CiFi6H6ib0unmvM/k4dP33swU+zixbfwt7mVghs= X-Received: from yuzhao.bld.corp.google.com ([2620:15c:183:200:9ea2:c755:ae22:6862]) (user=yuzhao job=sendgmr) by 2002:a05:6638:d88:b0:322:e0cf:cf8e with SMTP id l8-20020a0566380d8800b00322e0cfcf8emr6265712jaj.171.1649301370401; Wed, 06 Apr 2022 20:16:10 -0700 (PDT) Date: Wed, 6 Apr 2022 21:15:21 -0600 In-Reply-To: <20220407031525.2368067-1-yuzhao@google.com> Message-Id: <20220407031525.2368067-10-yuzhao@google.com> Mime-Version: 1.0 References: <20220407031525.2368067-1-yuzhao@google.com> X-Mailer: git-send-email 2.35.1.1094.g7c7d902a7c-goog Subject: [PATCH v10 09/14] mm: multi-gen LRU: optimize multiple memcgs From: Yu Zhao To: Stephen Rothwell , linux-mm@kvack.org Cc: Andi Kleen , Andrew Morton , Aneesh Kumar , Barry Song <21cnbao@gmail.com>, 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, 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): +[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 9e2810a230a4..0663f1a3f72a 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 @@ -4309,6 +4316,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); @@ -4714,7 +4737,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; @@ -4780,6 +4804,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 @@ -4808,8 +4835,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()) @@ -4831,6 +4860,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(); @@ -4856,13 +4887,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.1094.g7c7d902a7c-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 95EA4C433EF for ; Thu, 7 Apr 2022 03:34:12 +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=45QTPs2H3ydtbC+P0ZsbAR9r0HH75vM6B/jgejLqQJk=; b=J8gtFfRmKwKT3TLAk/8HsiwVzw RdyvxkZ2P94SobrGEmVNVn9o47B5jcgOUJPn0E6r6ituZgT+aiCya7vE3Kqbpl0suPPVdH7qSMYf+ WsCyfk5TYKyPEn9saRc5ACgL9XKOibc5sqwezi9xgB7/y2+exxodIwUIP4FMCTc0CDIA2q91f4uFA tJ4Q/b93zTbY9Hr0yEnkbwJhO73HZYXPZMPzYMbwe7SZt8y8Z6KBxAaL9OrUCAMrtQD5yU29y7AQv wJQb3vTGqb+RdNXWbmvfR3Klb4VWMuSn9v9uuFYdj7/jK+5/yoblBTFPyXucFx6goaM39wl54XrDf BzUatU4A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ncIsr-0097XX-SS; Thu, 07 Apr 2022 03:32:34 +0000 Received: from mail-io1-xd4a.google.com ([2607:f8b0:4864:20::d4a]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ncId2-0091e6-Vi for linux-arm-kernel@lists.infradead.org; Thu, 07 Apr 2022 03:16:24 +0000 Received: by mail-io1-xd4a.google.com with SMTP id g16-20020a05660203d000b005f7b3b0642eso2843569iov.16 for ; Wed, 06 Apr 2022 20:16:11 -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=/BTpyTC3BWITVgtzyo3yWI9ScJ2B23IF80HP+e4RTLs=; b=B+qgdKxMWufdOBeUFvxfs40yxRQ7wr/nUoKevP6v/dym/GHDI4umWm7dakxK+KMyIG pKTbn9qM+ALlw0LJ4lXKe+uPjIn7kNg442HN2penNhVKqSwWJlTgxh2R//+4KwhK4KTy jBR9nB940pfXEwDgg+3Ua63sSMFkbj3UMgy3/VYHTw/jYgQ6u70mJLUanJ/RVtfBv/NM t6pqlQjzQ7a/X2eGtAf+2IQbpPwTu3rMFj1QeOYxKx8t2DFExeZSyJy8pVs9Le8/4hQr Am4uio9JdJDvzBecumGJ552H6Pho70P2bDeqOopqV7jw9A5CayyaMPT3Xdu30OuCXenz PeOA== 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=/BTpyTC3BWITVgtzyo3yWI9ScJ2B23IF80HP+e4RTLs=; b=gBBFUGMr3leKMKKEfLQR/XuW/5mignktRWi2xrw2uxvqn0yzBGkgxM8yAnO6NtARPw yf6RClRZwQW2sy6PilfAq6eLxz4J16sDJ28aB7NvMb4J+oV8bv1dzRVAWsebQmiFYCm8 vQyhQ8ZwfXwbLm0j3LHIU5tAQNxiKXtwX8nl0z2BBc/w1vvoLHeH/ko3iwjexV5zmvuv nd2A+TuWhnKgMr1cBP6ezP0sXGq6dlydqHiKotskUKDGjuRJdGiOMP0b/ZdSxPLrsNT1 sfHCruGN47p8bmpwbqetZsGa1RETLZEMfCz6yVawqbDZHeucAyDtLkMBM7dAlAroHz6S rAdw== X-Gm-Message-State: AOAM533qtTKCq91u9M0BShZ+UgU6RIhOB4IAp5DLm2fuMr2AHTPI1zOA hfL9NM4RuNdQJZDGDFpBhlA8PBnUj4g= X-Google-Smtp-Source: ABdhPJy3glMkK9W/PAxRI8gGi5IapTHMDsOIhIIaou07CiFi6H6ib0unmvM/k4dP33swU+zixbfwt7mVghs= X-Received: from yuzhao.bld.corp.google.com ([2620:15c:183:200:9ea2:c755:ae22:6862]) (user=yuzhao job=sendgmr) by 2002:a05:6638:d88:b0:322:e0cf:cf8e with SMTP id l8-20020a0566380d8800b00322e0cfcf8emr6265712jaj.171.1649301370401; Wed, 06 Apr 2022 20:16:10 -0700 (PDT) Date: Wed, 6 Apr 2022 21:15:21 -0600 In-Reply-To: <20220407031525.2368067-1-yuzhao@google.com> Message-Id: <20220407031525.2368067-10-yuzhao@google.com> Mime-Version: 1.0 References: <20220407031525.2368067-1-yuzhao@google.com> X-Mailer: git-send-email 2.35.1.1094.g7c7d902a7c-goog Subject: [PATCH v10 09/14] mm: multi-gen LRU: optimize multiple memcgs From: Yu Zhao To: Stephen Rothwell , linux-mm@kvack.org Cc: Andi Kleen , Andrew Morton , Aneesh Kumar , Barry Song <21cnbao@gmail.com>, 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, 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-20220406_201613_096264_8E3BC058 X-CRM114-Status: GOOD ( 19.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 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 aWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA5ZTI4MTBhMjMwYTQu LjA2NjNmMWEzZjcyYSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMK QEAgLTEyOCw2ICsxMjgsMTMgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiAJLyogQWx3YXlzIGRp c2NhcmQgaW5zdGVhZCBvZiBkZW1vdGluZyB0byBsb3dlciB0aWVyIG1lbW9yeSAqLwogCXVuc2ln bmVkIGludCBub19kZW1vdGlvbjoxOwogCisjaWZkZWYgQ09ORklHX0xSVV9HRU4KKwkvKiBoZWxw IG1ha2UgYmV0dGVyIGNob2ljZXMgd2hlbiBtdWx0aXBsZSBtZW1jZ3MgYXJlIGF2YWlsYWJsZSAq LworCXVuc2lnbmVkIGludCBtZW1jZ3NfbmVlZF9hZ2luZzoxOworCXVuc2lnbmVkIGludCBtZW1j Z3NfbmVlZF9zd2FwcGluZzoxOworCXVuc2lnbmVkIGludCBtZW1jZ3NfYXZvaWRfc3dhcHBpbmc6 MTsKKyNlbmRpZgorCiAJLyogQWxsb2NhdGlvbiBvcmRlciAqLwogCXM4IG9yZGVyOwogCkBAIC00 MzA5LDYgKzQzMTYsMjIgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGds aXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAogCVZNX0JVR19PTigh Y3VycmVudF9pc19rc3dhcGQoKSk7CiAKKwkvKgorCSAqIFRvIHJlZHVjZSB0aGUgY2hhbmNlIG9m IGdvaW5nIGludG8gdGhlIGFnaW5nIHBhdGggb3Igc3dhcHBpbmcsIHdoaWNoCisJICogY2FuIGJl IGNvc3RseSwgb3B0aW1pc3RpY2FsbHkgc2tpcCB0aGVtIHVubGVzcyB0aGVpciBjb3JyZXNwb25k aW5nCisJICogZmxhZ3Mgd2VyZSBjbGVhcmVkIGluIHRoZSBldmljdGlvbiBwYXRoLiBUaGlzIGlt cHJvdmVzIHRoZSBvdmVyYWxsCisJICogcGVyZm9ybWFuY2Ugd2hlbiBtdWx0aXBsZSBtZW1jZ3Mg YXJlIGF2YWlsYWJsZS4KKwkgKi8KKwlpZiAoIXNjLT5tZW1jZ3NfbmVlZF9hZ2luZykgeworCQlz Yy0+bWVtY2dzX25lZWRfYWdpbmcgPSB0cnVlOworCQlzYy0+bWVtY2dzX2F2b2lkX3N3YXBwaW5n ID0gIXNjLT5tZW1jZ3NfbmVlZF9zd2FwcGluZzsKKwkJc2MtPm1lbWNnc19uZWVkX3N3YXBwaW5n ID0gdHJ1ZTsKKwkJcmV0dXJuOworCX0KKworCXNjLT5tZW1jZ3NfbmVlZF9zd2FwcGluZyA9IHRy dWU7CisJc2MtPm1lbWNnc19hdm9pZF9zd2FwcGluZyA9IHRydWU7CisKIAljdXJyZW50LT5yZWNs YWltX3N0YXRlLT5tbV93YWxrID0gJnBnZGF0LT5tbV93YWxrOwogCiAJbWVtY2cgPSBtZW1fY2dy b3VwX2l0ZXIoTlVMTCwgTlVMTCwgTlVMTCk7CkBAIC00NzE0LDcgKzQ3MzcsOCBAQCBzdGF0aWMg aW50IGlzb2xhdGVfZm9saW9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29u dHJvbCAqc2MsIGludCBzdwogCXJldHVybiBzY2FubmVkOwogfQogCi1zdGF0aWMgaW50IGV2aWN0 X2ZvbGlvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBp bnQgc3dhcHBpbmVzcykKK3N0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHN0cnVjdCBscnV2ZWMgKmxy dXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLAorCQkJYm9vbCAq c3dhcHBlZCkKIHsKIAlpbnQgdHlwZTsKIAlpbnQgc2Nhbm5lZDsKQEAgLTQ3ODAsNiArNDgwNCw5 IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0 IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwCiAKIAlzYy0+bnJfcmVjbGFpbWVkICs9IHJlY2xh aW1lZDsKIAorCWlmICh0eXBlID09IExSVV9HRU5fQU5PTiAmJiBzd2FwcGVkKQorCQkqc3dhcHBl ZCA9IHRydWU7CisKIAlyZXR1cm4gc2Nhbm5lZDsKIH0KIApAQCAtNDgwOCw4ICs0ODM1LDEwIEBA IHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0 IHNjYW5fY29udHJvbCAqc2MsIGJvb2wKIAlpZiAoIW5yX3RvX3NjYW4pCiAJCXJldHVybiAwOwog Ci0JaWYgKCFuZWVkX2FnaW5nKQorCWlmICghbmVlZF9hZ2luZykgeworCQlzYy0+bWVtY2dzX25l ZWRfYWdpbmcgPSBmYWxzZTsKIAkJcmV0dXJuIG5yX3RvX3NjYW47CisJfQogCiAJLyogbGVhdmUg dGhlIHdvcmsgdG8gbHJ1X2dlbl9hZ2Vfbm9kZSgpICovCiAJaWYgKGN1cnJlbnRfaXNfa3N3YXBk KCkpCkBAIC00ODMxLDYgKzQ4NjAsOCBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2 ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYwogewogCXN0 cnVjdCBibGtfcGx1ZyBwbHVnOwogCWxvbmcgc2Nhbm5lZCA9IDA7CisJYm9vbCBzd2FwcGVkID0g ZmFsc2U7CisJdW5zaWduZWQgbG9uZyByZWNsYWltZWQgPSBzYy0+bnJfcmVjbGFpbWVkOwogCXN0 cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTsKIAogCWxydV9h ZGRfZHJhaW4oKTsKQEAgLTQ4NTYsMTMgKzQ4ODcsMTkgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9z aHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAq c2MKIAkJaWYgKCFucl90b19zY2FuKQogCQkJYnJlYWs7CiAKLQkJZGVsdGEgPSBldmljdF9mb2xp b3MobHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7CisJCWRlbHRhID0gZXZpY3RfZm9saW9zKGxydXZl Yywgc2MsIHN3YXBwaW5lc3MsICZzd2FwcGVkKTsKIAkJaWYgKCFkZWx0YSkKIAkJCWJyZWFrOwog CisJCWlmIChzYy0+bWVtY2dzX2F2b2lkX3N3YXBwaW5nICYmIHN3YXBwaW5lc3MgPCAyMDAgJiYg c3dhcHBlZCkKKwkJCWJyZWFrOworCiAJCXNjYW5uZWQgKz0gZGVsdGE7Ci0JCWlmIChzY2FubmVk ID49IG5yX3RvX3NjYW4pCisJCWlmIChzY2FubmVkID49IG5yX3RvX3NjYW4pIHsKKwkJCWlmICgh c3dhcHBlZCAmJiBzYy0+bnJfcmVjbGFpbWVkIC0gcmVjbGFpbWVkID49IE1JTl9MUlVfQkFUQ0gp CisJCQkJc2MtPm1lbWNnc19uZWVkX3N3YXBwaW5nID0gZmFsc2U7CiAJCQlicmVhazsKKwkJfQog CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KLS0gCjIuMzUuMS4xMDk0Lmc3YzdkOTAyYTdjLWdvb2cK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1h cm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0t a2VybmVsCg==