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=-7.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 F3822C433E1 for ; Thu, 25 Jun 2020 19:42:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BA40920789 for ; Thu, 25 Jun 2020 19:42:52 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=javigon-com.20150623.gappssmtp.com header.i=@javigon-com.20150623.gappssmtp.com header.b="l9yRZIal" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2406598AbgFYTmw (ORCPT ); Thu, 25 Jun 2020 15:42:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39056 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2406069AbgFYTmv (ORCPT ); Thu, 25 Jun 2020 15:42:51 -0400 Received: from mail-ej1-x644.google.com (mail-ej1-x644.google.com [IPv6:2a00:1450:4864:20::644]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5B7F2C08C5C1 for ; Thu, 25 Jun 2020 12:42:51 -0700 (PDT) Received: by mail-ej1-x644.google.com with SMTP id w6so7124594ejq.6 for ; Thu, 25 Jun 2020 12:42:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=javigon-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=Yft3YI9mBWfaLsELFbWHBv0KtTLiopcEBpffEnb0D8g=; b=l9yRZIalqardlDkc/v27K/tlH6zzyFCw/j+2sSzKKoJbrOWJIdzaD684hnyGxeo+0e g6PJTRlLLrsSNLPRj3rwX4FkM6LJSL8c3mpvbNx+CLXsFkjfznG72tH4DxBBM+qkPkcP fc3bb+ns0iy79HsHCniYO0QEsMbK/DWw6pWnCrTMM1Y8bP8KDh2W7X9arfs7dMNLP8MX H21MJUsEKV0OZTJWaFu0Hh+KXILrhM1j7x67ybXK4EoJo4AGTR7f3JnsAe/gjtawDOAH AB+uRQDVmhrdoQEVYuKasBFT3cGs4Vgl4iTja00ugursqwcAfrWLZJ9b0TC/8wBOTuqY EVhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=Yft3YI9mBWfaLsELFbWHBv0KtTLiopcEBpffEnb0D8g=; b=sgUEtUSSB9iTEvJBHodtoFWslE16+azwkx5Qa9yv1H/Cu5/Xj6E3G6Ec8r0EAPQNw4 JNQWSZ0bpiHQmAdUQnM16dhzXNPsyDLjDyAvgsE1Lx/6mH6USvZNosVsWdxQ2prHUymD rzlfqZrp8u5VZaGRzUh2wweK4Z9fpFXsRiMjxWDReU7td+Rsg3RgZc+sb9wbgtlsCjL1 WI+wY2QtdjAuiUjMr34wyGHtuVXwpsAGIvah8jwSdU0X/R8/+TX3dOuKsqQMfvWorHMJ BpLtnLdCyruzsdgV+sNI5PfiySB2O39ImO0GKNar//Obw+RSudiuBQ6/HyVugfn7MbNE qvfw== X-Gm-Message-State: AOAM532Pp79FEn/Hk+9LCTX3qku/FxzLP7AtXmCBO5dFYO+L6ws4Np4J UmdAS/j2a0GfZEq4xPhvBTbH/Q== X-Google-Smtp-Source: ABdhPJwfb/iDPhf5JLWL9mbHNEu93iyxMyagK6uathkYyTPwLK1sPGUtMUOpCZJTJPK2jR2RO0O7kA== X-Received: by 2002:a17:906:4086:: with SMTP id u6mr14830730ejj.9.1593114170020; Thu, 25 Jun 2020 12:42:50 -0700 (PDT) Received: from localhost (ip-5-186-127-235.cgn.fibianet.dk. [5.186.127.235]) by smtp.gmail.com with ESMTPSA id cb6sm19045225edb.18.2020.06.25.12.42.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Jun 2020 12:42:49 -0700 (PDT) Date: Thu, 25 Jun 2020 21:42:48 +0200 From: Javier =?utf-8?B?R29uesOhbGV6?= To: Matias =?utf-8?B?QmrDuHJsaW5n?= Cc: linux-nvme@lists.infradead.org, linux-block@vger.kernel.org, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@kernel.dk, SelvaKumar S , Kanchan Joshi , Nitesh Shetty Subject: Re: [PATCH 4/6] block: introduce IOCTL to report dev properties Message-ID: <20200625194248.44rwwestffgz4jks@MacBook-Pro.localdomain> References: <20200625122152.17359-1-javier@javigon.com> <20200625122152.17359-5-javier@javigon.com> <6333b2f1-a4f1-166f-5e0d-03f47389458a@lightnvm.io> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <6333b2f1-a4f1-166f-5e0d-03f47389458a@lightnvm.io> Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org On 25.06.2020 15:10, Matias Bjørling wrote: >On 25/06/2020 14.21, Javier González wrote: >>From: Javier González >> >>With the addition of ZNS, a new set of properties have been added to the >>zoned block device. This patch introduces a new IOCTL to expose these >>rroperties to user space. >> >>Signed-off-by: Javier González >>Signed-off-by: SelvaKumar S >>Signed-off-by: Kanchan Joshi >>Signed-off-by: Nitesh Shetty >>--- >> block/blk-zoned.c | 46 ++++++++++++++++++++++++++ >> block/ioctl.c | 2 ++ >> drivers/nvme/host/core.c | 2 ++ >> drivers/nvme/host/nvme.h | 11 +++++++ >> drivers/nvme/host/zns.c | 61 +++++++++++++++++++++++++++++++++++ >> include/linux/blkdev.h | 9 ++++++ >> include/uapi/linux/blkzoned.h | 13 ++++++++ >> 7 files changed, 144 insertions(+) >> >>diff --git a/block/blk-zoned.c b/block/blk-zoned.c >>index 704fc15813d1..39ec72af9537 100644 >>--- a/block/blk-zoned.c >>+++ b/block/blk-zoned.c >>@@ -169,6 +169,17 @@ int blkdev_report_zones(struct block_device *bdev, sector_t sector, >> } >> EXPORT_SYMBOL_GPL(blkdev_report_zones); >>+static int blkdev_report_zonedev_prop(struct block_device *bdev, >>+ struct blk_zone_dev *zprop) >>+{ >>+ struct gendisk *disk = bdev->bd_disk; >>+ >>+ if (WARN_ON_ONCE(!bdev->bd_disk->fops->report_zone_p)) >>+ return -EOPNOTSUPP; >>+ >>+ return disk->fops->report_zone_p(disk, zprop); >>+} >>+ >> static inline bool blkdev_allow_reset_all_zones(struct block_device *bdev, >> sector_t sector, >> sector_t nr_sectors) >>@@ -430,6 +441,41 @@ int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, >> GFP_KERNEL); >> } >>+int blkdev_zonedev_prop(struct block_device *bdev, fmode_t mode, >>+ unsigned int cmd, unsigned long arg) >>+{ >>+ void __user *argp = (void __user *)arg; >>+ struct request_queue *q; >>+ struct blk_zone_dev zprop; >>+ int ret; >>+ >>+ if (!argp) >>+ return -EINVAL; >>+ >>+ q = bdev_get_queue(bdev); >>+ if (!q) >>+ return -ENXIO; >>+ >>+ if (!blk_queue_is_zoned(q)) >>+ return -ENOTTY; >>+ >>+ if (!capable(CAP_SYS_ADMIN)) >>+ return -EACCES; >>+ >>+ if (!(mode & FMODE_WRITE)) >>+ return -EBADF; >>+ >>+ ret = blkdev_report_zonedev_prop(bdev, &zprop); >>+ if (ret) >>+ goto out; >>+ >>+ if (copy_to_user(argp, &zprop, sizeof(struct blk_zone_dev))) >>+ return -EFAULT; >>+ >>+out: >>+ return ret; >>+} >>+ >> static inline unsigned long *blk_alloc_zone_bitmap(int node, >> unsigned int nr_zones) >> { >>diff --git a/block/ioctl.c b/block/ioctl.c >>index 0ea29754e7dd..f7b4e0f2dd4c 100644 >>--- a/block/ioctl.c >>+++ b/block/ioctl.c >>@@ -517,6 +517,8 @@ static int blkdev_common_ioctl(struct block_device *bdev, fmode_t mode, >> return blkdev_zone_ops_ioctl(bdev, mode, cmd, arg); >> case BLKMGMTZONE: >> return blkdev_zone_mgmt_ioctl(bdev, mode, cmd, arg); >>+ case BLKZONEDEVPROP: >>+ return blkdev_zonedev_prop(bdev, mode, cmd, arg); >> case BLKGETZONESZ: >> return put_uint(argp, bdev_zone_sectors(bdev)); >> case BLKGETNRZONES: >>diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c >>index 5b95c81d2a2d..a32c909a915f 100644 >>--- a/drivers/nvme/host/core.c >>+++ b/drivers/nvme/host/core.c >>@@ -2254,6 +2254,7 @@ static const struct block_device_operations nvme_fops = { >> .getgeo = nvme_getgeo, >> .revalidate_disk= nvme_revalidate_disk, >> .report_zones = nvme_report_zones, >>+ .report_zone_p = nvme_report_zone_prop, >> .pr_ops = &nvme_pr_ops, >> }; >>@@ -2280,6 +2281,7 @@ const struct block_device_operations nvme_ns_head_ops = { >> .compat_ioctl = nvme_compat_ioctl, >> .getgeo = nvme_getgeo, >> .report_zones = nvme_report_zones, >>+ .report_zone_p = nvme_report_zone_prop, >> .pr_ops = &nvme_pr_ops, >> }; >> #endif /* CONFIG_NVME_MULTIPATH */ >>diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h >>index ecf443efdf91..172e0531f37f 100644 >>--- a/drivers/nvme/host/nvme.h >>+++ b/drivers/nvme/host/nvme.h >>@@ -407,6 +407,14 @@ struct nvme_ns { >> u8 pi_type; >> #ifdef CONFIG_BLK_DEV_ZONED >> u64 zsze; >>+ >>+ u32 nr_zones; >>+ u32 mar; >>+ u32 mor; >>+ u32 rrl; >>+ u32 frl; >>+ u16 zoc; >>+ u16 ozcs; >> #endif >> unsigned long features; >> unsigned long flags; >>@@ -704,11 +712,14 @@ int nvme_update_zone_info(struct gendisk *disk, struct nvme_ns *ns, >> int nvme_report_zones(struct gendisk *disk, sector_t sector, >> unsigned int nr_zones, report_zones_cb cb, void *data); >>+int nvme_report_zone_prop(struct gendisk *disk, struct blk_zone_dev *zprop); >>+ >> blk_status_t nvme_setup_zone_mgmt_send(struct nvme_ns *ns, struct request *req, >> struct nvme_command *cmnd, >> enum nvme_zone_mgmt_action action); >> #else >> #define nvme_report_zones NULL >>+#define nvme_report_zone_prop NULL >> static inline blk_status_t nvme_setup_zone_mgmt_send(struct nvme_ns *ns, >> struct request *req, struct nvme_command *cmnd, >>diff --git a/drivers/nvme/host/zns.c b/drivers/nvme/host/zns.c >>index 2e6512ac6f01..258d03610cc0 100644 >>--- a/drivers/nvme/host/zns.c >>+++ b/drivers/nvme/host/zns.c >>@@ -32,6 +32,28 @@ static int nvme_set_max_append(struct nvme_ctrl *ctrl) >> return 0; >> } >>+static u64 nvme_zns_nr_zones(struct nvme_ns *ns) >>+{ >>+ struct nvme_command c = { }; >>+ struct nvme_zone_report report; >>+ int buflen = sizeof(struct nvme_zone_report); >>+ int ret; >>+ >>+ c.zmr.opcode = nvme_cmd_zone_mgmt_recv; >>+ c.zmr.nsid = cpu_to_le32(ns->head->ns_id); >>+ c.zmr.slba = cpu_to_le64(0); >>+ c.zmr.numd = cpu_to_le32(nvme_bytes_to_numd(buflen)); >>+ c.zmr.zra = NVME_ZRA_ZONE_REPORT; >>+ c.zmr.zrasf = NVME_ZRASF_ZONE_REPORT_ALL; >>+ c.zmr.pr = 0; >>+ >>+ ret = nvme_submit_sync_cmd(ns->queue, &c, &report, buflen); >>+ if (ret) >>+ return ret; >>+ >>+ return le64_to_cpu(report.nr_zones); >>+} >>+ >> int nvme_update_zone_info(struct gendisk *disk, struct nvme_ns *ns, >> unsigned lbaf) >> { >>@@ -87,6 +109,13 @@ int nvme_update_zone_info(struct gendisk *disk, struct nvme_ns *ns, >> goto free_data; >> } >>+ ns->nr_zones = nvme_zns_nr_zones(ns); >>+ ns->mar = le32_to_cpu(id->mar); >>+ ns->mor = le32_to_cpu(id->mor); >>+ ns->rrl = le32_to_cpu(id->rrl); >>+ ns->frl = le32_to_cpu(id->frl); >>+ ns->zoc = le16_to_cpu(id->zoc); >>+ >> q->limits.zoned = BLK_ZONED_HM; >> blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, q); >> free_data: >>@@ -230,6 +259,38 @@ int nvme_report_zones(struct gendisk *disk, sector_t sector, >> return ret; >> } >>+static int nvme_ns_report_zone_prop(struct nvme_ns *ns, struct blk_zone_dev *zprop) >>+{ >>+ zprop->nr_zones = ns->nr_zones; >>+ zprop->zoc = ns->zoc; >>+ zprop->ozcs = ns->ozcs; >>+ zprop->mar = ns->mar; >>+ zprop->mor = ns->mor; >>+ zprop->rrl = ns->rrl; >>+ zprop->frl = ns->frl; >>+ >>+ return 0; >>+} >>+ >>+int nvme_report_zone_prop(struct gendisk *disk, struct blk_zone_dev *zprop) >>+{ >>+ struct nvme_ns_head *head = NULL; >>+ struct nvme_ns *ns; >>+ int srcu_idx, ret; >>+ >>+ ns = nvme_get_ns_from_disk(disk, &head, &srcu_idx); >>+ if (unlikely(!ns)) >>+ return -EWOULDBLOCK; >>+ >>+ if (ns->head->ids.csi == NVME_CSI_ZNS) >>+ ret = nvme_ns_report_zone_prop(ns, zprop); >>+ else >>+ ret = -EINVAL; >>+ nvme_put_ns_from_disk(head, srcu_idx); >>+ >>+ return ret; >>+} >>+ >> blk_status_t nvme_setup_zone_mgmt_send(struct nvme_ns *ns, struct request *req, >> struct nvme_command *c, enum nvme_zone_mgmt_action action) >> { >>diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h >>index 8308d8a3720b..0c0faa58b7f4 100644 >>--- a/include/linux/blkdev.h >>+++ b/include/linux/blkdev.h >>@@ -372,6 +372,8 @@ extern int blkdev_zone_ops_ioctl(struct block_device *bdev, fmode_t mode, >> unsigned int cmd, unsigned long arg); >> extern int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, >> unsigned int cmd, unsigned long arg); >>+extern int blkdev_zonedev_prop(struct block_device *bdev, fmode_t mode, >>+ unsigned int cmd, unsigned long arg); >> #else /* CONFIG_BLK_DEV_ZONED */ >> static inline unsigned int blkdev_nr_zones(struct gendisk *disk) >>@@ -400,6 +402,12 @@ static inline int blkdev_zone_mgmt_ioctl(struct block_device *bdev, >> return -ENOTTY; >> } >>+static inline int blkdev_zonedev_prop(struct block_device *bdev, fmode_t mode, >>+ unsigned int cmd, unsigned long arg) >>+{ >>+ return -ENOTTY; >>+} >>+ >> #endif /* CONFIG_BLK_DEV_ZONED */ >> struct request_queue { >>@@ -1770,6 +1778,7 @@ struct block_device_operations { >> int (*report_zones)(struct gendisk *, sector_t sector, >> unsigned int nr_zones, report_zones_cb cb, void *data); >> char *(*devnode)(struct gendisk *disk, umode_t *mode); >>+ int (*report_zone_p)(struct gendisk *disk, struct blk_zone_dev *zprop); >> struct module *owner; >> const struct pr_ops *pr_ops; >> }; >>diff --git a/include/uapi/linux/blkzoned.h b/include/uapi/linux/blkzoned.h >>index d0978ee10fc7..0c49a4b2ce5d 100644 >>--- a/include/uapi/linux/blkzoned.h >>+++ b/include/uapi/linux/blkzoned.h >>@@ -142,6 +142,18 @@ struct blk_zone_range { >> __u64 nr_sectors; >> }; >>+struct blk_zone_dev { >>+ __u32 nr_zones; >>+ __u32 mar; >>+ __u32 mor; >>+ __u32 rrl; >>+ __u32 frl; >>+ __u16 zoc; >>+ __u16 ozcs; >>+ __u32 rsv31[2]; >>+ __u64 rsv63[4]; >>+}; >>+ >> /** >> * enum blk_zone_action - Zone state transitions managed from user-space >> * >>@@ -209,5 +221,6 @@ struct blk_zone_mgmt { >> #define BLKCLOSEZONE _IOW(0x12, 135, struct blk_zone_range) >> #define BLKFINISHZONE _IOW(0x12, 136, struct blk_zone_range) >> #define BLKMGMTZONE _IOR(0x12, 137, struct blk_zone_mgmt) >>+#define BLKZONEDEVPROP _IOR(0x12, 138, struct blk_zone_dev) >> #endif /* _UAPI_BLKZONED_H */ > >Nak. These properties can already be retrieved using the nvme ioctl >passthru command and support have also been added to nvme-cli. > These properties are intended to be consumed by an application, so nvme-cli is of not much use. I would also like to avoid sysfs variables. We can use nvme passthru, but this bypasses the zoned block abstraction. Why not representing ZNS features in the standard zoned block API? I am happy to iterate on the actual implementation if you have feedback. Javier 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=-7.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS 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 12710C433DF for ; Fri, 26 Jun 2020 10:55:51 +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 C1C70206DD for ; Fri, 26 Jun 2020 10:55:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Ko0SGKoJ"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=javigon-com.20150623.gappssmtp.com header.i=@javigon-com.20150623.gappssmtp.com header.b="l9yRZIal" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C1C70206DD Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=javigon.com 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-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=xe8mwS8KzAU+Ed6Yx6/mL/5JiQDSRZsHZz83r1wxJCo=; b=Ko0SGKoJdeSotG/w6FNnorLo2 mdVAZggyQ1Wkfv9I+4vAEXG7twyRNUC3gYNH5hHn7lboHB7U95sVmI7cP3qmEcR0N2vQA17CYPweB lEX0N9O60XlqYiGv+puCgdlcy+ujW7PpZGFiGIVXac7TZxCfYL01ytd8RIK0zIbbkkeMuJRGDBkwr cXYqiHB1mxjI4GYnQ7Jf44XQyy/72XyI6fDVA43YmFWZ3H4Ie2nWnnC62WIZYHJw3NQxhHm2in8tv jG5TBSESmlAkEF/dk7vJLVxhymOUN+KAfpfDzj6rf+0pCtFnDrkNhoVXtaMdg7eLgulWeMaY6rYxW ZgI6DCTWw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jom1K-00080C-Hk; Fri, 26 Jun 2020 10:55:46 +0000 Received: from mail-ej1-x641.google.com ([2a00:1450:4864:20::641]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jom15-0007tk-N7 for linux-nvme@lists.infradead.org; Fri, 26 Jun 2020 10:55:43 +0000 Received: by mail-ej1-x641.google.com with SMTP id i14so8915430ejr.9 for ; Fri, 26 Jun 2020 03:55:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=javigon-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=Yft3YI9mBWfaLsELFbWHBv0KtTLiopcEBpffEnb0D8g=; b=l9yRZIalqardlDkc/v27K/tlH6zzyFCw/j+2sSzKKoJbrOWJIdzaD684hnyGxeo+0e g6PJTRlLLrsSNLPRj3rwX4FkM6LJSL8c3mpvbNx+CLXsFkjfznG72tH4DxBBM+qkPkcP fc3bb+ns0iy79HsHCniYO0QEsMbK/DWw6pWnCrTMM1Y8bP8KDh2W7X9arfs7dMNLP8MX H21MJUsEKV0OZTJWaFu0Hh+KXILrhM1j7x67ybXK4EoJo4AGTR7f3JnsAe/gjtawDOAH AB+uRQDVmhrdoQEVYuKasBFT3cGs4Vgl4iTja00ugursqwcAfrWLZJ9b0TC/8wBOTuqY EVhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=Yft3YI9mBWfaLsELFbWHBv0KtTLiopcEBpffEnb0D8g=; b=hdeEc4zwZlXDu9a5nX0FvOWt3CYVl3vHCbwtfwgo9mtcswIrnSf/6jXfZi4IwOArur kpKfE7tv2TRcmaiM3yGXVH6TGvZQO/ocXb8REfcgJpU7eC+pTwk89Q0CrSvh00bZugl5 VD8CwyMSsXf0V0ufrQAAiULZepuRj5N5kxRH0VZgfdFpWSVFNkg+ST6hgj2FzpDIe9QQ oNKnNu+fKnO/9cj/aDR2kVZ4/QLtD5uj0qG2vvWkKTmho58Z/JRY/1wdlOaqgdSSfR4o PCyBf1iyEaWL43gx9GBcfnBlbOZQmsS4XKXTtrnJ0iexl6RZutgnHKWN26ZYPryuYtke OnRA== X-Gm-Message-State: AOAM532uxB066O65gnOy38Rva7Lv4vYpU1eNszPsPJWvWLOpOoghZBns f9IFz6Tn/Q7+L9C4EzMyG0Jl+51wDcQXgekk X-Google-Smtp-Source: ABdhPJwfb/iDPhf5JLWL9mbHNEu93iyxMyagK6uathkYyTPwLK1sPGUtMUOpCZJTJPK2jR2RO0O7kA== X-Received: by 2002:a17:906:4086:: with SMTP id u6mr14830730ejj.9.1593114170020; Thu, 25 Jun 2020 12:42:50 -0700 (PDT) Received: from localhost (ip-5-186-127-235.cgn.fibianet.dk. [5.186.127.235]) by smtp.gmail.com with ESMTPSA id cb6sm19045225edb.18.2020.06.25.12.42.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Jun 2020 12:42:49 -0700 (PDT) Date: Thu, 25 Jun 2020 21:42:48 +0200 From: Javier =?utf-8?B?R29uesOhbGV6?= To: Matias =?utf-8?B?QmrDuHJsaW5n?= Subject: Re: [PATCH 4/6] block: introduce IOCTL to report dev properties Message-ID: <20200625194248.44rwwestffgz4jks@MacBook-Pro.localdomain> References: <20200625122152.17359-1-javier@javigon.com> <20200625122152.17359-5-javier@javigon.com> <6333b2f1-a4f1-166f-5e0d-03f47389458a@lightnvm.io> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <6333b2f1-a4f1-166f-5e0d-03f47389458a@lightnvm.io> 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, SelvaKumar S , sagi@grimberg.me, Kanchan Joshi , linux-nvme@lists.infradead.org, Nitesh Shetty , linux-block@vger.kernel.org, kbusch@kernel.org, hch@lst.de Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-nvme" Errors-To: linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org T24gMjUuMDYuMjAyMCAxNToxMCwgTWF0aWFzIEJqw7hybGluZyB3cm90ZToKPk9uIDI1LzA2LzIw MjAgMTQuMjEsIEphdmllciBHb256w6FsZXogd3JvdGU6Cj4+RnJvbTogSmF2aWVyIEdvbnrDoWxl eiA8amF2aWVyLmdvbnpAc2Ftc3VuZy5jb20+Cj4+Cj4+V2l0aCB0aGUgYWRkaXRpb24gb2YgWk5T LCBhIG5ldyBzZXQgb2YgcHJvcGVydGllcyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlCj4+em9uZWQg YmxvY2sgZGV2aWNlLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgSU9DVEwgdG8gZXhwb3Nl IHRoZXNlCj4+cnJvcGVydGllcyB0byB1c2VyIHNwYWNlLgo+Pgo+PlNpZ25lZC1vZmYtYnk6IEph dmllciBHb256w6FsZXogPGphdmllci5nb256QHNhbXN1bmcuY29tPgo+PlNpZ25lZC1vZmYtYnk6 IFNlbHZhS3VtYXIgUyA8c2VsdmFrdW1hLnMxQHNhbXN1bmcuY29tPgo+PlNpZ25lZC1vZmYtYnk6 IEthbmNoYW4gSm9zaGkgPGpvc2hpLmtAc2Ftc3VuZy5jb20+Cj4+U2lnbmVkLW9mZi1ieTogTml0 ZXNoIFNoZXR0eSA8bmouc2hldHR5QHNhbXN1bmcuY29tPgo+Pi0tLQo+PiAgYmxvY2svYmxrLXpv bmVkLmMgICAgICAgICAgICAgfCA0NiArKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiAgYmxv Y2svaW9jdGwuYyAgICAgICAgICAgICAgICAgfCAgMiArKwo+PiAgZHJpdmVycy9udm1lL2hvc3Qv Y29yZS5jICAgICAgfCAgMiArKwo+PiAgZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oICAgICAgfCAx MSArKysrKysrCj4+ICBkcml2ZXJzL252bWUvaG9zdC96bnMuYyAgICAgICB8IDYxICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+ICBpbmNsdWRlL2xpbnV4L2Jsa2Rldi5oICAg ICAgICB8ICA5ICsrKysrKwo+PiAgaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3pvbmVkLmggfCAxMyAr KysrKysrKwo+PiAgNyBmaWxlcyBjaGFuZ2VkLCAxNDQgaW5zZXJ0aW9ucygrKQo+Pgo+PmRpZmYg LS1naXQgYS9ibG9jay9ibGstem9uZWQuYyBiL2Jsb2NrL2Jsay16b25lZC5jCj4+aW5kZXggNzA0 ZmMxNTgxM2QxLi4zOWVjNzJhZjk1MzcgMTAwNjQ0Cj4+LS0tIGEvYmxvY2svYmxrLXpvbmVkLmMK Pj4rKysgYi9ibG9jay9ibGstem9uZWQuYwo+PkBAIC0xNjksNiArMTY5LDE3IEBAIGludCBibGtk ZXZfcmVwb3J0X3pvbmVzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3Rv ciwKPj4gIH0KPj4gIEVYUE9SVF9TWU1CT0xfR1BMKGJsa2Rldl9yZXBvcnRfem9uZXMpOwo+Pitz dGF0aWMgaW50IGJsa2Rldl9yZXBvcnRfem9uZWRldl9wcm9wKHN0cnVjdCBibG9ja19kZXZpY2Ug KmJkZXYsCj4+KwkJCQkgICAgICBzdHJ1Y3QgYmxrX3pvbmVfZGV2ICp6cHJvcCkKPj4rewo+PisJ c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOwo+PisKPj4rCWlmIChXQVJOX09O X09OQ0UoIWJkZXYtPmJkX2Rpc2stPmZvcHMtPnJlcG9ydF96b25lX3ApKQo+PisJCXJldHVybiAt RU9QTk9UU1VQUDsKPj4rCj4+KwlyZXR1cm4gZGlzay0+Zm9wcy0+cmVwb3J0X3pvbmVfcChkaXNr LCB6cHJvcCk7Cj4+K30KPj4rCj4+ICBzdGF0aWMgaW5saW5lIGJvb2wgYmxrZGV2X2FsbG93X3Jl c2V0X2FsbF96b25lcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAo+PiAgCQkJCQkJc2VjdG9y X3Qgc2VjdG9yLAo+PiAgCQkJCQkJc2VjdG9yX3QgbnJfc2VjdG9ycykKPj5AQCAtNDMwLDYgKzQ0 MSw0MSBAQCBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpi ZGV2LCBmbW9kZV90IG1vZGUsCj4+ICAJCQkJR0ZQX0tFUk5FTCk7Cj4+ICB9Cj4+K2ludCBibGtk ZXZfem9uZWRldl9wcm9wKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwK Pj4rCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCj4+K3sKPj4rCXZvaWQg X191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwo+PisJc3RydWN0IHJlcXVlc3RfcXVl dWUgKnE7Cj4+KwlzdHJ1Y3QgYmxrX3pvbmVfZGV2IHpwcm9wOwo+PisJaW50IHJldDsKPj4rCj4+ KwlpZiAoIWFyZ3ApCj4+KwkJcmV0dXJuIC1FSU5WQUw7Cj4+Kwo+PisJcSA9IGJkZXZfZ2V0X3F1 ZXVlKGJkZXYpOwo+PisJaWYgKCFxKQo+PisJCXJldHVybiAtRU5YSU87Cj4+Kwo+PisJaWYgKCFi bGtfcXVldWVfaXNfem9uZWQocSkpCj4+KwkJcmV0dXJuIC1FTk9UVFk7Cj4+Kwo+PisJaWYgKCFj YXBhYmxlKENBUF9TWVNfQURNSU4pKQo+PisJCXJldHVybiAtRUFDQ0VTOwo+PisKPj4rCWlmICgh KG1vZGUgJiBGTU9ERV9XUklURSkpCj4+KwkJcmV0dXJuIC1FQkFERjsKPj4rCj4+KwlyZXQgPSBi bGtkZXZfcmVwb3J0X3pvbmVkZXZfcHJvcChiZGV2LCAmenByb3ApOwo+PisJaWYgKHJldCkKPj4r CQlnb3RvIG91dDsKPj4rCj4+KwlpZiAoY29weV90b191c2VyKGFyZ3AsICZ6cHJvcCwgc2l6ZW9m KHN0cnVjdCBibGtfem9uZV9kZXYpKSkKPj4rCQlyZXR1cm4gLUVGQVVMVDsKPj4rCj4+K291dDoK Pj4rCXJldHVybiByZXQ7Cj4+K30KPj4rCj4+ICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcg KmJsa19hbGxvY196b25lX2JpdG1hcChpbnQgbm9kZSwKPj4gIAkJCQkJCSAgIHVuc2lnbmVkIGlu dCBucl96b25lcykKPj4gIHsKPj5kaWZmIC0tZ2l0IGEvYmxvY2svaW9jdGwuYyBiL2Jsb2NrL2lv Y3RsLmMKPj5pbmRleCAwZWEyOTc1NGU3ZGQuLmY3YjRlMGYyZGQ0YyAxMDA2NDQKPj4tLS0gYS9i bG9jay9pb2N0bC5jCj4+KysrIGIvYmxvY2svaW9jdGwuYwo+PkBAIC01MTcsNiArNTE3LDggQEAg c3RhdGljIGludCBibGtkZXZfY29tbW9uX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYs IGZtb2RlX3QgbW9kZSwKPj4gIAkJcmV0dXJuIGJsa2Rldl96b25lX29wc19pb2N0bChiZGV2LCBt b2RlLCBjbWQsIGFyZyk7Cj4+ICAJY2FzZSBCTEtNR01UWk9ORToKPj4gIAkJcmV0dXJuIGJsa2Rl dl96b25lX21nbXRfaW9jdGwoYmRldiwgbW9kZSwgY21kLCBhcmcpOwo+PisJY2FzZSBCTEtaT05F REVWUFJPUDoKPj4rCQlyZXR1cm4gYmxrZGV2X3pvbmVkZXZfcHJvcChiZGV2LCBtb2RlLCBjbWQs IGFyZyk7Cj4+ICAJY2FzZSBCTEtHRVRaT05FU1o6Cj4+ICAJCXJldHVybiBwdXRfdWludChhcmdw LCBiZGV2X3pvbmVfc2VjdG9ycyhiZGV2KSk7Cj4+ICAJY2FzZSBCTEtHRVROUlpPTkVTOgo+PmRp ZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9j b3JlLmMKPj5pbmRleCA1Yjk1YzgxZDJhMmQuLmEzMmM5MDlhOTE1ZiAxMDA2NDQKPj4tLS0gYS9k cml2ZXJzL252bWUvaG9zdC9jb3JlLmMKPj4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMK Pj5AQCAtMjI1NCw2ICsyMjU0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vf b3BlcmF0aW9ucyBudm1lX2ZvcHMgPSB7Cj4+ICAJLmdldGdlbwkJPSBudm1lX2dldGdlbywKPj4g IAkucmV2YWxpZGF0ZV9kaXNrPSBudm1lX3JldmFsaWRhdGVfZGlzaywKPj4gIAkucmVwb3J0X3pv bmVzCT0gbnZtZV9yZXBvcnRfem9uZXMsCj4+KwkucmVwb3J0X3pvbmVfcAk9IG52bWVfcmVwb3J0 X3pvbmVfcHJvcCwKPj4gIAkucHJfb3BzCQk9ICZudm1lX3ByX29wcywKPj4gIH07Cj4+QEAgLTIy ODAsNiArMjI4MSw3IEBAIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBudm1l X25zX2hlYWRfb3BzID0gewo+PiAgCS5jb21wYXRfaW9jdGwJPSBudm1lX2NvbXBhdF9pb2N0bCwK Pj4gIAkuZ2V0Z2VvCQk9IG52bWVfZ2V0Z2VvLAo+PiAgCS5yZXBvcnRfem9uZXMJPSBudm1lX3Jl cG9ydF96b25lcywKPj4rCS5yZXBvcnRfem9uZV9wCT0gbnZtZV9yZXBvcnRfem9uZV9wcm9wLAo+ PiAgCS5wcl9vcHMJCT0gJm52bWVfcHJfb3BzLAo+PiAgfTsKPj4gICNlbmRpZiAvKiBDT05GSUdf TlZNRV9NVUxUSVBBVEggKi8KPj5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5o IGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oCj4+aW5kZXggZWNmNDQzZWZkZjkxLi4xNzJlMDUz MWYzN2YgMTAwNjQ0Cj4+LS0tIGEvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oCj4+KysrIGIvZHJp dmVycy9udm1lL2hvc3QvbnZtZS5oCj4+QEAgLTQwNyw2ICs0MDcsMTQgQEAgc3RydWN0IG52bWVf bnMgewo+PiAgCXU4IHBpX3R5cGU7Cj4+ICAjaWZkZWYgQ09ORklHX0JMS19ERVZfWk9ORUQKPj4g IAl1NjQgenN6ZTsKPj4rCj4+Kwl1MzIgbnJfem9uZXM7Cj4+Kwl1MzIgbWFyOwo+PisJdTMyIG1v cjsKPj4rCXUzMiBycmw7Cj4+Kwl1MzIgZnJsOwo+PisJdTE2IHpvYzsKPj4rCXUxNiBvemNzOwo+ PiAgI2VuZGlmCj4+ICAJdW5zaWduZWQgbG9uZyBmZWF0dXJlczsKPj4gIAl1bnNpZ25lZCBsb25n IGZsYWdzOwo+PkBAIC03MDQsMTEgKzcxMiwxNCBAQCBpbnQgbnZtZV91cGRhdGVfem9uZV9pbmZv KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsCj4+ICBpbnQgbnZtZV9y ZXBvcnRfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvciwKPj4gIAkJ ICAgICAgdW5zaWduZWQgaW50IG5yX3pvbmVzLCByZXBvcnRfem9uZXNfY2IgY2IsIHZvaWQgKmRh dGEpOwo+PitpbnQgbnZtZV9yZXBvcnRfem9uZV9wcm9wKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBz dHJ1Y3QgYmxrX3pvbmVfZGV2ICp6cHJvcCk7Cj4+Kwo+PiAgYmxrX3N0YXR1c190IG52bWVfc2V0 dXBfem9uZV9tZ210X3NlbmQoc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgcmVxdWVzdCAqcmVx LAo+PiAgCQkJCSAgICAgICBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbW5kLAo+PiAgCQkJCSAgICAg ICBlbnVtIG52bWVfem9uZV9tZ210X2FjdGlvbiBhY3Rpb24pOwo+PiAgI2Vsc2UKPj4gICNkZWZp bmUgbnZtZV9yZXBvcnRfem9uZXMgTlVMTAo+PisjZGVmaW5lIG52bWVfcmVwb3J0X3pvbmVfcHJv cCBOVUxMCj4+ICBzdGF0aWMgaW5saW5lIGJsa19zdGF0dXNfdCBudm1lX3NldHVwX3pvbmVfbWdt dF9zZW5kKHN0cnVjdCBudm1lX25zICpucywKPj4gIAkJc3RydWN0IHJlcXVlc3QgKnJlcSwgc3Ry dWN0IG52bWVfY29tbWFuZCAqY21uZCwKPj5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3Qv em5zLmMgYi9kcml2ZXJzL252bWUvaG9zdC96bnMuYwo+PmluZGV4IDJlNjUxMmFjNmYwMS4uMjU4 ZDAzNjEwY2MwIDEwMDY0NAo+Pi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3pucy5jCj4+KysrIGIv ZHJpdmVycy9udm1lL2hvc3Qvem5zLmMKPj5AQCAtMzIsNiArMzIsMjggQEAgc3RhdGljIGludCBu dm1lX3NldF9tYXhfYXBwZW5kKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpCj4+ICAJcmV0dXJuIDA7 Cj4+ICB9Cj4+K3N0YXRpYyB1NjQgbnZtZV96bnNfbnJfem9uZXMoc3RydWN0IG52bWVfbnMgKm5z KQo+Pit7Cj4+KwlzdHJ1Y3QgbnZtZV9jb21tYW5kIGMgPSB7IH07Cj4+KwlzdHJ1Y3QgbnZtZV96 b25lX3JlcG9ydCByZXBvcnQ7Cj4+KwlpbnQgYnVmbGVuID0gc2l6ZW9mKHN0cnVjdCBudm1lX3pv bmVfcmVwb3J0KTsKPj4rCWludCByZXQ7Cj4+Kwo+PisJYy56bXIub3Bjb2RlID0gbnZtZV9jbWRf em9uZV9tZ210X3JlY3Y7Cj4+KwljLnptci5uc2lkID0gY3B1X3RvX2xlMzIobnMtPmhlYWQtPm5z X2lkKTsKPj4rCWMuem1yLnNsYmEgPSBjcHVfdG9fbGU2NCgwKTsKPj4rCWMuem1yLm51bWQgPSBj cHVfdG9fbGUzMihudm1lX2J5dGVzX3RvX251bWQoYnVmbGVuKSk7Cj4+KwljLnptci56cmEgPSBO Vk1FX1pSQV9aT05FX1JFUE9SVDsKPj4rCWMuem1yLnpyYXNmID0gTlZNRV9aUkFTRl9aT05FX1JF UE9SVF9BTEw7Cj4+KwljLnptci5wciA9IDA7Cj4+Kwo+PisJcmV0ID0gbnZtZV9zdWJtaXRfc3lu Y19jbWQobnMtPnF1ZXVlLCAmYywgJnJlcG9ydCwgYnVmbGVuKTsKPj4rCWlmIChyZXQpCj4+KwkJ cmV0dXJuIHJldDsKPj4rCj4+KwlyZXR1cm4gbGU2NF90b19jcHUocmVwb3J0Lm5yX3pvbmVzKTsK Pj4rfQo+PisKPj4gIGludCBudm1lX3VwZGF0ZV96b25lX2luZm8oc3RydWN0IGdlbmRpc2sgKmRp c2ssIHN0cnVjdCBudm1lX25zICpucywKPj4gIAkJCSAgdW5zaWduZWQgbGJhZikKPj4gIHsKPj5A QCAtODcsNiArMTA5LDEzIEBAIGludCBudm1lX3VwZGF0ZV96b25lX2luZm8oc3RydWN0IGdlbmRp c2sgKmRpc2ssIHN0cnVjdCBudm1lX25zICpucywKPj4gIAkJZ290byBmcmVlX2RhdGE7Cj4+ICAJ fQo+PisJbnMtPm5yX3pvbmVzID0gbnZtZV96bnNfbnJfem9uZXMobnMpOwo+PisJbnMtPm1hciA9 IGxlMzJfdG9fY3B1KGlkLT5tYXIpOwo+PisJbnMtPm1vciA9IGxlMzJfdG9fY3B1KGlkLT5tb3Ip Owo+PisJbnMtPnJybCA9IGxlMzJfdG9fY3B1KGlkLT5ycmwpOwo+PisJbnMtPmZybCA9IGxlMzJf dG9fY3B1KGlkLT5mcmwpOwo+PisJbnMtPnpvYyA9IGxlMTZfdG9fY3B1KGlkLT56b2MpOwo+PisK Pj4gIAlxLT5saW1pdHMuem9uZWQgPSBCTEtfWk9ORURfSE07Cj4+ICAJYmxrX3F1ZXVlX2ZsYWdf c2V0KFFVRVVFX0ZMQUdfWk9ORV9SRVNFVEFMTCwgcSk7Cj4+ICBmcmVlX2RhdGE6Cj4+QEAgLTIz MCw2ICsyNTksMzggQEAgaW50IG52bWVfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNr LCBzZWN0b3JfdCBzZWN0b3IsCj4+ICAJcmV0dXJuIHJldDsKPj4gIH0KPj4rc3RhdGljIGludCBu dm1lX25zX3JlcG9ydF96b25lX3Byb3Aoc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgYmxrX3pv bmVfZGV2ICp6cHJvcCkKPj4rewo+PisJenByb3AtPm5yX3pvbmVzID0gbnMtPm5yX3pvbmVzOwo+ PisJenByb3AtPnpvYyA9IG5zLT56b2M7Cj4+Kwl6cHJvcC0+b3pjcyA9IG5zLT5vemNzOwo+PisJ enByb3AtPm1hciA9IG5zLT5tYXI7Cj4+Kwl6cHJvcC0+bW9yID0gbnMtPm1vcjsKPj4rCXpwcm9w LT5ycmwgPSBucy0+cnJsOwo+PisJenByb3AtPmZybCA9IG5zLT5mcmw7Cj4+Kwo+PisJcmV0dXJu IDA7Cj4+K30KPj4rCj4+K2ludCBudm1lX3JlcG9ydF96b25lX3Byb3Aoc3RydWN0IGdlbmRpc2sg KmRpc2ssIHN0cnVjdCBibGtfem9uZV9kZXYgKnpwcm9wKQo+Pit7Cj4+KwlzdHJ1Y3QgbnZtZV9u c19oZWFkICpoZWFkID0gTlVMTDsKPj4rCXN0cnVjdCBudm1lX25zICpuczsKPj4rCWludCBzcmN1 X2lkeCwgcmV0Owo+PisKPj4rCW5zID0gbnZtZV9nZXRfbnNfZnJvbV9kaXNrKGRpc2ssICZoZWFk LCAmc3JjdV9pZHgpOwo+PisJaWYgKHVubGlrZWx5KCFucykpCj4+KwkJcmV0dXJuIC1FV09VTERC TE9DSzsKPj4rCj4+KwlpZiAobnMtPmhlYWQtPmlkcy5jc2kgPT0gTlZNRV9DU0lfWk5TKQo+PisJ CXJldCA9IG52bWVfbnNfcmVwb3J0X3pvbmVfcHJvcChucywgenByb3ApOwo+PisJZWxzZQo+PisJ CXJldCA9IC1FSU5WQUw7Cj4+Kwludm1lX3B1dF9uc19mcm9tX2Rpc2soaGVhZCwgc3JjdV9pZHgp Owo+PisKPj4rCXJldHVybiByZXQ7Cj4+K30KPj4rCj4+ICBibGtfc3RhdHVzX3QgbnZtZV9zZXR1 cF96b25lX21nbXRfc2VuZChzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCByZXF1ZXN0ICpyZXEs Cj4+ICAJCXN0cnVjdCBudm1lX2NvbW1hbmQgKmMsIGVudW0gbnZtZV96b25lX21nbXRfYWN0aW9u IGFjdGlvbikKPj4gIHsKPj5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2lu Y2x1ZGUvbGludXgvYmxrZGV2LmgKPj5pbmRleCA4MzA4ZDhhMzcyMGIuLjBjMGZhYTU4YjdmNCAx MDA2NDQKPj4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCj4+KysrIGIvaW5jbHVkZS9saW51 eC9ibGtkZXYuaAo+PkBAIC0zNzIsNiArMzcyLDggQEAgZXh0ZXJuIGludCBibGtkZXZfem9uZV9v cHNfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAo+PiAgCQkJ CSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwo+PiAgZXh0ZXJuIGludCBi bGtkZXZfem9uZV9tZ210X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3Qg bW9kZSwKPj4gIAkJCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKPj4r ZXh0ZXJuIGludCBibGtkZXZfem9uZWRldl9wcm9wKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYs IGZtb2RlX3QgbW9kZSwKPj4rCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcp Owo+PiAgI2Vsc2UgLyogQ09ORklHX0JMS19ERVZfWk9ORUQgKi8KPj4gIHN0YXRpYyBpbmxpbmUg dW5zaWduZWQgaW50IGJsa2Rldl9ucl96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKPj5AQCAt NDAwLDYgKzQwMiwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBibGtkZXZfem9uZV9tZ210X2lvY3Rs KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCj4+ICAJcmV0dXJuIC1FTk9UVFk7Cj4+ICB9Cj4+ K3N0YXRpYyBpbmxpbmUgaW50IGJsa2Rldl96b25lZGV2X3Byb3Aoc3RydWN0IGJsb2NrX2Rldmlj ZSAqYmRldiwgZm1vZGVfdCBtb2RlLAo+PisJCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5z aWduZWQgbG9uZyBhcmcpCj4+K3sKPj4rCXJldHVybiAtRU5PVFRZOwo+Pit9Cj4+Kwo+PiAgI2Vu ZGlmIC8qIENPTkZJR19CTEtfREVWX1pPTkVEICovCj4+ICBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSB7 Cj4+QEAgLTE3NzAsNiArMTc3OCw3IEBAIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB7 Cj4+ICAJaW50ICgqcmVwb3J0X3pvbmVzKShzdHJ1Y3QgZ2VuZGlzayAqLCBzZWN0b3JfdCBzZWN0 b3IsCj4+ICAJCQl1bnNpZ25lZCBpbnQgbnJfem9uZXMsIHJlcG9ydF96b25lc19jYiBjYiwgdm9p ZCAqZGF0YSk7Cj4+ICAJY2hhciAqKCpkZXZub2RlKShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdW1v ZGVfdCAqbW9kZSk7Cj4+KwlpbnQgKCpyZXBvcnRfem9uZV9wKShzdHJ1Y3QgZ2VuZGlzayAqZGlz aywgc3RydWN0IGJsa196b25lX2RldiAqenByb3ApOwo+PiAgCXN0cnVjdCBtb2R1bGUgKm93bmVy Owo+PiAgCWNvbnN0IHN0cnVjdCBwcl9vcHMgKnByX29wczsKPj4gIH07Cj4+ZGlmZiAtLWdpdCBh L2luY2x1ZGUvdWFwaS9saW51eC9ibGt6b25lZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3pv bmVkLmgKPj5pbmRleCBkMDk3OGVlMTBmYzcuLjBjNDlhNGIyY2U1ZCAxMDA2NDQKPj4tLS0gYS9p bmNsdWRlL3VhcGkvbGludXgvYmxrem9uZWQuaAo+PisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9i bGt6b25lZC5oCj4+QEAgLTE0Miw2ICsxNDIsMTggQEAgc3RydWN0IGJsa196b25lX3JhbmdlIHsK Pj4gIAlfX3U2NAkJbnJfc2VjdG9yczsKPj4gIH07Cj4+K3N0cnVjdCBibGtfem9uZV9kZXYgewo+ PisJX191MzIJbnJfem9uZXM7Cj4+KwlfX3UzMgltYXI7Cj4+KwlfX3UzMgltb3I7Cj4+KwlfX3Uz Mglycmw7Cj4+KwlfX3UzMglmcmw7Cj4+KwlfX3UxNgl6b2M7Cj4+KwlfX3UxNglvemNzOwo+PisJ X191MzIJcnN2MzFbMl07Cj4+KwlfX3U2NAlyc3Y2M1s0XTsKPj4rfTsKPj4rCj4+ICAvKioKPj4g ICAqIGVudW0gYmxrX3pvbmVfYWN0aW9uIC0gWm9uZSBzdGF0ZSB0cmFuc2l0aW9ucyBtYW5hZ2Vk IGZyb20gdXNlci1zcGFjZQo+PiAgICoKPj5AQCAtMjA5LDUgKzIyMSw2IEBAIHN0cnVjdCBibGtf em9uZV9tZ210IHsKPj4gICNkZWZpbmUgQkxLQ0xPU0VaT05FCV9JT1coMHgxMiwgMTM1LCBzdHJ1 Y3QgYmxrX3pvbmVfcmFuZ2UpCj4+ICAjZGVmaW5lIEJMS0ZJTklTSFpPTkUJX0lPVygweDEyLCAx MzYsIHN0cnVjdCBibGtfem9uZV9yYW5nZSkKPj4gICNkZWZpbmUgQkxLTUdNVFpPTkUJX0lPUigw eDEyLCAxMzcsIHN0cnVjdCBibGtfem9uZV9tZ210KQo+PisjZGVmaW5lIEJMS1pPTkVERVZQUk9Q CV9JT1IoMHgxMiwgMTM4LCBzdHJ1Y3QgYmxrX3pvbmVfZGV2KQo+PiAgI2VuZGlmIC8qIF9VQVBJ X0JMS1pPTkVEX0ggKi8KPgo+TmFrLiBUaGVzZSBwcm9wZXJ0aWVzIGNhbiBhbHJlYWR5IGJlIHJl dHJpZXZlZCB1c2luZyB0aGUgbnZtZSBpb2N0bCAKPnBhc3N0aHJ1IGNvbW1hbmQgYW5kIHN1cHBv cnQgaGF2ZSBhbHNvIGJlZW4gYWRkZWQgdG8gbnZtZS1jbGkuCj4KClRoZXNlIHByb3BlcnRpZXMg YXJlIGludGVuZGVkIHRvIGJlIGNvbnN1bWVkIGJ5IGFuIGFwcGxpY2F0aW9uLCBzbwpudm1lLWNs aSBpcyBvZiBub3QgbXVjaCB1c2UuIEkgd291bGQgYWxzbyBsaWtlIHRvIGF2b2lkIHN5c2ZzIHZh cmlhYmxlcy4KCldlIGNhbiB1c2UgbnZtZSBwYXNzdGhydSwgYnV0IHRoaXMgYnlwYXNzZXMgdGhl IHpvbmVkIGJsb2NrIGFic3RyYWN0aW9uLgpXaHkgbm90IHJlcHJlc2VudGluZyBaTlMgZmVhdHVy ZXMgaW4gdGhlIHN0YW5kYXJkIHpvbmVkIGJsb2NrIEFQST8gSSBhbQpoYXBweSB0byBpdGVyYXRl IG9uIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gaWYgeW91IGhhdmUgZmVlZGJhY2suCgpKYXZp ZXIKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51 eC1udm1lIG1haWxpbmcgbGlzdApMaW51eC1udm1lQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1udm1lCg==