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 X-Spam-Level: X-Spam-Status: No, score=-9.9 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 234D5C04E30 for ; Mon, 9 Dec 2019 19:43:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D510B2073D for ; Mon, 9 Dec 2019 19:43:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amazon.com header.i=@amazon.com header.b="EHbSl6BO" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726787AbfLITns (ORCPT ); Mon, 9 Dec 2019 14:43:48 -0500 Received: from smtp-fw-2101.amazon.com ([72.21.196.25]:7718 "EHLO smtp-fw-2101.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726509AbfLITns (ORCPT ); Mon, 9 Dec 2019 14:43:48 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1575920627; x=1607456627; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=mFjg3O0wfH0ZG+pcKsCZbVXZVnhM0nmqdVzE5AyatYA=; b=EHbSl6BOX9hCfF4rXzziG3dArCpJWazDPil3g0U8rk7FoXHgPGsq33bv IqO03WTcDRrdXiGYa8smFbXd9IFKzGwQe3Qj1n67P6JoIbvCbhlX6QPL7 6T6tGipDhJjtUueRXuO0v+LT11Sc59cT7S7uABIdu/dtyVfzSJ+DbSgIH I=; IronPort-SDR: RchwsZR167DBXMCJHQBM4rQG+QF9IhOzAxobDuWOM/UovEl2WC77jy6Jv4DD0kKeCH7IZX8OWU s9pW/5Y9JCYQ== X-IronPort-AV: E=Sophos;i="5.69,296,1571702400"; d="scan'208";a="7798331" Received: from iad6-co-svc-p1-lb1-vlan2.amazon.com (HELO email-inbound-relay-2c-397e131e.us-west-2.amazon.com) ([10.124.125.2]) by smtp-border-fw-out-2101.iad2.amazon.com with ESMTP; 09 Dec 2019 19:43:46 +0000 Received: from EX13MTAUEA001.ant.amazon.com (pdx4-ws-svc-p6-lb7-vlan3.pdx.amazon.com [10.170.41.166]) by email-inbound-relay-2c-397e131e.us-west-2.amazon.com (Postfix) with ESMTPS id 5A423A23B7; Mon, 9 Dec 2019 19:43:45 +0000 (UTC) Received: from EX13D31EUA001.ant.amazon.com (10.43.165.15) by EX13MTAUEA001.ant.amazon.com (10.43.61.243) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Mon, 9 Dec 2019 19:43:44 +0000 Received: from u886c93fd17d25d.ant.amazon.com (10.43.161.179) by EX13D31EUA001.ant.amazon.com (10.43.165.15) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Mon, 9 Dec 2019 19:43:38 +0000 From: SeongJae Park To: CC: , , , , , , , , SeongJae Park Subject: [PATCH v4 2/2] xen/blkback: Squeeze page pools if a memory pressure is detected Date: Mon, 9 Dec 2019 20:43:05 +0100 Message-ID: <20191209194305.20828-3-sjpark@amazon.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191209194305.20828-1-sjpark@amazon.com> References: <20191209194305.20828-1-sjpark@amazon.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.43.161.179] X-ClientProxiedBy: EX13D30UWC003.ant.amazon.com (10.43.162.122) To EX13D31EUA001.ant.amazon.com (10.43.165.15) Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org From: SeongJae Park Each `blkif` has a free pages pool for the grant mapping. The size of the pool starts from zero and be increased on demand while processing the I/O requests. If current I/O requests handling is finished or 100 milliseconds has passed since last I/O requests handling, it checks and shrinks the pool to not exceed the size limit, `max_buffer_pages`. Therefore, `blkfront` running guests can cause a memory pressure in the `blkback` running guest by attaching a large number of block devices and inducing I/O. System administrators can avoid such problematic situations by limiting the maximum number of devices each guest can attach. However, finding the optimal limit is not so easy. Improper set of the limit can results in the memory pressure or a resource underutilization. This commit avoids such problematic situations by squeezing the pools (returns every free page in the pool to the system) for a while (users can set this duration via a module parameter) if a memory pressure is detected. Discussions =========== The `blkback`'s original shrinking mechanism returns only pages in the pool, which are not currently be used by `blkback`, to the system. In other words, the pages are not mapped with foreign pages. Because this commit is changing only the shrink limit but uses the mechanism as is, this commit does not introduce improper mappings related security issues. Once a memory pressure is detected, this commit keeps the squeezing limit for a user-specified time duration. The duration should be neither too long nor too short. If it is too long, the squeezing incurring overhead can reduce the I/O performance. If it is too short, `blkback` will not free enough pages to reduce the memory pressure. This commit sets the value as `10 milliseconds` by default because it is a short time in terms of I/O while it is a long time in terms of memory operations. Also, as the original shrinking mechanism works for at least every 100 milliseconds, this could be a somewhat reasonable choice. I also tested other durations (refer to the below section for more details) and confirmed that 10 milliseconds is the one that works best with the test. That said, the proper duration depends on actual configurations and workloads. That's why this commit is allowing users to set it as their optimal value via the module parameter. Memory Pressure Test ==================== To show how this commit fixes the memory pressure situation well, I configured a test environment on a xen-running virtualization system. On the `blkfront` running guest instances, I attach a large number of network-backed volume devices and induce I/O to those. Meanwhile, I measure the number of pages that swapped in and out on the `blkback` running guest. The test ran twice, once for the `blkback` before this commit and once for that after this commit. As shown below, this commit has dramatically reduced the memory pressure: pswpin pswpout before 76,672 185,799 after 212 3,325 Optimal Aggressive Shrinking Duration ------------------------------------- To find a best squeezing duration, I repeated the test with three different durations (1ms, 10ms, and 100ms). The results are as below: duration pswpin pswpout 1 852 6,424 10 212 3,325 100 203 3,340 As expected, the memory pressure has decreased as the duration is increased, but the reduction stopped from the `10ms`. Based on this results, I chose the default duration as 10ms. Performance Overhead Test ========================= This commit could incur I/O performance degradation under severe memory pressure because the squeezing will require more page allocations per I/O. To show the overhead, I artificially made a worst-case squeezing situation and measured the I/O performance of a `blkfront` running guest. For the artificial squeezing, I set the `blkback.max_buffer_pages` using the `/sys/module/xen_blkback/parameters/max_buffer_pages` file. We set the value to `1024` and `0`. The `1024` is the default value. Setting the value as `0` is same to a situation doing the squeezing always (worst-case). For the I/O performance measurement, I use a simple `dd` command. Default Performance ------------------- [dom0]# echo 1024 > /sys/module/xen_blkback/parameters/max_buffer_pages [instance]$ for i in {1..5}; do dd if=/dev/zero of=file bs=4k count=$((256*512)); sync; done 131072+0 records in 131072+0 records out 536870912 bytes (537 MB) copied, 11.7257 s, 45.8 MB/s 131072+0 records in 131072+0 records out 536870912 bytes (537 MB) copied, 13.8827 s, 38.7 MB/s 131072+0 records in 131072+0 records out 536870912 bytes (537 MB) copied, 13.8781 s, 38.7 MB/s 131072+0 records in 131072+0 records out 536870912 bytes (537 MB) copied, 13.8737 s, 38.7 MB/s 131072+0 records in 131072+0 records out 536870912 bytes (537 MB) copied, 13.8702 s, 38.7 MB/s Worst-case Performance ---------------------- [dom0]# echo 0 > /sys/module/xen_blkback/parameters/max_buffer_pages [instance]$ for i in {1..5}; do dd if=/dev/zero of=file bs=4k count=$((256*512)); sync; done 131072+0 records in 131072+0 records out 536870912 bytes (537 MB) copied, 11.7257 s, 45.8 MB/s 131072+0 records in 131072+0 records out 536870912 bytes (537 MB) copied, 13.878 s, 38.7 MB/s 131072+0 records in 131072+0 records out 536870912 bytes (537 MB) copied, 13.8746 s, 38.7 MB/s 131072+0 records in 131072+0 records out 536870912 bytes (537 MB) copied, 13.8786 s, 38.7 MB/s 131072+0 records in 131072+0 records out 536870912 bytes (537 MB) copied, 13.8749 s, 38.7 MB/s In short, even worst case squeezing makes no visible performance degradation. I think this is due to the slow speed of the I/O. In other words, the additional page allocation overhead is hidden under the much slower I/O latency. Nevertheless, pleaset note that this is just a very simple and minimal test. Signed-off-by: SeongJae Park --- drivers/block/xen-blkback/blkback.c | 23 +++++++++++++++++++++-- drivers/block/xen-blkback/common.h | 1 + drivers/block/xen-blkback/xenbus.c | 3 ++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c index fd1e19f1a49f..7e3994c20843 100644 --- a/drivers/block/xen-blkback/blkback.c +++ b/drivers/block/xen-blkback/blkback.c @@ -142,6 +142,22 @@ static inline bool persistent_gnt_timeout(struct persistent_gnt *persistent_gnt) HZ * xen_blkif_pgrant_timeout); } +/* Once a memory pressure is detected, squeeze free page pools for a while. */ +static int xen_blkif_buffer_squeeze_duration_ms = 10; +module_param_named(buffer_squeeze_duration_ms, + xen_blkif_buffer_squeeze_duration_ms, int, 0644); +MODULE_PARM_DESC(buffer_squeeze_duration_ms, +"Duration in ms to squeeze pages buffer when a memory pressure is detected"); + +static unsigned long xen_blk_buffer_squeeze_end; + +unsigned xen_blkbk_reclaim(struct xenbus_device *dev, domid_t domid) +{ + xen_blk_buffer_squeeze_end = jiffies + + msecs_to_jiffies(xen_blkif_buffer_squeeze_duration_ms); + return 0; +} + static inline int get_free_page(struct xen_blkif_ring *ring, struct page **page) { unsigned long flags; @@ -656,8 +672,11 @@ int xen_blkif_schedule(void *arg) ring->next_lru = jiffies + msecs_to_jiffies(LRU_INTERVAL); } - /* Shrink if we have more than xen_blkif_max_buffer_pages */ - shrink_free_pagepool(ring, xen_blkif_max_buffer_pages); + /* Shrink the free pages pool if it is too large. */ + if (time_before(jiffies, xen_blk_buffer_squeeze_end)) + shrink_free_pagepool(ring, 0); + else + shrink_free_pagepool(ring, xen_blkif_max_buffer_pages); if (log_stats && time_after(jiffies, ring->st_print)) print_stats(ring); diff --git a/drivers/block/xen-blkback/common.h b/drivers/block/xen-blkback/common.h index 1d3002d773f7..de5c6a301f44 100644 --- a/drivers/block/xen-blkback/common.h +++ b/drivers/block/xen-blkback/common.h @@ -383,6 +383,7 @@ irqreturn_t xen_blkif_be_int(int irq, void *dev_id); int xen_blkif_schedule(void *arg); int xen_blkif_purge_persistent(void *arg); void xen_blkbk_free_caches(struct xen_blkif_ring *ring); +unsigned xen_blkbk_reclaim(struct xenbus_device *dev, domid_t domid); int xen_blkbk_flush_diskcache(struct xenbus_transaction xbt, struct backend_info *be, int state); diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c index b90dbcd99c03..de49a09e6933 100644 --- a/drivers/block/xen-blkback/xenbus.c +++ b/drivers/block/xen-blkback/xenbus.c @@ -1115,7 +1115,8 @@ static struct xenbus_driver xen_blkbk_driver = { .ids = xen_blkbk_ids, .probe = xen_blkbk_probe, .remove = xen_blkbk_remove, - .otherend_changed = frontend_changed + .otherend_changed = frontend_changed, + .reclaim = xen_blkbk_reclaim }; int xen_blkif_xenbus_init(void) -- 2.17.1 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 X-Spam-Level: X-Spam-Status: No, score=-8.4 required=3.0 tests=DKIM_ADSP_ALL,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DA7ECC00454 for ; Mon, 9 Dec 2019 19:43:59 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9AAF32073D for ; Mon, 9 Dec 2019 19:43:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=amazon.com header.i=@amazon.com header.b="EHbSl6BO" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9AAF32073D Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=amazon.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ieOwf-00048s-2V; Mon, 09 Dec 2019 19:43:49 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ieOwe-00048f-6l for xen-devel@lists.xenproject.org; Mon, 09 Dec 2019 19:43:48 +0000 X-Inumbo-ID: 3727cae6-1abc-11ea-b6f1-bc764e2007e4 Received: from smtp-fw-2101.amazon.com (unknown [72.21.196.25]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 3727cae6-1abc-11ea-b6f1-bc764e2007e4; Mon, 09 Dec 2019 19:43:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1575920627; x=1607456627; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=mFjg3O0wfH0ZG+pcKsCZbVXZVnhM0nmqdVzE5AyatYA=; b=EHbSl6BOX9hCfF4rXzziG3dArCpJWazDPil3g0U8rk7FoXHgPGsq33bv IqO03WTcDRrdXiGYa8smFbXd9IFKzGwQe3Qj1n67P6JoIbvCbhlX6QPL7 6T6tGipDhJjtUueRXuO0v+LT11Sc59cT7S7uABIdu/dtyVfzSJ+DbSgIH I=; IronPort-SDR: RchwsZR167DBXMCJHQBM4rQG+QF9IhOzAxobDuWOM/UovEl2WC77jy6Jv4DD0kKeCH7IZX8OWU s9pW/5Y9JCYQ== X-IronPort-AV: E=Sophos;i="5.69,296,1571702400"; d="scan'208";a="7798331" Received: from iad6-co-svc-p1-lb1-vlan2.amazon.com (HELO email-inbound-relay-2c-397e131e.us-west-2.amazon.com) ([10.124.125.2]) by smtp-border-fw-out-2101.iad2.amazon.com with ESMTP; 09 Dec 2019 19:43:46 +0000 Received: from EX13MTAUEA001.ant.amazon.com (pdx4-ws-svc-p6-lb7-vlan3.pdx.amazon.com [10.170.41.166]) by email-inbound-relay-2c-397e131e.us-west-2.amazon.com (Postfix) with ESMTPS id 5A423A23B7; Mon, 9 Dec 2019 19:43:45 +0000 (UTC) Received: from EX13D31EUA001.ant.amazon.com (10.43.165.15) by EX13MTAUEA001.ant.amazon.com (10.43.61.243) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Mon, 9 Dec 2019 19:43:44 +0000 Received: from u886c93fd17d25d.ant.amazon.com (10.43.161.179) by EX13D31EUA001.ant.amazon.com (10.43.165.15) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Mon, 9 Dec 2019 19:43:38 +0000 From: SeongJae Park To: Date: Mon, 9 Dec 2019 20:43:05 +0100 Message-ID: <20191209194305.20828-3-sjpark@amazon.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191209194305.20828-1-sjpark@amazon.com> References: <20191209194305.20828-1-sjpark@amazon.com> MIME-Version: 1.0 X-Originating-IP: [10.43.161.179] X-ClientProxiedBy: EX13D30UWC003.ant.amazon.com (10.43.162.122) To EX13D31EUA001.ant.amazon.com (10.43.165.15) Precedence: Bulk Subject: [Xen-devel] [PATCH v4 2/2] xen/blkback: Squeeze page pools if a memory pressure is detected X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: axboe@kernel.dk, sj38.park@gmail.com, konrad.wilk@oracle.com, pdurrant@amazon.com, SeongJae Park , linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, xen-devel@lists.xenproject.org, roger.pau@citrix.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" RnJvbTogU2VvbmdKYWUgUGFyayA8c2pwYXJrQGFtYXpvbi5kZT4KCkVhY2ggYGJsa2lmYCBoYXMg YSBmcmVlIHBhZ2VzIHBvb2wgZm9yIHRoZSBncmFudCBtYXBwaW5nLiAgVGhlIHNpemUgb2YKdGhl IHBvb2wgc3RhcnRzIGZyb20gemVybyBhbmQgYmUgaW5jcmVhc2VkIG9uIGRlbWFuZCB3aGlsZSBw cm9jZXNzaW5nCnRoZSBJL08gcmVxdWVzdHMuICBJZiBjdXJyZW50IEkvTyByZXF1ZXN0cyBoYW5k bGluZyBpcyBmaW5pc2hlZCBvciAxMDAKbWlsbGlzZWNvbmRzIGhhcyBwYXNzZWQgc2luY2UgbGFz dCBJL08gcmVxdWVzdHMgaGFuZGxpbmcsIGl0IGNoZWNrcyBhbmQKc2hyaW5rcyB0aGUgcG9vbCB0 byBub3QgZXhjZWVkIHRoZSBzaXplIGxpbWl0LCBgbWF4X2J1ZmZlcl9wYWdlc2AuCgpUaGVyZWZv cmUsIGBibGtmcm9udGAgcnVubmluZyBndWVzdHMgY2FuIGNhdXNlIGEgbWVtb3J5IHByZXNzdXJl IGluIHRoZQpgYmxrYmFja2AgcnVubmluZyBndWVzdCBieSBhdHRhY2hpbmcgYSBsYXJnZSBudW1i ZXIgb2YgYmxvY2sgZGV2aWNlcyBhbmQKaW5kdWNpbmcgSS9PLiAgU3lzdGVtIGFkbWluaXN0cmF0 b3JzIGNhbiBhdm9pZCBzdWNoIHByb2JsZW1hdGljCnNpdHVhdGlvbnMgYnkgbGltaXRpbmcgdGhl IG1heGltdW0gbnVtYmVyIG9mIGRldmljZXMgZWFjaCBndWVzdCBjYW4KYXR0YWNoLiAgSG93ZXZl ciwgZmluZGluZyB0aGUgb3B0aW1hbCBsaW1pdCBpcyBub3Qgc28gZWFzeS4gIEltcHJvcGVyCnNl dCBvZiB0aGUgbGltaXQgY2FuIHJlc3VsdHMgaW4gdGhlIG1lbW9yeSBwcmVzc3VyZSBvciBhIHJl c291cmNlCnVuZGVydXRpbGl6YXRpb24uICBUaGlzIGNvbW1pdCBhdm9pZHMgc3VjaCBwcm9ibGVt YXRpYyBzaXR1YXRpb25zIGJ5CnNxdWVlemluZyB0aGUgcG9vbHMgKHJldHVybnMgZXZlcnkgZnJl ZSBwYWdlIGluIHRoZSBwb29sIHRvIHRoZSBzeXN0ZW0pCmZvciBhIHdoaWxlICh1c2VycyBjYW4g c2V0IHRoaXMgZHVyYXRpb24gdmlhIGEgbW9kdWxlIHBhcmFtZXRlcikgaWYgYQptZW1vcnkgcHJl c3N1cmUgaXMgZGV0ZWN0ZWQuCgpEaXNjdXNzaW9ucwo9PT09PT09PT09PQoKVGhlIGBibGtiYWNr YCdzIG9yaWdpbmFsIHNocmlua2luZyBtZWNoYW5pc20gcmV0dXJucyBvbmx5IHBhZ2VzIGluIHRo ZQpwb29sLCB3aGljaCBhcmUgbm90IGN1cnJlbnRseSBiZSB1c2VkIGJ5IGBibGtiYWNrYCwgdG8g dGhlIHN5c3RlbS4gIEluCm90aGVyIHdvcmRzLCB0aGUgcGFnZXMgYXJlIG5vdCBtYXBwZWQgd2l0 aCBmb3JlaWduIHBhZ2VzLiAgQmVjYXVzZSB0aGlzCmNvbW1pdCBpcyBjaGFuZ2luZyBvbmx5IHRo ZSBzaHJpbmsgbGltaXQgYnV0IHVzZXMgdGhlIG1lY2hhbmlzbSBhcyBpcywKdGhpcyBjb21taXQg ZG9lcyBub3QgaW50cm9kdWNlIGltcHJvcGVyIG1hcHBpbmdzIHJlbGF0ZWQgc2VjdXJpdHkKaXNz dWVzLgoKT25jZSBhIG1lbW9yeSBwcmVzc3VyZSBpcyBkZXRlY3RlZCwgdGhpcyBjb21taXQga2Vl cHMgdGhlIHNxdWVlemluZwpsaW1pdCBmb3IgYSB1c2VyLXNwZWNpZmllZCB0aW1lIGR1cmF0aW9u LiAgVGhlIGR1cmF0aW9uIHNob3VsZCBiZQpuZWl0aGVyIHRvbyBsb25nIG5vciB0b28gc2hvcnQu ICBJZiBpdCBpcyB0b28gbG9uZywgdGhlIHNxdWVlemluZwppbmN1cnJpbmcgb3ZlcmhlYWQgY2Fu IHJlZHVjZSB0aGUgSS9PIHBlcmZvcm1hbmNlLiAgSWYgaXQgaXMgdG9vIHNob3J0LApgYmxrYmFj a2Agd2lsbCBub3QgZnJlZSBlbm91Z2ggcGFnZXMgdG8gcmVkdWNlIHRoZSBtZW1vcnkgcHJlc3N1 cmUuClRoaXMgY29tbWl0IHNldHMgdGhlIHZhbHVlIGFzIGAxMCBtaWxsaXNlY29uZHNgIGJ5IGRl ZmF1bHQgYmVjYXVzZSBpdCBpcwphIHNob3J0IHRpbWUgaW4gdGVybXMgb2YgSS9PIHdoaWxlIGl0 IGlzIGEgbG9uZyB0aW1lIGluIHRlcm1zIG9mIG1lbW9yeQpvcGVyYXRpb25zLiAgQWxzbywgYXMg dGhlIG9yaWdpbmFsIHNocmlua2luZyBtZWNoYW5pc20gd29ya3MgZm9yIGF0CmxlYXN0IGV2ZXJ5 IDEwMCBtaWxsaXNlY29uZHMsIHRoaXMgY291bGQgYmUgYSBzb21ld2hhdCByZWFzb25hYmxlCmNo b2ljZS4gIEkgYWxzbyB0ZXN0ZWQgb3RoZXIgZHVyYXRpb25zIChyZWZlciB0byB0aGUgYmVsb3cg c2VjdGlvbiBmb3IKbW9yZSBkZXRhaWxzKSBhbmQgY29uZmlybWVkIHRoYXQgMTAgbWlsbGlzZWNv bmRzIGlzIHRoZSBvbmUgdGhhdCB3b3JrcwpiZXN0IHdpdGggdGhlIHRlc3QuICBUaGF0IHNhaWQs IHRoZSBwcm9wZXIgZHVyYXRpb24gZGVwZW5kcyBvbiBhY3R1YWwKY29uZmlndXJhdGlvbnMgYW5k IHdvcmtsb2Fkcy4gIFRoYXQncyB3aHkgdGhpcyBjb21taXQgaXMgYWxsb3dpbmcgdXNlcnMKdG8g c2V0IGl0IGFzIHRoZWlyIG9wdGltYWwgdmFsdWUgdmlhIHRoZSBtb2R1bGUgcGFyYW1ldGVyLgoK TWVtb3J5IFByZXNzdXJlIFRlc3QKPT09PT09PT09PT09PT09PT09PT0KClRvIHNob3cgaG93IHRo aXMgY29tbWl0IGZpeGVzIHRoZSBtZW1vcnkgcHJlc3N1cmUgc2l0dWF0aW9uIHdlbGwsIEkKY29u ZmlndXJlZCBhIHRlc3QgZW52aXJvbm1lbnQgb24gYSB4ZW4tcnVubmluZyB2aXJ0dWFsaXphdGlv biBzeXN0ZW0uCk9uIHRoZSBgYmxrZnJvbnRgIHJ1bm5pbmcgZ3Vlc3QgaW5zdGFuY2VzLCBJIGF0 dGFjaCBhIGxhcmdlIG51bWJlciBvZgpuZXR3b3JrLWJhY2tlZCB2b2x1bWUgZGV2aWNlcyBhbmQg aW5kdWNlIEkvTyB0byB0aG9zZS4gIE1lYW53aGlsZSwgSQptZWFzdXJlIHRoZSBudW1iZXIgb2Yg cGFnZXMgdGhhdCBzd2FwcGVkIGluIGFuZCBvdXQgb24gdGhlIGBibGtiYWNrYApydW5uaW5nIGd1 ZXN0LiAgVGhlIHRlc3QgcmFuIHR3aWNlLCBvbmNlIGZvciB0aGUgYGJsa2JhY2tgIGJlZm9yZSB0 aGlzCmNvbW1pdCBhbmQgb25jZSBmb3IgdGhhdCBhZnRlciB0aGlzIGNvbW1pdC4gIEFzIHNob3du IGJlbG93LCB0aGlzIGNvbW1pdApoYXMgZHJhbWF0aWNhbGx5IHJlZHVjZWQgdGhlIG1lbW9yeSBw cmVzc3VyZToKCiAgICAgICAgICAgICAgICBwc3dwaW4gIHBzd3BvdXQKICAgIGJlZm9yZSAgICAg IDc2LDY3MiAgMTg1LDc5OQogICAgYWZ0ZXIgICAgICAgICAgMjEyICAgIDMsMzI1CgpPcHRpbWFs IEFnZ3Jlc3NpdmUgU2hyaW5raW5nIER1cmF0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KClRvIGZpbmQgYSBiZXN0IHNxdWVlemluZyBkdXJhdGlvbiwgSSByZXBlYXRl ZCB0aGUgdGVzdCB3aXRoIHRocmVlCmRpZmZlcmVudCBkdXJhdGlvbnMgKDFtcywgMTBtcywgYW5k IDEwMG1zKS4gIFRoZSByZXN1bHRzIGFyZSBhcyBiZWxvdzoKCiAgICBkdXJhdGlvbiAgICBwc3dw aW4gIHBzd3BvdXQKICAgIDEgICAgICAgICAgIDg1MiAgICAgNiw0MjQKICAgIDEwICAgICAgICAg IDIxMiAgICAgMywzMjUKICAgIDEwMCAgICAgICAgIDIwMyAgICAgMywzNDAKCkFzIGV4cGVjdGVk LCB0aGUgbWVtb3J5IHByZXNzdXJlIGhhcyBkZWNyZWFzZWQgYXMgdGhlIGR1cmF0aW9uIGlzCmlu Y3JlYXNlZCwgYnV0IHRoZSByZWR1Y3Rpb24gc3RvcHBlZCBmcm9tIHRoZSBgMTBtc2AuICBCYXNl ZCBvbiB0aGlzCnJlc3VsdHMsIEkgY2hvc2UgdGhlIGRlZmF1bHQgZHVyYXRpb24gYXMgMTBtcy4K ClBlcmZvcm1hbmNlIE92ZXJoZWFkIFRlc3QKPT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhp cyBjb21taXQgY291bGQgaW5jdXIgSS9PIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIHVuZGVyIHNl dmVyZSBtZW1vcnkKcHJlc3N1cmUgYmVjYXVzZSB0aGUgc3F1ZWV6aW5nIHdpbGwgcmVxdWlyZSBt b3JlIHBhZ2UgYWxsb2NhdGlvbnMgcGVyCkkvTy4gIFRvIHNob3cgdGhlIG92ZXJoZWFkLCBJIGFy dGlmaWNpYWxseSBtYWRlIGEgd29yc3QtY2FzZSBzcXVlZXppbmcKc2l0dWF0aW9uIGFuZCBtZWFz dXJlZCB0aGUgSS9PIHBlcmZvcm1hbmNlIG9mIGEgYGJsa2Zyb250YCBydW5uaW5nCmd1ZXN0LgoK Rm9yIHRoZSBhcnRpZmljaWFsIHNxdWVlemluZywgSSBzZXQgdGhlIGBibGtiYWNrLm1heF9idWZm ZXJfcGFnZXNgIHVzaW5nCnRoZSBgL3N5cy9tb2R1bGUveGVuX2Jsa2JhY2svcGFyYW1ldGVycy9t YXhfYnVmZmVyX3BhZ2VzYCBmaWxlLiAgV2Ugc2V0CnRoZSB2YWx1ZSB0byBgMTAyNGAgYW5kIGAw YC4gIFRoZSBgMTAyNGAgaXMgdGhlIGRlZmF1bHQgdmFsdWUuICBTZXR0aW5nCnRoZSB2YWx1ZSBh cyBgMGAgaXMgc2FtZSB0byBhIHNpdHVhdGlvbiBkb2luZyB0aGUgc3F1ZWV6aW5nIGFsd2F5cwoo d29yc3QtY2FzZSkuCgpGb3IgdGhlIEkvTyBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudCwgSSB1c2Ug YSBzaW1wbGUgYGRkYCBjb21tYW5kLgoKRGVmYXVsdCBQZXJmb3JtYW5jZQotLS0tLS0tLS0tLS0t LS0tLS0tCgogICAgW2RvbTBdIyBlY2hvIDEwMjQgPiAvc3lzL21vZHVsZS94ZW5fYmxrYmFjay9w YXJhbWV0ZXJzL21heF9idWZmZXJfcGFnZXMKICAgIFtpbnN0YW5jZV0kIGZvciBpIGluIHsxLi41 fTsgZG8gZGQgaWY9L2Rldi96ZXJvIG9mPWZpbGUgYnM9NGsgY291bnQ9JCgoMjU2KjUxMikpOyBz eW5jOyBkb25lCiAgICAxMzEwNzIrMCByZWNvcmRzIGluCiAgICAxMzEwNzIrMCByZWNvcmRzIG91 dAogICAgNTM2ODcwOTEyIGJ5dGVzICg1MzcgTUIpIGNvcGllZCwgMTEuNzI1NyBzLCA0NS44IE1C L3MKICAgIDEzMTA3MiswIHJlY29yZHMgaW4KICAgIDEzMTA3MiswIHJlY29yZHMgb3V0CiAgICA1 MzY4NzA5MTIgYnl0ZXMgKDUzNyBNQikgY29waWVkLCAxMy44ODI3IHMsIDM4LjcgTUIvcwogICAg MTMxMDcyKzAgcmVjb3JkcyBpbgogICAgMTMxMDcyKzAgcmVjb3JkcyBvdXQKICAgIDUzNjg3MDkx MiBieXRlcyAoNTM3IE1CKSBjb3BpZWQsIDEzLjg3ODEgcywgMzguNyBNQi9zCiAgICAxMzEwNzIr MCByZWNvcmRzIGluCiAgICAxMzEwNzIrMCByZWNvcmRzIG91dAogICAgNTM2ODcwOTEyIGJ5dGVz ICg1MzcgTUIpIGNvcGllZCwgMTMuODczNyBzLCAzOC43IE1CL3MKICAgIDEzMTA3MiswIHJlY29y ZHMgaW4KICAgIDEzMTA3MiswIHJlY29yZHMgb3V0CiAgICA1MzY4NzA5MTIgYnl0ZXMgKDUzNyBN QikgY29waWVkLCAxMy44NzAyIHMsIDM4LjcgTUIvcwoKV29yc3QtY2FzZSBQZXJmb3JtYW5jZQot LS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgW2RvbTBdIyBlY2hvIDAgPiAvc3lzL21vZHVsZS94 ZW5fYmxrYmFjay9wYXJhbWV0ZXJzL21heF9idWZmZXJfcGFnZXMKICAgIFtpbnN0YW5jZV0kIGZv ciBpIGluIHsxLi41fTsgZG8gZGQgaWY9L2Rldi96ZXJvIG9mPWZpbGUgYnM9NGsgY291bnQ9JCgo MjU2KjUxMikpOyBzeW5jOyBkb25lCiAgICAxMzEwNzIrMCByZWNvcmRzIGluCiAgICAxMzEwNzIr MCByZWNvcmRzIG91dAogICAgNTM2ODcwOTEyIGJ5dGVzICg1MzcgTUIpIGNvcGllZCwgMTEuNzI1 NyBzLCA0NS44IE1CL3MKICAgIDEzMTA3MiswIHJlY29yZHMgaW4KICAgIDEzMTA3MiswIHJlY29y ZHMgb3V0CiAgICA1MzY4NzA5MTIgYnl0ZXMgKDUzNyBNQikgY29waWVkLCAxMy44NzggcywgMzgu NyBNQi9zCiAgICAxMzEwNzIrMCByZWNvcmRzIGluCiAgICAxMzEwNzIrMCByZWNvcmRzIG91dAog ICAgNTM2ODcwOTEyIGJ5dGVzICg1MzcgTUIpIGNvcGllZCwgMTMuODc0NiBzLCAzOC43IE1CL3MK ICAgIDEzMTA3MiswIHJlY29yZHMgaW4KICAgIDEzMTA3MiswIHJlY29yZHMgb3V0CiAgICA1MzY4 NzA5MTIgYnl0ZXMgKDUzNyBNQikgY29waWVkLCAxMy44Nzg2IHMsIDM4LjcgTUIvcwogICAgMTMx MDcyKzAgcmVjb3JkcyBpbgogICAgMTMxMDcyKzAgcmVjb3JkcyBvdXQKICAgIDUzNjg3MDkxMiBi eXRlcyAoNTM3IE1CKSBjb3BpZWQsIDEzLjg3NDkgcywgMzguNyBNQi9zCgpJbiBzaG9ydCwgZXZl biB3b3JzdCBjYXNlIHNxdWVlemluZyBtYWtlcyBubyB2aXNpYmxlIHBlcmZvcm1hbmNlCmRlZ3Jh ZGF0aW9uLiAgSSB0aGluayB0aGlzIGlzIGR1ZSB0byB0aGUgc2xvdyBzcGVlZCBvZiB0aGUgSS9P LiAgSW4Kb3RoZXIgd29yZHMsIHRoZSBhZGRpdGlvbmFsIHBhZ2UgYWxsb2NhdGlvbiBvdmVyaGVh ZCBpcyBoaWRkZW4gdW5kZXIgdGhlCm11Y2ggc2xvd2VyIEkvTyBsYXRlbmN5LgoKTmV2ZXJ0aGVs ZXNzLCBwbGVhc2V0IG5vdGUgdGhhdCB0aGlzIGlzIGp1c3QgYSB2ZXJ5IHNpbXBsZSBhbmQgbWlu aW1hbAp0ZXN0LgoKU2lnbmVkLW9mZi1ieTogU2VvbmdKYWUgUGFyayA8c2pwYXJrQGFtYXpvbi5k ZT4KLS0tCiBkcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL2Jsa2JhY2suYyB8IDIzICsrKysrKysr KysrKysrKysrKysrKy0tCiBkcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL2NvbW1vbi5oICB8ICAx ICsKIGRyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2sveGVuYnVzLmMgIHwgIDMgKystCiAzIGZpbGVz IGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay9ibGtiYWNrLmMgYi9kcml2ZXJzL2Jsb2NrL3hlbi1i bGtiYWNrL2Jsa2JhY2suYwppbmRleCBmZDFlMTlmMWE0OWYuLjdlMzk5NGMyMDg0MyAxMDA2NDQK LS0tIGEvZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay9ibGtiYWNrLmMKKysrIGIvZHJpdmVycy9i bG9jay94ZW4tYmxrYmFjay9ibGtiYWNrLmMKQEAgLTE0Miw2ICsxNDIsMjIgQEAgc3RhdGljIGlu bGluZSBib29sIHBlcnNpc3RlbnRfZ250X3RpbWVvdXQoc3RydWN0IHBlcnNpc3RlbnRfZ250ICpw ZXJzaXN0ZW50X2dudCkKIAkJSFogKiB4ZW5fYmxraWZfcGdyYW50X3RpbWVvdXQpOwogfQogCisv KiBPbmNlIGEgbWVtb3J5IHByZXNzdXJlIGlzIGRldGVjdGVkLCBzcXVlZXplIGZyZWUgcGFnZSBw b29scyBmb3IgYSB3aGlsZS4gKi8KK3N0YXRpYyBpbnQgeGVuX2Jsa2lmX2J1ZmZlcl9zcXVlZXpl X2R1cmF0aW9uX21zID0gMTA7Cittb2R1bGVfcGFyYW1fbmFtZWQoYnVmZmVyX3NxdWVlemVfZHVy YXRpb25fbXMsCisJCXhlbl9ibGtpZl9idWZmZXJfc3F1ZWV6ZV9kdXJhdGlvbl9tcywgaW50LCAw NjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYnVmZmVyX3NxdWVlemVfZHVyYXRpb25fbXMsCisiRHVy YXRpb24gaW4gbXMgdG8gc3F1ZWV6ZSBwYWdlcyBidWZmZXIgd2hlbiBhIG1lbW9yeSBwcmVzc3Vy ZSBpcyBkZXRlY3RlZCIpOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyB4ZW5fYmxrX2J1ZmZlcl9z cXVlZXplX2VuZDsKKwordW5zaWduZWQgeGVuX2Jsa2JrX3JlY2xhaW0oc3RydWN0IHhlbmJ1c19k ZXZpY2UgKmRldiwgZG9taWRfdCBkb21pZCkKK3sKKwl4ZW5fYmxrX2J1ZmZlcl9zcXVlZXplX2Vu ZCA9IGppZmZpZXMgKworCQltc2Vjc190b19qaWZmaWVzKHhlbl9ibGtpZl9idWZmZXJfc3F1ZWV6 ZV9kdXJhdGlvbl9tcyk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGdldF9m cmVlX3BhZ2Uoc3RydWN0IHhlbl9ibGtpZl9yaW5nICpyaW5nLCBzdHJ1Y3QgcGFnZSAqKnBhZ2Up CiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTY1Niw4ICs2NzIsMTEgQEAgaW50IHhlbl9i bGtpZl9zY2hlZHVsZSh2b2lkICphcmcpCiAJCQlyaW5nLT5uZXh0X2xydSA9IGppZmZpZXMgKyBt c2Vjc190b19qaWZmaWVzKExSVV9JTlRFUlZBTCk7CiAJCX0KIAotCQkvKiBTaHJpbmsgaWYgd2Ug aGF2ZSBtb3JlIHRoYW4geGVuX2Jsa2lmX21heF9idWZmZXJfcGFnZXMgKi8KLQkJc2hyaW5rX2Zy ZWVfcGFnZXBvb2wocmluZywgeGVuX2Jsa2lmX21heF9idWZmZXJfcGFnZXMpOworCQkvKiBTaHJp bmsgdGhlIGZyZWUgcGFnZXMgcG9vbCBpZiBpdCBpcyB0b28gbGFyZ2UuICovCisJCWlmICh0aW1l X2JlZm9yZShqaWZmaWVzLCB4ZW5fYmxrX2J1ZmZlcl9zcXVlZXplX2VuZCkpCisJCQlzaHJpbmtf ZnJlZV9wYWdlcG9vbChyaW5nLCAwKTsKKwkJZWxzZQorCQkJc2hyaW5rX2ZyZWVfcGFnZXBvb2wo cmluZywgeGVuX2Jsa2lmX21heF9idWZmZXJfcGFnZXMpOwogCiAJCWlmIChsb2dfc3RhdHMgJiYg dGltZV9hZnRlcihqaWZmaWVzLCByaW5nLT5zdF9wcmludCkpCiAJCQlwcmludF9zdGF0cyhyaW5n KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2svY29tbW9uLmggYi9kcml2 ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL2NvbW1vbi5oCmluZGV4IDFkMzAwMmQ3NzNmNy4uZGU1YzZh MzAxZjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL2NvbW1vbi5oCisr KyBiL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2svY29tbW9uLmgKQEAgLTM4Myw2ICszODMsNyBA QCBpcnFyZXR1cm5fdCB4ZW5fYmxraWZfYmVfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBp bnQgeGVuX2Jsa2lmX3NjaGVkdWxlKHZvaWQgKmFyZyk7CiBpbnQgeGVuX2Jsa2lmX3B1cmdlX3Bl cnNpc3RlbnQodm9pZCAqYXJnKTsKIHZvaWQgeGVuX2Jsa2JrX2ZyZWVfY2FjaGVzKHN0cnVjdCB4 ZW5fYmxraWZfcmluZyAqcmluZyk7Cit1bnNpZ25lZCB4ZW5fYmxrYmtfcmVjbGFpbShzdHJ1Y3Qg eGVuYnVzX2RldmljZSAqZGV2LCBkb21pZF90IGRvbWlkKTsKIAogaW50IHhlbl9ibGtia19mbHVz aF9kaXNrY2FjaGUoc3RydWN0IHhlbmJ1c190cmFuc2FjdGlvbiB4YnQsCiAJCQkgICAgICBzdHJ1 Y3QgYmFja2VuZF9pbmZvICpiZSwgaW50IHN0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxv Y2sveGVuLWJsa2JhY2sveGVuYnVzLmMgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL3hlbmJ1 cy5jCmluZGV4IGI5MGRiY2Q5OWMwMy4uZGU0OWEwOWU2OTMzIDEwMDY0NAotLS0gYS9kcml2ZXJz L2Jsb2NrL3hlbi1ibGtiYWNrL3hlbmJ1cy5jCisrKyBiL2RyaXZlcnMvYmxvY2sveGVuLWJsa2Jh Y2sveGVuYnVzLmMKQEAgLTExMTUsNyArMTExNSw4IEBAIHN0YXRpYyBzdHJ1Y3QgeGVuYnVzX2Ry aXZlciB4ZW5fYmxrYmtfZHJpdmVyID0gewogCS5pZHMgID0geGVuX2Jsa2JrX2lkcywKIAkucHJv YmUgPSB4ZW5fYmxrYmtfcHJvYmUsCiAJLnJlbW92ZSA9IHhlbl9ibGtia19yZW1vdmUsCi0JLm90 aGVyZW5kX2NoYW5nZWQgPSBmcm9udGVuZF9jaGFuZ2VkCisJLm90aGVyZW5kX2NoYW5nZWQgPSBm cm9udGVuZF9jaGFuZ2VkLAorCS5yZWNsYWltID0geGVuX2Jsa2JrX3JlY2xhaW0KIH07CiAKIGlu dCB4ZW5fYmxraWZfeGVuYnVzX2luaXQodm9pZCkKLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QK WGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5v cmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=