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=-10.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,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 3C145C433E0 for ; Mon, 29 Jun 2020 19:06:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2084C206F1 for ; Mon, 29 Jun 2020 19:06:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593457611; bh=57mXR1511O5ZaPDbRegI3KrLNELD4N3Pw07SdU9f8Jw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=WTHtQPtB6HPMnJSz8p1HfJi2DXTdK9OF1ws87DCjCHnPmX+RyNkydwVQO9fwgtExj Vw9ce1bzZ7kLGnF0r/8vQdpe8DthIqd/6ZgYDc1pclQD6IayKiqb02Evs3qR3WqDcK gGFu/5oJlgY2EXpwZM9WeZ7UJEo5RCIbuJf6mU2g= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730649AbgF2TGt (ORCPT ); Mon, 29 Jun 2020 15:06:49 -0400 Received: from mail.kernel.org ([198.145.29.99]:49474 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730423AbgF2TGr (ORCPT ); Mon, 29 Jun 2020 15:06:47 -0400 Received: from dhcp-10-100-145-180.wdl.wdc.com (unknown [199.255.45.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 3CFF520663; Mon, 29 Jun 2020 19:06:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593457607; bh=57mXR1511O5ZaPDbRegI3KrLNELD4N3Pw07SdU9f8Jw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HnhObOTJJhbl1rKszpjF/NTN7pi/+wYTmca0j4EL7HdEwu9lJDYW3Btf68NveM2MQ +ggwmtyIXLoGoNvWBL0USwuHooOZ86cqGuRuvlZH0GY0eYDyXRROIIPmkPS1PRZPG8 FJrmG8F3mmw31wgsQj6R8tUvXa86uJI2m8HcAdRQ= From: Keith Busch To: linux-nvme@lists.infradead.org, hch@lst.de, sagi@grimberg.me, linux-block@vger.kernel.org Cc: axboe@kernel.dk, Aravind Ramesh , Chaitanya Kulkarni , =?UTF-8?q?Matias=20Bj=C3=B8rling?= , Daniel Wagner , "Martin K . Petersen" , Johannes Thumshirn , Hannes Reinecke Subject: [PATCHv4 2/5] null_blk: introduce zone capacity for zoned device Date: Mon, 29 Jun 2020 12:06:38 -0700 Message-Id: <20200629190641.1986462-3-kbusch@kernel.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200629190641.1986462-1-kbusch@kernel.org> References: <20200629190641.1986462-1-kbusch@kernel.org> 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 From: Aravind Ramesh Allow emulation of a zoned device with a per zone capacity smaller than the zone size as as defined in the Zoned Namespace (ZNS) Command Set specification. The zone capacity defaults to the zone size if not specified and must be smaller than the zone size otherwise. Reviewed-by: Chaitanya Kulkarni Reviewed-by: Matias Bjørling Reviewed-by: Daniel Wagner Reviewed-by: Martin K. Petersen Reviewed-by: Johannes Thumshirn Reviewed-by: Hannes Reinecke Signed-off-by: Aravind Ramesh --- drivers/block/null_blk.h | 1 + drivers/block/null_blk_main.c | 10 +++++++++- drivers/block/null_blk_zoned.c | 16 ++++++++++++++-- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/drivers/block/null_blk.h b/drivers/block/null_blk.h index 81b311c9d781..daed4a9c3436 100644 --- a/drivers/block/null_blk.h +++ b/drivers/block/null_blk.h @@ -49,6 +49,7 @@ struct nullb_device { unsigned long completion_nsec; /* time in ns to complete a request */ unsigned long cache_size; /* disk cache size in MB */ unsigned long zone_size; /* zone size in MB if device is zoned */ + unsigned long zone_capacity; /* zone capacity in MB if device is zoned */ unsigned int zone_nr_conv; /* number of conventional zones */ unsigned int submit_queues; /* number of submission queues */ unsigned int home_node; /* home node for the device */ diff --git a/drivers/block/null_blk_main.c b/drivers/block/null_blk_main.c index 82259242b9b5..96d1adf6b818 100644 --- a/drivers/block/null_blk_main.c +++ b/drivers/block/null_blk_main.c @@ -200,6 +200,10 @@ static unsigned long g_zone_size = 256; module_param_named(zone_size, g_zone_size, ulong, S_IRUGO); MODULE_PARM_DESC(zone_size, "Zone size in MB when block device is zoned. Must be power-of-two: Default: 256"); +static unsigned long g_zone_capacity; +module_param_named(zone_capacity, g_zone_capacity, ulong, 0444); +MODULE_PARM_DESC(zone_capacity, "Zone capacity in MB when block device is zoned. Can be less than or equal to zone size. Default: Zone size"); + static unsigned int g_zone_nr_conv; module_param_named(zone_nr_conv, g_zone_nr_conv, uint, 0444); MODULE_PARM_DESC(zone_nr_conv, "Number of conventional zones when block device is zoned. Default: 0"); @@ -341,6 +345,7 @@ NULLB_DEVICE_ATTR(mbps, uint, NULL); NULLB_DEVICE_ATTR(cache_size, ulong, NULL); NULLB_DEVICE_ATTR(zoned, bool, NULL); NULLB_DEVICE_ATTR(zone_size, ulong, NULL); +NULLB_DEVICE_ATTR(zone_capacity, ulong, NULL); NULLB_DEVICE_ATTR(zone_nr_conv, uint, NULL); static ssize_t nullb_device_power_show(struct config_item *item, char *page) @@ -457,6 +462,7 @@ static struct configfs_attribute *nullb_device_attrs[] = { &nullb_device_attr_badblocks, &nullb_device_attr_zoned, &nullb_device_attr_zone_size, + &nullb_device_attr_zone_capacity, &nullb_device_attr_zone_nr_conv, NULL, }; @@ -510,7 +516,8 @@ nullb_group_drop_item(struct config_group *group, struct config_item *item) static ssize_t memb_group_features_show(struct config_item *item, char *page) { - return snprintf(page, PAGE_SIZE, "memory_backed,discard,bandwidth,cache,badblocks,zoned,zone_size,zone_nr_conv\n"); + return snprintf(page, PAGE_SIZE, + "memory_backed,discard,bandwidth,cache,badblocks,zoned,zone_size,zone_capacity,zone_nr_conv\n"); } CONFIGFS_ATTR_RO(memb_group_, features); @@ -571,6 +578,7 @@ static struct nullb_device *null_alloc_dev(void) dev->use_per_node_hctx = g_use_per_node_hctx; dev->zoned = g_zoned; dev->zone_size = g_zone_size; + dev->zone_capacity = g_zone_capacity; dev->zone_nr_conv = g_zone_nr_conv; return dev; } diff --git a/drivers/block/null_blk_zoned.c b/drivers/block/null_blk_zoned.c index 624aac09b005..3d25c9ad2383 100644 --- a/drivers/block/null_blk_zoned.c +++ b/drivers/block/null_blk_zoned.c @@ -28,6 +28,15 @@ int null_init_zoned_dev(struct nullb_device *dev, struct request_queue *q) return -EINVAL; } + if (!dev->zone_capacity) + dev->zone_capacity = dev->zone_size; + + if (dev->zone_capacity > dev->zone_size) { + pr_err("null_blk: zone capacity (%lu MB) larger than zone size (%lu MB)\n", + dev->zone_capacity, dev->zone_size); + return -EINVAL; + } + dev->zone_size_sects = dev->zone_size << ZONE_SIZE_SHIFT; dev->nr_zones = dev_size >> (SECTOR_SHIFT + ilog2(dev->zone_size_sects)); @@ -60,7 +69,7 @@ int null_init_zoned_dev(struct nullb_device *dev, struct request_queue *q) zone->start = zone->wp = sector; zone->len = dev->zone_size_sects; - zone->capacity = zone->len; + zone->capacity = dev->zone_capacity << ZONE_SIZE_SHIFT; zone->type = BLK_ZONE_TYPE_SEQWRITE_REQ; zone->cond = BLK_ZONE_COND_EMPTY; @@ -187,6 +196,9 @@ static blk_status_t null_zone_write(struct nullb_cmd *cmd, sector_t sector, return BLK_STS_IOERR; } + if (zone->wp + nr_sectors > zone->start + zone->capacity) + return BLK_STS_IOERR; + if (zone->cond != BLK_ZONE_COND_EXP_OPEN) zone->cond = BLK_ZONE_COND_IMP_OPEN; @@ -195,7 +207,7 @@ static blk_status_t null_zone_write(struct nullb_cmd *cmd, sector_t sector, return ret; zone->wp += nr_sectors; - if (zone->wp == zone->start + zone->len) + if (zone->wp == zone->start + zone->capacity) zone->cond = BLK_ZONE_COND_FULL; return BLK_STS_OK; default: -- 2.24.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=-10.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,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 D802CC433E4 for ; Mon, 29 Jun 2020 19:06:55 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 AC72E20663 for ; Mon, 29 Jun 2020 19:06:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="hzMdCprq"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="HnhObOTJ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AC72E20663 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Zx2v24MsxjHWwPC1PXh1eIZqKL095LtQCnSMGaLGkR8=; b=hzMdCprqgJNu49/43Rg+Kozud d41W23meE2lGUSesMO58vMG/hLZzgLN9HpuWS8kYij2ulitYYQYdNQrhDkvANhP18z+5eTtyt6vZi +1A2bTNgXPkbfSsNx/+ThRhHe0DDKRD9tU//WFelfl9JIwss6MbrYBnLf63vOM4CcfQsG1YElk3wi NVz71F+vh4OQ3EzpT2g3f/F5QEhOQxsYqulztHnHblJ7pAOiUyWGN3PWteoxkAYOCP/d5f9Vy/q5Z HCIePzNEh7RyhYrfzJI4VTocsfPIgYcM9e8oA5PIgqa9UUWC5JmW++IJnjPpeRAA+FbSUmIcoXJyy fyeAT8wug==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jpz7D-0006qy-Tk; Mon, 29 Jun 2020 19:06:51 +0000 Received: from mail.kernel.org ([198.145.29.99]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jpz79-0006pg-IH for linux-nvme@lists.infradead.org; Mon, 29 Jun 2020 19:06:48 +0000 Received: from dhcp-10-100-145-180.wdl.wdc.com (unknown [199.255.45.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 3CFF520663; Mon, 29 Jun 2020 19:06:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593457607; bh=57mXR1511O5ZaPDbRegI3KrLNELD4N3Pw07SdU9f8Jw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HnhObOTJJhbl1rKszpjF/NTN7pi/+wYTmca0j4EL7HdEwu9lJDYW3Btf68NveM2MQ +ggwmtyIXLoGoNvWBL0USwuHooOZ86cqGuRuvlZH0GY0eYDyXRROIIPmkPS1PRZPG8 FJrmG8F3mmw31wgsQj6R8tUvXa86uJI2m8HcAdRQ= From: Keith Busch To: linux-nvme@lists.infradead.org, hch@lst.de, sagi@grimberg.me, linux-block@vger.kernel.org Subject: [PATCHv4 2/5] null_blk: introduce zone capacity for zoned device Date: Mon, 29 Jun 2020 12:06:38 -0700 Message-Id: <20200629190641.1986462-3-kbusch@kernel.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200629190641.1986462-1-kbusch@kernel.org> References: <20200629190641.1986462-1-kbusch@kernel.org> MIME-Version: 1.0 X-BeenThere: linux-nvme@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: axboe@kernel.dk, Chaitanya Kulkarni , Daniel Wagner , Johannes Thumshirn , Aravind Ramesh , Hannes Reinecke , "Martin K . Petersen" , =?UTF-8?q?Matias=20Bj=C3=B8rling?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-nvme" Errors-To: linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org RnJvbTogQXJhdmluZCBSYW1lc2ggPGFyYXZpbmQucmFtZXNoQHdkYy5jb20+CgpBbGxvdyBlbXVs YXRpb24gb2YgYSB6b25lZCBkZXZpY2Ugd2l0aCBhIHBlciB6b25lIGNhcGFjaXR5IHNtYWxsZXIg dGhhbgp0aGUgem9uZSBzaXplIGFzIGFzIGRlZmluZWQgaW4gdGhlIFpvbmVkIE5hbWVzcGFjZSAo Wk5TKSBDb21tYW5kIFNldApzcGVjaWZpY2F0aW9uLiBUaGUgem9uZSBjYXBhY2l0eSBkZWZhdWx0 cyB0byB0aGUgem9uZSBzaXplIGlmIG5vdApzcGVjaWZpZWQgYW5kIG11c3QgYmUgc21hbGxlciB0 aGFuIHRoZSB6b25lIHNpemUgb3RoZXJ3aXNlLgoKUmV2aWV3ZWQtYnk6IENoYWl0YW55YSBLdWxr YXJuaSA8Y2hhaXRhbnlhLmt1bGthcm5pQHdkYy5jb20+ClJldmlld2VkLWJ5OiBNYXRpYXMgQmrD uHJsaW5nIDxtYXRpYXMuYmpvcmxpbmdAd2RjLmNvbT4KUmV2aWV3ZWQtYnk6IERhbmllbCBXYWdu ZXIgPGR3YWduZXJAc3VzZS5kZT4KUmV2aWV3ZWQtYnk6IE1hcnRpbiBLLiBQZXRlcnNlbiA8bWFy dGluLnBldGVyc2VuQG9yYWNsZS5jb20+ClJldmlld2VkLWJ5OiBKb2hhbm5lcyBUaHVtc2hpcm4g PGpvaGFubmVzLnRodW1zaGlybkB3ZGMuY29tPgpSZXZpZXdlZC1ieTogSGFubmVzIFJlaW5lY2tl IDxoYXJlQHN1c2UuZGU+ClNpZ25lZC1vZmYtYnk6IEFyYXZpbmQgUmFtZXNoIDxhcmF2aW5kLnJh bWVzaEB3ZGMuY29tPgotLS0KIGRyaXZlcnMvYmxvY2svbnVsbF9ibGsuaCAgICAgICB8ICAxICsK IGRyaXZlcnMvYmxvY2svbnVsbF9ibGtfbWFpbi5jICB8IDEwICsrKysrKysrKy0KIGRyaXZlcnMv YmxvY2svbnVsbF9ibGtfem9uZWQuYyB8IDE2ICsrKysrKysrKysrKysrLS0KIDMgZmlsZXMgY2hh bmdlZCwgMjQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2Jsb2NrL251bGxfYmxrLmggYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrLmgKaW5kZXggODFi MzExYzlkNzgxLi5kYWVkNGE5YzM0MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbnVsbF9i bGsuaAorKysgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgc3Ry dWN0IG51bGxiX2RldmljZSB7CiAJdW5zaWduZWQgbG9uZyBjb21wbGV0aW9uX25zZWM7IC8qIHRp bWUgaW4gbnMgdG8gY29tcGxldGUgYSByZXF1ZXN0ICovCiAJdW5zaWduZWQgbG9uZyBjYWNoZV9z aXplOyAvKiBkaXNrIGNhY2hlIHNpemUgaW4gTUIgKi8KIAl1bnNpZ25lZCBsb25nIHpvbmVfc2l6 ZTsgLyogem9uZSBzaXplIGluIE1CIGlmIGRldmljZSBpcyB6b25lZCAqLworCXVuc2lnbmVkIGxv bmcgem9uZV9jYXBhY2l0eTsgLyogem9uZSBjYXBhY2l0eSBpbiBNQiBpZiBkZXZpY2UgaXMgem9u ZWQgKi8KIAl1bnNpZ25lZCBpbnQgem9uZV9ucl9jb252OyAvKiBudW1iZXIgb2YgY29udmVudGlv bmFsIHpvbmVzICovCiAJdW5zaWduZWQgaW50IHN1Ym1pdF9xdWV1ZXM7IC8qIG51bWJlciBvZiBz dWJtaXNzaW9uIHF1ZXVlcyAqLwogCXVuc2lnbmVkIGludCBob21lX25vZGU7IC8qIGhvbWUgbm9k ZSBmb3IgdGhlIGRldmljZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9udWxsX2Jsa19t YWluLmMgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrX21haW4uYwppbmRleCA4MjI1OTI0MmI5YjUu Ljk2ZDFhZGY2YjgxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9udWxsX2Jsa19tYWluLmMK KysrIGIvZHJpdmVycy9ibG9jay9udWxsX2Jsa19tYWluLmMKQEAgLTIwMCw2ICsyMDAsMTAgQEAg c3RhdGljIHVuc2lnbmVkIGxvbmcgZ196b25lX3NpemUgPSAyNTY7CiBtb2R1bGVfcGFyYW1fbmFt ZWQoem9uZV9zaXplLCBnX3pvbmVfc2l6ZSwgdWxvbmcsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1f REVTQyh6b25lX3NpemUsICJab25lIHNpemUgaW4gTUIgd2hlbiBibG9jayBkZXZpY2UgaXMgem9u ZWQuIE11c3QgYmUgcG93ZXItb2YtdHdvOiBEZWZhdWx0OiAyNTYiKTsKIAorc3RhdGljIHVuc2ln bmVkIGxvbmcgZ196b25lX2NhcGFjaXR5OworbW9kdWxlX3BhcmFtX25hbWVkKHpvbmVfY2FwYWNp dHksIGdfem9uZV9jYXBhY2l0eSwgdWxvbmcsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyh6b25l X2NhcGFjaXR5LCAiWm9uZSBjYXBhY2l0eSBpbiBNQiB3aGVuIGJsb2NrIGRldmljZSBpcyB6b25l ZC4gQ2FuIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6b25lIHNpemUuIERlZmF1bHQ6IFpvbmUg c2l6ZSIpOworCiBzdGF0aWMgdW5zaWduZWQgaW50IGdfem9uZV9ucl9jb252OwogbW9kdWxlX3Bh cmFtX25hbWVkKHpvbmVfbnJfY29udiwgZ196b25lX25yX2NvbnYsIHVpbnQsIDA0NDQpOwogTU9E VUxFX1BBUk1fREVTQyh6b25lX25yX2NvbnYsICJOdW1iZXIgb2YgY29udmVudGlvbmFsIHpvbmVz IHdoZW4gYmxvY2sgZGV2aWNlIGlzIHpvbmVkLiBEZWZhdWx0OiAwIik7CkBAIC0zNDEsNiArMzQ1 LDcgQEAgTlVMTEJfREVWSUNFX0FUVFIobWJwcywgdWludCwgTlVMTCk7CiBOVUxMQl9ERVZJQ0Vf QVRUUihjYWNoZV9zaXplLCB1bG9uZywgTlVMTCk7CiBOVUxMQl9ERVZJQ0VfQVRUUih6b25lZCwg Ym9vbCwgTlVMTCk7CiBOVUxMQl9ERVZJQ0VfQVRUUih6b25lX3NpemUsIHVsb25nLCBOVUxMKTsK K05VTExCX0RFVklDRV9BVFRSKHpvbmVfY2FwYWNpdHksIHVsb25nLCBOVUxMKTsKIE5VTExCX0RF VklDRV9BVFRSKHpvbmVfbnJfY29udiwgdWludCwgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90IG51 bGxiX2RldmljZV9wb3dlcl9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqcGFn ZSkKQEAgLTQ1Nyw2ICs0NjIsNyBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAq bnVsbGJfZGV2aWNlX2F0dHJzW10gPSB7CiAJJm51bGxiX2RldmljZV9hdHRyX2JhZGJsb2NrcywK IAkmbnVsbGJfZGV2aWNlX2F0dHJfem9uZWQsCiAJJm51bGxiX2RldmljZV9hdHRyX3pvbmVfc2l6 ZSwKKwkmbnVsbGJfZGV2aWNlX2F0dHJfem9uZV9jYXBhY2l0eSwKIAkmbnVsbGJfZGV2aWNlX2F0 dHJfem9uZV9ucl9jb252LAogCU5VTEwsCiB9OwpAQCAtNTEwLDcgKzUxNiw4IEBAIG51bGxiX2dy b3VwX2Ryb3BfaXRlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwgc3RydWN0IGNvbmZpZ19p dGVtICppdGVtKQogCiBzdGF0aWMgc3NpemVfdCBtZW1iX2dyb3VwX2ZlYXR1cmVzX3Nob3coc3Ry dWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpwYWdlKQogewotCXJldHVybiBzbnByaW50Zihw YWdlLCBQQUdFX1NJWkUsICJtZW1vcnlfYmFja2VkLGRpc2NhcmQsYmFuZHdpZHRoLGNhY2hlLGJh ZGJsb2Nrcyx6b25lZCx6b25lX3NpemUsem9uZV9ucl9jb252XG4iKTsKKwlyZXR1cm4gc25wcmlu dGYocGFnZSwgUEFHRV9TSVpFLAorCQkJIm1lbW9yeV9iYWNrZWQsZGlzY2FyZCxiYW5kd2lkdGgs Y2FjaGUsYmFkYmxvY2tzLHpvbmVkLHpvbmVfc2l6ZSx6b25lX2NhcGFjaXR5LHpvbmVfbnJfY29u dlxuIik7CiB9CiAKIENPTkZJR0ZTX0FUVFJfUk8obWVtYl9ncm91cF8sIGZlYXR1cmVzKTsKQEAg LTU3MSw2ICs1NzgsNyBAQCBzdGF0aWMgc3RydWN0IG51bGxiX2RldmljZSAqbnVsbF9hbGxvY19k ZXYodm9pZCkKIAlkZXYtPnVzZV9wZXJfbm9kZV9oY3R4ID0gZ191c2VfcGVyX25vZGVfaGN0eDsK IAlkZXYtPnpvbmVkID0gZ196b25lZDsKIAlkZXYtPnpvbmVfc2l6ZSA9IGdfem9uZV9zaXplOwor CWRldi0+em9uZV9jYXBhY2l0eSA9IGdfem9uZV9jYXBhY2l0eTsKIAlkZXYtPnpvbmVfbnJfY29u diA9IGdfem9uZV9ucl9jb252OwogCXJldHVybiBkZXY7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2Jsb2NrL251bGxfYmxrX3pvbmVkLmMgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrX3pvbmVkLmMK aW5kZXggNjI0YWFjMDliMDA1Li4zZDI1YzlhZDIzODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxv Y2svbnVsbF9ibGtfem9uZWQuYworKysgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrX3pvbmVkLmMK QEAgLTI4LDYgKzI4LDE1IEBAIGludCBudWxsX2luaXRfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9k ZXZpY2UgKmRldiwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiAJCXJldHVybiAtRUlOVkFMOwog CX0KIAorCWlmICghZGV2LT56b25lX2NhcGFjaXR5KQorCQlkZXYtPnpvbmVfY2FwYWNpdHkgPSBk ZXYtPnpvbmVfc2l6ZTsKKworCWlmIChkZXYtPnpvbmVfY2FwYWNpdHkgPiBkZXYtPnpvbmVfc2l6 ZSkgeworCQlwcl9lcnIoIm51bGxfYmxrOiB6b25lIGNhcGFjaXR5ICglbHUgTUIpIGxhcmdlciB0 aGFuIHpvbmUgc2l6ZSAoJWx1IE1CKVxuIiwKKwkJCQkJZGV2LT56b25lX2NhcGFjaXR5LCBkZXYt PnpvbmVfc2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWRldi0+em9uZV9zaXplX3Nl Y3RzID0gZGV2LT56b25lX3NpemUgPDwgWk9ORV9TSVpFX1NISUZUOwogCWRldi0+bnJfem9uZXMg PSBkZXZfc2l6ZSA+PgogCQkJCShTRUNUT1JfU0hJRlQgKyBpbG9nMihkZXYtPnpvbmVfc2l6ZV9z ZWN0cykpOwpAQCAtNjAsNyArNjksNyBAQCBpbnQgbnVsbF9pbml0X3pvbmVkX2RldihzdHJ1Y3Qg bnVsbGJfZGV2aWNlICpkZXYsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogCiAJCXpvbmUtPnN0 YXJ0ID0gem9uZS0+d3AgPSBzZWN0b3I7CiAJCXpvbmUtPmxlbiA9IGRldi0+em9uZV9zaXplX3Nl Y3RzOwotCQl6b25lLT5jYXBhY2l0eSA9IHpvbmUtPmxlbjsKKwkJem9uZS0+Y2FwYWNpdHkgPSBk ZXYtPnpvbmVfY2FwYWNpdHkgPDwgWk9ORV9TSVpFX1NISUZUOwogCQl6b25lLT50eXBlID0gQkxL X1pPTkVfVFlQRV9TRVFXUklURV9SRVE7CiAJCXpvbmUtPmNvbmQgPSBCTEtfWk9ORV9DT05EX0VN UFRZOwogCkBAIC0xODcsNiArMTk2LDkgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudWxsX3pvbmVf d3JpdGUoc3RydWN0IG51bGxiX2NtZCAqY21kLCBzZWN0b3JfdCBzZWN0b3IsCiAJCQlyZXR1cm4g QkxLX1NUU19JT0VSUjsKIAkJfQogCisJCWlmICh6b25lLT53cCArIG5yX3NlY3RvcnMgPiB6b25l LT5zdGFydCArIHpvbmUtPmNhcGFjaXR5KQorCQkJcmV0dXJuIEJMS19TVFNfSU9FUlI7CisKIAkJ aWYgKHpvbmUtPmNvbmQgIT0gQkxLX1pPTkVfQ09ORF9FWFBfT1BFTikKIAkJCXpvbmUtPmNvbmQg PSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOOwogCkBAIC0xOTUsNyArMjA3LDcgQEAgc3RhdGljIGJs a19zdGF0dXNfdCBudWxsX3pvbmVfd3JpdGUoc3RydWN0IG51bGxiX2NtZCAqY21kLCBzZWN0b3Jf dCBzZWN0b3IsCiAJCQlyZXR1cm4gcmV0OwogCiAJCXpvbmUtPndwICs9IG5yX3NlY3RvcnM7Ci0J CWlmICh6b25lLT53cCA9PSB6b25lLT5zdGFydCArIHpvbmUtPmxlbikKKwkJaWYgKHpvbmUtPndw ID09IHpvbmUtPnN0YXJ0ICsgem9uZS0+Y2FwYWNpdHkpCiAJCQl6b25lLT5jb25kID0gQkxLX1pP TkVfQ09ORF9GVUxMOwogCQlyZXR1cm4gQkxLX1NUU19PSzsKIAlkZWZhdWx0OgotLSAKMi4yNC4x CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgt bnZtZSBtYWlsaW5nIGxpc3QKTGludXgtbnZtZUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9s aXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbnZtZQo=