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.8 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,URIBL_BLOCKED, 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 C2CAEC2D0C7 for ; Wed, 11 Dec 2019 15:31:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 907152465B for ; Wed, 11 Dec 2019 15:31:03 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amazon.com header.i=@amazon.com header.b="ZAt7m5R4" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387480AbfLKPbC (ORCPT ); Wed, 11 Dec 2019 10:31:02 -0500 Received: from smtp-fw-9102.amazon.com ([207.171.184.29]:40792 "EHLO smtp-fw-9102.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387473AbfLKPa7 (ORCPT ); Wed, 11 Dec 2019 10:30:59 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1576078259; x=1607614259; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=N22hyGYPk1JoqY1Qt0Vz9EReiYVT9fCIbFq3JobjLc4=; b=ZAt7m5R4wlVOi42u6PT6RReA/pxDSMQGBSBOYV/Cth66ihR6T1xGnkdi 8qYYT4Xch5ZHL6UX8PPyLf+0JHdaJHM8KQNnnqwjrzmlGey3l7Do00p3+ WWYJ2foddSBgVMqGg49e4yF2tU1sMl8fp4j0Pn/i5+iDhGjphMlIzhZ8t Y=; IronPort-SDR: J9/38YbMpalD44EqUzMsZ76zibWP7tf+mT+iXkGgPFEVIRtKljVza3qOgqGg0rbr/3/l0JZmLp 5vb/yvqk5YQQ== X-IronPort-AV: E=Sophos;i="5.69,301,1571702400"; d="scan'208";a="12930184" Received: from sea32-co-svc-lb4-vlan3.sea.corp.amazon.com (HELO email-inbound-relay-2b-81e76b79.us-west-2.amazon.com) ([10.47.23.38]) by smtp-border-fw-out-9102.sea19.amazon.com with ESMTP; 11 Dec 2019 15:30:47 +0000 Received: from EX13MTAUEA001.ant.amazon.com (pdx4-ws-svc-p6-lb7-vlan3.pdx.amazon.com [10.170.41.166]) by email-inbound-relay-2b-81e76b79.us-west-2.amazon.com (Postfix) with ESMTPS id 7A6AFA2173; Wed, 11 Dec 2019 15:30:46 +0000 (UTC) Received: from EX13D32EUB002.ant.amazon.com (10.43.166.114) by EX13MTAUEA001.ant.amazon.com (10.43.61.243) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Wed, 11 Dec 2019 15:30:14 +0000 Received: from EX13MTAUWC001.ant.amazon.com (10.43.162.135) by EX13D32EUB002.ant.amazon.com (10.43.166.114) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Wed, 11 Dec 2019 15:30:13 +0000 Received: from u2f063a87eabd5f.cbg10.amazon.com (10.125.106.135) by mail-relay.amazon.com (10.43.162.232) with Microsoft SMTP Server id 15.0.1367.3 via Frontend Transport; Wed, 11 Dec 2019 15:30:10 +0000 From: Paul Durrant To: , , CC: Paul Durrant , Konrad Rzeszutek Wilk , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Jens Axboe , Boris Ostrovsky , Juergen Gross , "Stefano Stabellini" Subject: [PATCH v3 4/4] xen-blkback: support dynamic unbind/bind Date: Wed, 11 Dec 2019 15:29:56 +0000 Message-ID: <20191211152956.5168-5-pdurrant@amazon.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191211152956.5168-1-pdurrant@amazon.com> References: <20191211152956.5168-1-pdurrant@amazon.com> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org By simply re-attaching to shared rings during connect_ring() rather than assuming they are freshly allocated (i.e assuming the counters are zero) it is possible for vbd instances to be unbound and re-bound from and to (respectively) a running guest. This has been tested by running: while true; do fio --name=randwrite --ioengine=libaio --iodepth=16 \ --rw=randwrite --bs=4k --direct=1 --size=1G --verify=crc32; done in a PV guest whilst running: while true; do echo vbd-$DOMID-$VBD >unbind; echo unbound; sleep 5; echo vbd-$DOMID-$VBD >bind; echo bound; sleep 3; done in dom0 from /sys/bus/xen-backend/drivers/vbd to continuously unbind and re-bind its system disk image. This is a highly useful feature for a backend module as it allows it to be unloaded and re-loaded (i.e. updated) without requiring domUs to be halted. This was also tested by running: while true; do echo vbd-$DOMID-$VBD >unbind; echo unbound; sleep 5; rmmod xen-blkback; echo unloaded; sleep 1; modprobe xen-blkback; echo bound; cd $(pwd); sleep 3; done in dom0 whilst running the same loop as above in the (single) PV guest. Some (less stressful) testing has also been done using a Windows HVM guest with the latest 9.0 PV drivers installed. Signed-off-by: Paul Durrant --- Cc: Konrad Rzeszutek Wilk Cc: "Roger Pau Monné" Cc: Jens Axboe Cc: Boris Ostrovsky Cc: Juergen Gross Cc: Stefano Stabellini v3: - Constify sring_common and re-work error handling in xen_blkif_map() v2: - Apply a sanity check to the value of rsp_prod and fail the re-attach if it is implausible - Set allow_rebind to prevent ring from being closed on unbind - Update test workload from dd to fio (with verification) --- drivers/block/xen-blkback/xenbus.c | 56 ++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c index 59d576d27ca7..0d4097bdff3f 100644 --- a/drivers/block/xen-blkback/xenbus.c +++ b/drivers/block/xen-blkback/xenbus.c @@ -190,6 +190,9 @@ static int xen_blkif_map(struct xen_blkif_ring *ring, grant_ref_t *gref, { int err; struct xen_blkif *blkif = ring->blkif; + const struct blkif_common_sring *sring_common; + RING_IDX rsp_prod, req_prod; + unsigned int size; /* Already connected through? */ if (ring->irq) @@ -200,46 +203,62 @@ static int xen_blkif_map(struct xen_blkif_ring *ring, grant_ref_t *gref, if (err < 0) return err; + sring_common = (struct blkif_common_sring *)ring->blk_ring; + rsp_prod = READ_ONCE(sring_common->rsp_prod); + req_prod = READ_ONCE(sring_common->req_prod); + switch (blkif->blk_protocol) { case BLKIF_PROTOCOL_NATIVE: { - struct blkif_sring *sring; - sring = (struct blkif_sring *)ring->blk_ring; - BACK_RING_INIT(&ring->blk_rings.native, sring, - XEN_PAGE_SIZE * nr_grefs); + struct blkif_sring *sring_native = + (struct blkif_sring *)ring->blk_ring; + + BACK_RING_ATTACH(&ring->blk_rings.native, sring_native, + rsp_prod, XEN_PAGE_SIZE * nr_grefs); + size = __RING_SIZE(sring_native, XEN_PAGE_SIZE * nr_grefs); break; } case BLKIF_PROTOCOL_X86_32: { - struct blkif_x86_32_sring *sring_x86_32; - sring_x86_32 = (struct blkif_x86_32_sring *)ring->blk_ring; - BACK_RING_INIT(&ring->blk_rings.x86_32, sring_x86_32, - XEN_PAGE_SIZE * nr_grefs); + struct blkif_x86_32_sring *sring_x86_32 = + (struct blkif_x86_32_sring *)ring->blk_ring; + + BACK_RING_ATTACH(&ring->blk_rings.x86_32, sring_x86_32, + rsp_prod, XEN_PAGE_SIZE * nr_grefs); + size = __RING_SIZE(sring_x86_32, XEN_PAGE_SIZE * nr_grefs); break; } case BLKIF_PROTOCOL_X86_64: { - struct blkif_x86_64_sring *sring_x86_64; - sring_x86_64 = (struct blkif_x86_64_sring *)ring->blk_ring; - BACK_RING_INIT(&ring->blk_rings.x86_64, sring_x86_64, - XEN_PAGE_SIZE * nr_grefs); + struct blkif_x86_64_sring *sring_x86_64 = + (struct blkif_x86_64_sring *)ring->blk_ring; + + BACK_RING_ATTACH(&ring->blk_rings.x86_64, sring_x86_64, + rsp_prod, XEN_PAGE_SIZE * nr_grefs); + size = __RING_SIZE(sring_x86_64, XEN_PAGE_SIZE * nr_grefs); break; } default: BUG(); } + err = -EIO; + if (req_prod - rsp_prod > size) + goto fail; + err = bind_interdomain_evtchn_to_irqhandler(blkif->domid, evtchn, xen_blkif_be_int, 0, "blkif-backend", ring); - if (err < 0) { - xenbus_unmap_ring_vfree(blkif->be->dev, ring->blk_ring); - ring->blk_rings.common.sring = NULL; - return err; - } + if (err < 0) + goto fail; ring->irq = err; return 0; + +fail: + xenbus_unmap_ring_vfree(blkif->be->dev, ring->blk_ring); + ring->blk_rings.common.sring = NULL; + return err; } static int xen_blkif_disconnect(struct xen_blkif *blkif) @@ -1131,7 +1150,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, + .allow_rebind = true, }; int xen_blkif_xenbus_init(void) -- 2.20.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,URIBL_BLOCKED,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 3733FC2D0C7 for ; Wed, 11 Dec 2019 15:31:15 +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 0A39C22B48 for ; Wed, 11 Dec 2019 15:31:15 +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="AuDXomJ8" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0A39C22B48 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 1if3x7-0002I4-6O; Wed, 11 Dec 2019 15:31:01 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1if3x5-0002Hd-MH for xen-devel@lists.xenproject.org; Wed, 11 Dec 2019 15:30:59 +0000 X-Inumbo-ID: 3afb046a-1c2b-11ea-8b7d-12813bfff9fa Received: from smtp-fw-9102.amazon.com (unknown [207.171.184.29]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 3afb046a-1c2b-11ea-8b7d-12813bfff9fa; Wed, 11 Dec 2019 15:30:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1576078260; x=1607614260; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=N22hyGYPk1JoqY1Qt0Vz9EReiYVT9fCIbFq3JobjLc4=; b=AuDXomJ8oVIS6tS4/APUnJexaGL775UVH5enq+bAE0IJuDKCYqZs985j K26jNkiVZikPBOLkelkZmLh59tbWtCWsLNVsx/0PRt9c+jECXRjEsTVJT xpFpsFfP57SiBgEVKKLCo9dVPsSMhZyl3suiXuiGqxqAbozIaUJBhFTr2 8=; IronPort-SDR: J9/38YbMpalD44EqUzMsZ76zibWP7tf+mT+iXkGgPFEVIRtKljVza3qOgqGg0rbr/3/l0JZmLp 5vb/yvqk5YQQ== X-IronPort-AV: E=Sophos;i="5.69,301,1571702400"; d="scan'208";a="12930184" Received: from sea32-co-svc-lb4-vlan3.sea.corp.amazon.com (HELO email-inbound-relay-2b-81e76b79.us-west-2.amazon.com) ([10.47.23.38]) by smtp-border-fw-out-9102.sea19.amazon.com with ESMTP; 11 Dec 2019 15:30:47 +0000 Received: from EX13MTAUEA001.ant.amazon.com (pdx4-ws-svc-p6-lb7-vlan3.pdx.amazon.com [10.170.41.166]) by email-inbound-relay-2b-81e76b79.us-west-2.amazon.com (Postfix) with ESMTPS id 7A6AFA2173; Wed, 11 Dec 2019 15:30:46 +0000 (UTC) Received: from EX13D32EUB002.ant.amazon.com (10.43.166.114) by EX13MTAUEA001.ant.amazon.com (10.43.61.243) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Wed, 11 Dec 2019 15:30:14 +0000 Received: from EX13MTAUWC001.ant.amazon.com (10.43.162.135) by EX13D32EUB002.ant.amazon.com (10.43.166.114) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Wed, 11 Dec 2019 15:30:13 +0000 Received: from u2f063a87eabd5f.cbg10.amazon.com (10.125.106.135) by mail-relay.amazon.com (10.43.162.232) with Microsoft SMTP Server id 15.0.1367.3 via Frontend Transport; Wed, 11 Dec 2019 15:30:10 +0000 From: Paul Durrant To: , , Date: Wed, 11 Dec 2019 15:29:56 +0000 Message-ID: <20191211152956.5168-5-pdurrant@amazon.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191211152956.5168-1-pdurrant@amazon.com> References: <20191211152956.5168-1-pdurrant@amazon.com> MIME-Version: 1.0 Precedence: Bulk Subject: [Xen-devel] [PATCH v3 4/4] xen-blkback: support dynamic unbind/bind 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: Jens Axboe , Juergen Gross , Stefano Stabellini , Konrad Rzeszutek Wilk , Paul Durrant , Boris Ostrovsky , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" Qnkgc2ltcGx5IHJlLWF0dGFjaGluZyB0byBzaGFyZWQgcmluZ3MgZHVyaW5nIGNvbm5lY3Rfcmlu ZygpIHJhdGhlciB0aGFuCmFzc3VtaW5nIHRoZXkgYXJlIGZyZXNobHkgYWxsb2NhdGVkIChpLmUg YXNzdW1pbmcgdGhlIGNvdW50ZXJzIGFyZSB6ZXJvKQppdCBpcyBwb3NzaWJsZSBmb3IgdmJkIGlu c3RhbmNlcyB0byBiZSB1bmJvdW5kIGFuZCByZS1ib3VuZCBmcm9tIGFuZCB0bwoocmVzcGVjdGl2 ZWx5KSBhIHJ1bm5pbmcgZ3Vlc3QuCgpUaGlzIGhhcyBiZWVuIHRlc3RlZCBieSBydW5uaW5nOgoK d2hpbGUgdHJ1ZTsKICBkbyBmaW8gLS1uYW1lPXJhbmR3cml0ZSAtLWlvZW5naW5lPWxpYmFpbyAt LWlvZGVwdGg9MTYgXAogIC0tcnc9cmFuZHdyaXRlIC0tYnM9NGsgLS1kaXJlY3Q9MSAtLXNpemU9 MUcgLS12ZXJpZnk9Y3JjMzI7CiAgZG9uZQoKaW4gYSBQViBndWVzdCB3aGlsc3QgcnVubmluZzoK CndoaWxlIHRydWU7CiAgZG8gZWNobyB2YmQtJERPTUlELSRWQkQgPnVuYmluZDsKICBlY2hvIHVu Ym91bmQ7CiAgc2xlZXAgNTsKICBlY2hvIHZiZC0kRE9NSUQtJFZCRCA+YmluZDsKICBlY2hvIGJv dW5kOwogIHNsZWVwIDM7CiAgZG9uZQoKaW4gZG9tMCBmcm9tIC9zeXMvYnVzL3hlbi1iYWNrZW5k L2RyaXZlcnMvdmJkIHRvIGNvbnRpbnVvdXNseSB1bmJpbmQgYW5kCnJlLWJpbmQgaXRzIHN5c3Rl bSBkaXNrIGltYWdlLgoKVGhpcyBpcyBhIGhpZ2hseSB1c2VmdWwgZmVhdHVyZSBmb3IgYSBiYWNr ZW5kIG1vZHVsZSBhcyBpdCBhbGxvd3MgaXQgdG8gYmUKdW5sb2FkZWQgYW5kIHJlLWxvYWRlZCAo aS5lLiB1cGRhdGVkKSB3aXRob3V0IHJlcXVpcmluZyBkb21VcyB0byBiZSBoYWx0ZWQuClRoaXMg d2FzIGFsc28gdGVzdGVkIGJ5IHJ1bm5pbmc6Cgp3aGlsZSB0cnVlOwogIGRvIGVjaG8gdmJkLSRE T01JRC0kVkJEID51bmJpbmQ7CiAgZWNobyB1bmJvdW5kOwogIHNsZWVwIDU7CiAgcm1tb2QgeGVu LWJsa2JhY2s7CiAgZWNobyB1bmxvYWRlZDsKICBzbGVlcCAxOwogIG1vZHByb2JlIHhlbi1ibGti YWNrOwogIGVjaG8gYm91bmQ7CiAgY2QgJChwd2QpOwogIHNsZWVwIDM7CiAgZG9uZQoKaW4gZG9t MCB3aGlsc3QgcnVubmluZyB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIGluIHRoZSAoc2luZ2xlKSBQ ViBndWVzdC4KClNvbWUgKGxlc3Mgc3RyZXNzZnVsKSB0ZXN0aW5nIGhhcyBhbHNvIGJlZW4gZG9u ZSB1c2luZyBhIFdpbmRvd3MgSFZNIGd1ZXN0CndpdGggdGhlIGxhdGVzdCA5LjAgUFYgZHJpdmVy cyBpbnN0YWxsZWQuCgpTaWduZWQtb2ZmLWJ5OiBQYXVsIER1cnJhbnQgPHBkdXJyYW50QGFtYXpv bi5jb20+Ci0tLQpDYzogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQud2lsa0BvcmFjbGUu Y29tPgpDYzogIlJvZ2VyIFBhdSBNb25uw6kiIDxyb2dlci5wYXVAY2l0cml4LmNvbT4KQ2M6IEpl bnMgQXhib2UgPGF4Ym9lQGtlcm5lbC5kaz4KQ2M6IEJvcmlzIE9zdHJvdnNreSA8Ym9yaXMub3N0 cm92c2t5QG9yYWNsZS5jb20+CkNjOiBKdWVyZ2VuIEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+CkNj OiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc+Cgp2MzoKIC0gQ29u c3RpZnkgc3JpbmdfY29tbW9uIGFuZCByZS13b3JrIGVycm9yIGhhbmRsaW5nIGluIHhlbl9ibGtp Zl9tYXAoKQoKdjI6CiAtIEFwcGx5IGEgc2FuaXR5IGNoZWNrIHRvIHRoZSB2YWx1ZSBvZiByc3Bf cHJvZCBhbmQgZmFpbCB0aGUgcmUtYXR0YWNoCiAgIGlmIGl0IGlzIGltcGxhdXNpYmxlCiAtIFNl dCBhbGxvd19yZWJpbmQgdG8gcHJldmVudCByaW5nIGZyb20gYmVpbmcgY2xvc2VkIG9uIHVuYmlu ZAogLSBVcGRhdGUgdGVzdCB3b3JrbG9hZCBmcm9tIGRkIHRvIGZpbyAod2l0aCB2ZXJpZmljYXRp b24pCi0tLQogZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay94ZW5idXMuYyB8IDU2ICsrKysrKysr KysrKysrKysrKysrLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDM4IGluc2VydGlvbnMoKyks IDE4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2sv eGVuYnVzLmMgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL3hlbmJ1cy5jCmluZGV4IDU5ZDU3 NmQyN2NhNy4uMGQ0MDk3YmRmZjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGti YWNrL3hlbmJ1cy5jCisrKyBiL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2sveGVuYnVzLmMKQEAg LTE5MCw2ICsxOTAsOSBAQCBzdGF0aWMgaW50IHhlbl9ibGtpZl9tYXAoc3RydWN0IHhlbl9ibGtp Zl9yaW5nICpyaW5nLCBncmFudF9yZWZfdCAqZ3JlZiwKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCB4 ZW5fYmxraWYgKmJsa2lmID0gcmluZy0+YmxraWY7CisJY29uc3Qgc3RydWN0IGJsa2lmX2NvbW1v bl9zcmluZyAqc3JpbmdfY29tbW9uOworCVJJTkdfSURYIHJzcF9wcm9kLCByZXFfcHJvZDsKKwl1 bnNpZ25lZCBpbnQgc2l6ZTsKIAogCS8qIEFscmVhZHkgY29ubmVjdGVkIHRocm91Z2g/ICovCiAJ aWYgKHJpbmctPmlycSkKQEAgLTIwMCw0NiArMjAzLDYyIEBAIHN0YXRpYyBpbnQgeGVuX2Jsa2lm X21hcChzdHJ1Y3QgeGVuX2Jsa2lmX3JpbmcgKnJpbmcsIGdyYW50X3JlZl90ICpncmVmLAogCWlm IChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCisJc3JpbmdfY29tbW9uID0gKHN0cnVjdCBibGtp Zl9jb21tb25fc3JpbmcgKilyaW5nLT5ibGtfcmluZzsKKwlyc3BfcHJvZCA9IFJFQURfT05DRShz cmluZ19jb21tb24tPnJzcF9wcm9kKTsKKwlyZXFfcHJvZCA9IFJFQURfT05DRShzcmluZ19jb21t b24tPnJlcV9wcm9kKTsKKwogCXN3aXRjaCAoYmxraWYtPmJsa19wcm90b2NvbCkgewogCWNhc2Ug QkxLSUZfUFJPVE9DT0xfTkFUSVZFOgogCXsKLQkJc3RydWN0IGJsa2lmX3NyaW5nICpzcmluZzsK LQkJc3JpbmcgPSAoc3RydWN0IGJsa2lmX3NyaW5nICopcmluZy0+YmxrX3Jpbmc7Ci0JCUJBQ0tf UklOR19JTklUKCZyaW5nLT5ibGtfcmluZ3MubmF0aXZlLCBzcmluZywKLQkJCSAgICAgICBYRU5f UEFHRV9TSVpFICogbnJfZ3JlZnMpOworCQlzdHJ1Y3QgYmxraWZfc3JpbmcgKnNyaW5nX25hdGl2 ZSA9CisJCQkoc3RydWN0IGJsa2lmX3NyaW5nICopcmluZy0+YmxrX3Jpbmc7CisKKwkJQkFDS19S SU5HX0FUVEFDSCgmcmluZy0+YmxrX3JpbmdzLm5hdGl2ZSwgc3JpbmdfbmF0aXZlLAorCQkJCSBy c3BfcHJvZCwgWEVOX1BBR0VfU0laRSAqIG5yX2dyZWZzKTsKKwkJc2l6ZSA9IF9fUklOR19TSVpF KHNyaW5nX25hdGl2ZSwgWEVOX1BBR0VfU0laRSAqIG5yX2dyZWZzKTsKIAkJYnJlYWs7CiAJfQog CWNhc2UgQkxLSUZfUFJPVE9DT0xfWDg2XzMyOgogCXsKLQkJc3RydWN0IGJsa2lmX3g4Nl8zMl9z cmluZyAqc3JpbmdfeDg2XzMyOwotCQlzcmluZ194ODZfMzIgPSAoc3RydWN0IGJsa2lmX3g4Nl8z Ml9zcmluZyAqKXJpbmctPmJsa19yaW5nOwotCQlCQUNLX1JJTkdfSU5JVCgmcmluZy0+YmxrX3Jp bmdzLng4Nl8zMiwgc3JpbmdfeDg2XzMyLAotCQkJICAgICAgIFhFTl9QQUdFX1NJWkUgKiBucl9n cmVmcyk7CisJCXN0cnVjdCBibGtpZl94ODZfMzJfc3JpbmcgKnNyaW5nX3g4Nl8zMiA9CisJCQko c3RydWN0IGJsa2lmX3g4Nl8zMl9zcmluZyAqKXJpbmctPmJsa19yaW5nOworCisJCUJBQ0tfUklO R19BVFRBQ0goJnJpbmctPmJsa19yaW5ncy54ODZfMzIsIHNyaW5nX3g4Nl8zMiwKKwkJCQkgcnNw X3Byb2QsIFhFTl9QQUdFX1NJWkUgKiBucl9ncmVmcyk7CisJCXNpemUgPSBfX1JJTkdfU0laRShz cmluZ194ODZfMzIsIFhFTl9QQUdFX1NJWkUgKiBucl9ncmVmcyk7CiAJCWJyZWFrOwogCX0KIAlj YXNlIEJMS0lGX1BST1RPQ09MX1g4Nl82NDoKIAl7Ci0JCXN0cnVjdCBibGtpZl94ODZfNjRfc3Jp bmcgKnNyaW5nX3g4Nl82NDsKLQkJc3JpbmdfeDg2XzY0ID0gKHN0cnVjdCBibGtpZl94ODZfNjRf c3JpbmcgKilyaW5nLT5ibGtfcmluZzsKLQkJQkFDS19SSU5HX0lOSVQoJnJpbmctPmJsa19yaW5n cy54ODZfNjQsIHNyaW5nX3g4Nl82NCwKLQkJCSAgICAgICBYRU5fUEFHRV9TSVpFICogbnJfZ3Jl ZnMpOworCQlzdHJ1Y3QgYmxraWZfeDg2XzY0X3NyaW5nICpzcmluZ194ODZfNjQgPQorCQkJKHN0 cnVjdCBibGtpZl94ODZfNjRfc3JpbmcgKilyaW5nLT5ibGtfcmluZzsKKworCQlCQUNLX1JJTkdf QVRUQUNIKCZyaW5nLT5ibGtfcmluZ3MueDg2XzY0LCBzcmluZ194ODZfNjQsCisJCQkJIHJzcF9w cm9kLCBYRU5fUEFHRV9TSVpFICogbnJfZ3JlZnMpOworCQlzaXplID0gX19SSU5HX1NJWkUoc3Jp bmdfeDg2XzY0LCBYRU5fUEFHRV9TSVpFICogbnJfZ3JlZnMpOwogCQlicmVhazsKIAl9CiAJZGVm YXVsdDoKIAkJQlVHKCk7CiAJfQogCisJZXJyID0gLUVJTzsKKwlpZiAocmVxX3Byb2QgLSByc3Bf cHJvZCA+IHNpemUpCisJCWdvdG8gZmFpbDsKKwogCWVyciA9IGJpbmRfaW50ZXJkb21haW5fZXZ0 Y2huX3RvX2lycWhhbmRsZXIoYmxraWYtPmRvbWlkLCBldnRjaG4sCiAJCQkJCQkgICAgeGVuX2Js a2lmX2JlX2ludCwgMCwKIAkJCQkJCSAgICAiYmxraWYtYmFja2VuZCIsIHJpbmcpOwotCWlmIChl cnIgPCAwKSB7Ci0JCXhlbmJ1c191bm1hcF9yaW5nX3ZmcmVlKGJsa2lmLT5iZS0+ZGV2LCByaW5n LT5ibGtfcmluZyk7Ci0JCXJpbmctPmJsa19yaW5ncy5jb21tb24uc3JpbmcgPSBOVUxMOwotCQly ZXR1cm4gZXJyOwotCX0KKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmYWlsOwogCXJpbmctPmlycSA9 IGVycjsKIAogCXJldHVybiAwOworCitmYWlsOgorCXhlbmJ1c191bm1hcF9yaW5nX3ZmcmVlKGJs a2lmLT5iZS0+ZGV2LCByaW5nLT5ibGtfcmluZyk7CisJcmluZy0+YmxrX3JpbmdzLmNvbW1vbi5z cmluZyA9IE5VTEw7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCB4ZW5fYmxraWZfZGlz Y29ubmVjdChzdHJ1Y3QgeGVuX2Jsa2lmICpibGtpZikKQEAgLTExMzEsNyArMTE1MCw4IEBAIHN0 YXRpYyBzdHJ1Y3QgeGVuYnVzX2RyaXZlciB4ZW5fYmxrYmtfZHJpdmVyID0gewogCS5pZHMgID0g eGVuX2Jsa2JrX2lkcywKIAkucHJvYmUgPSB4ZW5fYmxrYmtfcHJvYmUsCiAJLnJlbW92ZSA9IHhl bl9ibGtia19yZW1vdmUsCi0JLm90aGVyZW5kX2NoYW5nZWQgPSBmcm9udGVuZF9jaGFuZ2VkCisJ Lm90aGVyZW5kX2NoYW5nZWQgPSBmcm9udGVuZF9jaGFuZ2VkLAorCS5hbGxvd19yZWJpbmQgPSB0 cnVlLAogfTsKIAogaW50IHhlbl9ibGtpZl94ZW5idXNfaW5pdCh2b2lkKQotLSAKMi4yMC4xCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0 cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==