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 6CF0AC433E0 for ; Fri, 26 Jun 2020 06:22:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3345B2082E for ; Fri, 26 Jun 2020 06:22:25 +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="zqIxK+e/" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728337AbgFZGWY (ORCPT ); Fri, 26 Jun 2020 02:22:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52832 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726451AbgFZGWW (ORCPT ); Fri, 26 Jun 2020 02:22:22 -0400 Received: from mail-ej1-x642.google.com (mail-ej1-x642.google.com [IPv6:2a00:1450:4864:20::642]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5CED7C08C5C1 for ; Thu, 25 Jun 2020 23:22:22 -0700 (PDT) Received: by mail-ej1-x642.google.com with SMTP id ga4so8210233ejb.11 for ; Thu, 25 Jun 2020 23:22:22 -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=oBG/9ErgCyHUZ15Wb6Uc1Az0Pf1FUXphafRlgQCLV4o=; b=zqIxK+e/6ukaMRkm2yNaDyeDyvmLzmg3hrB87J4v15EGoZ0jT/kn/w44NJl0+K+3A2 ikhPDNcx3eoEnqpAZ3TWpsEMKAHj2N9byZH9JGdFWvseI3239Ko1Zf+AYvilzlE5z30O vWmgAu2joHwJZLPMRMI1hxwvEzCHZRSRZh6XVrkhHb5leYXOG+R4yPzC1rIoQAFTwkq+ Zw2qceMTjfp0dX/84AghAFF8cn7K0Sj0MZd40CYHq47fNLUGTly/kFQBUrP2odVIYgDQ YEMMJ+wfALRD8nQMXei4nk2KDYiXdVH2/24d/x3CUEeXZk2TWbS1QD3Fwv/s95U1O3pQ w3rg== 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=oBG/9ErgCyHUZ15Wb6Uc1Az0Pf1FUXphafRlgQCLV4o=; b=lUKtxx/N4JB+T2geLxQG36D6ZlOKL6XAqe2GrQZM8XTnWjoNGb8bEnvvmzRsZquMLO chsNag5/AZay6KAB9iA7uJTT10PFtb9hJIyArorsnSaKVoy4zMvlIY6RDTD9eTlSP85f CjaiWfptgxS6NbHgRRsm1UoUEzEIw7m5eSrGeEU7Gdi5O3gBNm4U/YaOyrzcVy4U/cJ1 EhwjZQe3MeNUS+dy3o1s3krUZWt9Cc4dcoG+ebdd/kpIe3qncVehbzaByVwFwf2wN3qT E/dKj5tRAYuioDrc/p6BssZlDv5bJsI84pBjwzM+jTkAh7fPtPcdkG7tqOvKBWr8oAfs JUzw== X-Gm-Message-State: AOAM5331GOUiFKhkHJvgYXzSgjG8IoHQxKUXNbMXlNCLyWmw2XQpKAST eNkplhrPiNXhXrscHDqflgjUSw== X-Google-Smtp-Source: ABdhPJwCvn2vaYVm2v25FllPhbKxOkvJ12/toQVUZA/3C3KJiGtmgNLiPCK4l43BNPHPu6iUD+pbeQ== X-Received: by 2002:a17:906:328a:: with SMTP id 10mr1134954ejw.265.1593152540925; Thu, 25 Jun 2020 23:22:20 -0700 (PDT) Received: from localhost (ip-5-186-127-235.cgn.fibianet.dk. [5.186.127.235]) by smtp.gmail.com with ESMTPSA id o14sm8129846eja.121.2020.06.25.23.22.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Jun 2020 23:22:20 -0700 (PDT) Date: Fri, 26 Jun 2020 08:22:19 +0200 From: Javier =?utf-8?B?R29uesOhbGV6?= To: Damien Le Moal 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: <20200626062219.rnyaft2etyhm3gfx@mpHalley.localdomain> References: <20200625122152.17359-1-javier@javigon.com> <20200625122152.17359-5-javier@javigon.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org On 26.06.2020 01:38, Damien Le Moal wrote: >On 2020/06/25 21:22, 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 */ >> > >As commented already, NVMe passthrough or sysfs device attributes would be much >better. See scsi: there is no IOCTL defined to obtain every single log page or >mode page defined. Passthrough is the interface to do that. For frequently used >log pages giving device information, sysfs is used as a cache. See all the >"vpd_pgXX" entries under /sys/block/sdX/device. All of this is done by the >driver. Not the block layer. Ok. Let me look into that. I was hesitant to do this as (i) it is a lot of parameters and (ii) naming ATM is a bit inconsistent. Guess we could group them all under zone_* prefix for new parameters. 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,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 AC198C433E0 for ; Fri, 26 Jun 2020 10:27:28 +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 6AFBD2070A for ; Fri, 26 Jun 2020 10:27:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="KVLCzDrA"; 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="zqIxK+e/" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6AFBD2070A 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=saCpNujjGneMZYAAEgZxfmFcK6xvcAH0ThIV8Ztc+kE=; b=KVLCzDrAXW6RioxWsC17TSsUf E+VbirEtRqzIXlwOBojgQZAMVh9Xcov5k1lWfsstQcNnOruam8S3KXmnNyWvYWFeuwpTYPLopVzMd fX4utcBB9j6HtmSjugAAJwHFeEpJ1g2FKEHeU8ZupzK2v0aVWC5bfl75gNMjMds7wGlFMqU9vNYFa KmRf6mk+1rpK4aioZu+c14Q5VQl0Lf2fbkTTjMQ+OkGVii/C9Gh9p+KHGv1zn8sIAXWp2Gu8X7IFt aqXJT+xcfrbulLgvGKctpGylR4IwliwqjiRUllcxmHE4nRDkof4/YFxaX99WDFJoqTH4ptehO2IIX UyNUUvl5A==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jolZp-0003NM-4f; Fri, 26 Jun 2020 10:27:21 +0000 Received: from mail-lj1-f194.google.com ([209.85.208.194]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jolWR-0001jk-Qo for linux-nvme@lists.infradead.org; Fri, 26 Jun 2020 10:24:09 +0000 Received: by mail-lj1-f194.google.com with SMTP id s1so9782842ljo.0 for ; Fri, 26 Jun 2020 03:23: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=oBG/9ErgCyHUZ15Wb6Uc1Az0Pf1FUXphafRlgQCLV4o=; b=zqIxK+e/6ukaMRkm2yNaDyeDyvmLzmg3hrB87J4v15EGoZ0jT/kn/w44NJl0+K+3A2 ikhPDNcx3eoEnqpAZ3TWpsEMKAHj2N9byZH9JGdFWvseI3239Ko1Zf+AYvilzlE5z30O vWmgAu2joHwJZLPMRMI1hxwvEzCHZRSRZh6XVrkhHb5leYXOG+R4yPzC1rIoQAFTwkq+ Zw2qceMTjfp0dX/84AghAFF8cn7K0Sj0MZd40CYHq47fNLUGTly/kFQBUrP2odVIYgDQ YEMMJ+wfALRD8nQMXei4nk2KDYiXdVH2/24d/x3CUEeXZk2TWbS1QD3Fwv/s95U1O3pQ w3rg== 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=oBG/9ErgCyHUZ15Wb6Uc1Az0Pf1FUXphafRlgQCLV4o=; b=Dnip4mUZ8h4owBP1Di9zTNX0R+u7DJQsYYGDM0mfJaC6J+WyTO0Dsx9QD7Dz9uoFqV W43eOUpE55M5HSIOt8uEQi+Q+h4kkI5TO8PQWce9bb+ROP4s9pWIP57zbO8sVzEaWbbm QWV2tqeT1empmIcL0WTIHTG8FhsCh9d3rxlK23bN9CyLLDdj3zS2uKYnchr2vOOktlZO bPaREfs6i407UvEm0kzQtOlvSdH7dc0+RlHB+FF5BzMMWaylmn6BekOa12ITdrPl1i7F l+BhxiVNBe+oDLWR1PHGBFBRdvv3TYmsBPQ1t7gmi/4Y2WuUzvKKI+Mrx1mS4Q4Iuw/e ypuA== X-Gm-Message-State: AOAM532t4H0gwlqCxg88P90Pk1I03K1Yd+YkX5aOy9tNtPTs3Ts1Yfv9 wilUu4m5XpfMaV+i+zoXPNYVRHWA5uVzKjHM X-Google-Smtp-Source: ABdhPJwCvn2vaYVm2v25FllPhbKxOkvJ12/toQVUZA/3C3KJiGtmgNLiPCK4l43BNPHPu6iUD+pbeQ== X-Received: by 2002:a17:906:328a:: with SMTP id 10mr1134954ejw.265.1593152540925; Thu, 25 Jun 2020 23:22:20 -0700 (PDT) Received: from localhost (ip-5-186-127-235.cgn.fibianet.dk. [5.186.127.235]) by smtp.gmail.com with ESMTPSA id o14sm8129846eja.121.2020.06.25.23.22.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Jun 2020 23:22:20 -0700 (PDT) Date: Fri, 26 Jun 2020 08:22:19 +0200 From: Javier =?utf-8?B?R29uesOhbGV6?= To: Damien Le Moal Subject: Re: [PATCH 4/6] block: introduce IOCTL to report dev properties Message-ID: <20200626062219.rnyaft2etyhm3gfx@mpHalley.localdomain> References: <20200625122152.17359-1-javier@javigon.com> <20200625122152.17359-5-javier@javigon.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: 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 T24gMjYuMDYuMjAyMCAwMTozOCwgRGFtaWVuIExlIE1vYWwgd3JvdGU6Cj5PbiAyMDIwLzA2LzI1 IDIxOjIyLCBKYXZpZXIgR29uesOhbGV6IHdyb3RlOgo+PiBGcm9tOiBKYXZpZXIgR29uesOhbGV6 IDxqYXZpZXIuZ29uekBzYW1zdW5nLmNvbT4KPj4KPj4gV2l0aCB0aGUgYWRkaXRpb24gb2YgWk5T LCBhIG5ldyBzZXQgb2YgcHJvcGVydGllcyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlCj4+IHpvbmVk IGJsb2NrIGRldmljZS4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IElPQ1RMIHRvIGV4cG9z ZSB0aGVzZQo+PiBycm9wZXJ0aWVzIHRvIHVzZXIgc3BhY2UuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6 IEphdmllciBHb256w6FsZXogPGphdmllci5nb256QHNhbXN1bmcuY29tPgo+PiBTaWduZWQtb2Zm LWJ5OiBTZWx2YUt1bWFyIFMgPHNlbHZha3VtYS5zMUBzYW1zdW5nLmNvbT4KPj4gU2lnbmVkLW9m Zi1ieTogS2FuY2hhbiBKb3NoaSA8am9zaGkua0BzYW1zdW5nLmNvbT4KPj4gU2lnbmVkLW9mZi1i eTogTml0ZXNoIFNoZXR0eSA8bmouc2hldHR5QHNhbXN1bmcuY29tPgo+PiAtLS0KPj4gIGJsb2Nr L2Jsay16b25lZC5jICAgICAgICAgICAgIHwgNDYgKysrKysrKysrKysrKysrKysrKysrKysrKysK Pj4gIGJsb2NrL2lvY3RsLmMgICAgICAgICAgICAgICAgIHwgIDIgKysKPj4gIGRyaXZlcnMvbnZt ZS9ob3N0L2NvcmUuYyAgICAgIHwgIDIgKysKPj4gIGRyaXZlcnMvbnZtZS9ob3N0L252bWUuaCAg ICAgIHwgMTEgKysrKysrKwo+PiAgZHJpdmVycy9udm1lL2hvc3Qvem5zLmMgICAgICAgfCA2MSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiAgaW5jbHVkZS9saW51eC9ibGtk ZXYuaCAgICAgICAgfCAgOSArKysrKysKPj4gIGluY2x1ZGUvdWFwaS9saW51eC9ibGt6b25lZC5o IHwgMTMgKysrKysrKysKPj4gIDcgZmlsZXMgY2hhbmdlZCwgMTQ0IGluc2VydGlvbnMoKykKPj4K Pj4gZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay16b25lZC5jIGIvYmxvY2svYmxrLXpvbmVkLmMKPj4g aW5kZXggNzA0ZmMxNTgxM2QxLi4zOWVjNzJhZjk1MzcgMTAwNjQ0Cj4+IC0tLSBhL2Jsb2NrL2Js ay16b25lZC5jCj4+ICsrKyBiL2Jsb2NrL2Jsay16b25lZC5jCj4+IEBAIC0xNjksNiArMTY5LDE3 IEBAIGludCBibGtkZXZfcmVwb3J0X3pvbmVzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNl Y3Rvcl90IHNlY3RvciwKPj4gIH0KPj4gIEVYUE9SVF9TWU1CT0xfR1BMKGJsa2Rldl9yZXBvcnRf em9uZXMpOwo+Pgo+PiArc3RhdGljIGludCBibGtkZXZfcmVwb3J0X3pvbmVkZXZfcHJvcChzdHJ1 Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAo+PiArCQkJCSAgICAgIHN0cnVjdCBibGtfem9uZV9kZXYg Knpwcm9wKQo+PiArewo+PiArCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi0+YmRfZGlzazsK Pj4gKwo+PiArCWlmIChXQVJOX09OX09OQ0UoIWJkZXYtPmJkX2Rpc2stPmZvcHMtPnJlcG9ydF96 b25lX3ApKQo+PiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4+ICsKPj4gKwlyZXR1cm4gZGlzay0+ Zm9wcy0+cmVwb3J0X3pvbmVfcChkaXNrLCB6cHJvcCk7Cj4+ICt9Cj4+ICsKPj4gIHN0YXRpYyBp bmxpbmUgYm9vbCBibGtkZXZfYWxsb3dfcmVzZXRfYWxsX3pvbmVzKHN0cnVjdCBibG9ja19kZXZp Y2UgKmJkZXYsCj4+ICAJCQkJCQlzZWN0b3JfdCBzZWN0b3IsCj4+ICAJCQkJCQlzZWN0b3JfdCBu cl9zZWN0b3JzKQo+PiBAQCAtNDMwLDYgKzQ0MSw0MSBAQCBpbnQgYmxrZGV2X3pvbmVfbWdtdF9p b2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCj4+ICAJCQkJR0ZQ X0tFUk5FTCk7Cj4+ICB9Cj4+Cj4+ICtpbnQgYmxrZGV2X3pvbmVkZXZfcHJvcChzdHJ1Y3QgYmxv Y2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCj4+ICsJCQl1bnNpZ25lZCBpbnQgY21kLCB1 bnNpZ25lZCBsb25nIGFyZykKPj4gK3sKPj4gKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9f dXNlciAqKWFyZzsKPj4gKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKPj4gKwlzdHJ1Y3QgYmxr X3pvbmVfZGV2IHpwcm9wOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlpZiAoIWFyZ3ApCj4+ICsJ CXJldHVybiAtRUlOVkFMOwo+PiArCj4+ICsJcSA9IGJkZXZfZ2V0X3F1ZXVlKGJkZXYpOwo+PiAr CWlmICghcSkKPj4gKwkJcmV0dXJuIC1FTlhJTzsKPj4gKwo+PiArCWlmICghYmxrX3F1ZXVlX2lz X3pvbmVkKHEpKQo+PiArCQlyZXR1cm4gLUVOT1RUWTsKPj4gKwo+PiArCWlmICghY2FwYWJsZShD QVBfU1lTX0FETUlOKSkKPj4gKwkJcmV0dXJuIC1FQUNDRVM7Cj4+ICsKPj4gKwlpZiAoIShtb2Rl ICYgRk1PREVfV1JJVEUpKQo+PiArCQlyZXR1cm4gLUVCQURGOwo+PiArCj4+ICsJcmV0ID0gYmxr ZGV2X3JlcG9ydF96b25lZGV2X3Byb3AoYmRldiwgJnpwcm9wKTsKPj4gKwlpZiAocmV0KQo+PiAr CQlnb3RvIG91dDsKPj4gKwo+PiArCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnpwcm9wLCBzaXpl b2Yoc3RydWN0IGJsa196b25lX2RldikpKQo+PiArCQlyZXR1cm4gLUVGQVVMVDsKPj4gKwo+PiAr b3V0Ogo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gIHN0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgbG9uZyAqYmxrX2FsbG9jX3pvbmVfYml0bWFwKGludCBub2RlLAo+PiAgCQkJCQkJICAgdW5z aWduZWQgaW50IG5yX3pvbmVzKQo+PiAgewo+PiBkaWZmIC0tZ2l0IGEvYmxvY2svaW9jdGwuYyBi L2Jsb2NrL2lvY3RsLmMKPj4gaW5kZXggMGVhMjk3NTRlN2RkLi5mN2I0ZTBmMmRkNGMgMTAwNjQ0 Cj4+IC0tLSBhL2Jsb2NrL2lvY3RsLmMKPj4gKysrIGIvYmxvY2svaW9jdGwuYwo+PiBAQCAtNTE3 LDYgKzUxNyw4IEBAIHN0YXRpYyBpbnQgYmxrZGV2X2NvbW1vbl9pb2N0bChzdHJ1Y3QgYmxvY2tf ZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCj4+ICAJCXJldHVybiBibGtkZXZfem9uZV9vcHNf aW9jdGwoYmRldiwgbW9kZSwgY21kLCBhcmcpOwo+PiAgCWNhc2UgQkxLTUdNVFpPTkU6Cj4+ICAJ CXJldHVybiBibGtkZXZfem9uZV9tZ210X2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKPj4g KwljYXNlIEJMS1pPTkVERVZQUk9QOgo+PiArCQlyZXR1cm4gYmxrZGV2X3pvbmVkZXZfcHJvcChi ZGV2LCBtb2RlLCBjbWQsIGFyZyk7Cj4+ICAJY2FzZSBCTEtHRVRaT05FU1o6Cj4+ICAJCXJldHVy biBwdXRfdWludChhcmdwLCBiZGV2X3pvbmVfc2VjdG9ycyhiZGV2KSk7Cj4+ICAJY2FzZSBCTEtH RVROUlpPTkVTOgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jIGIvZHJp dmVycy9udm1lL2hvc3QvY29yZS5jCj4+IGluZGV4IDViOTVjODFkMmEyZC4uYTMyYzkwOWE5MTVm IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKPj4gKysrIGIvZHJpdmVy cy9udm1lL2hvc3QvY29yZS5jCj4+IEBAIC0yMjU0LDYgKzIyNTQsNyBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG52bWVfZm9wcyA9IHsKPj4gIAkuZ2V0Z2Vv CQk9IG52bWVfZ2V0Z2VvLAo+PiAgCS5yZXZhbGlkYXRlX2Rpc2s9IG52bWVfcmV2YWxpZGF0ZV9k aXNrLAo+PiAgCS5yZXBvcnRfem9uZXMJPSBudm1lX3JlcG9ydF96b25lcywKPj4gKwkucmVwb3J0 X3pvbmVfcAk9IG52bWVfcmVwb3J0X3pvbmVfcHJvcCwKPj4gIAkucHJfb3BzCQk9ICZudm1lX3By X29wcywKPj4gIH07Cj4+Cj4+IEBAIC0yMjgwLDYgKzIyODEsNyBAQCBjb25zdCBzdHJ1Y3QgYmxv Y2tfZGV2aWNlX29wZXJhdGlvbnMgbnZtZV9uc19oZWFkX29wcyA9IHsKPj4gIAkuY29tcGF0X2lv Y3RsCT0gbnZtZV9jb21wYXRfaW9jdGwsCj4+ICAJLmdldGdlbwkJPSBudm1lX2dldGdlbywKPj4g IAkucmVwb3J0X3pvbmVzCT0gbnZtZV9yZXBvcnRfem9uZXMsCj4+ICsJLnJlcG9ydF96b25lX3AJ PSBudm1lX3JlcG9ydF96b25lX3Byb3AsCj4+ICAJLnByX29wcwkJPSAmbnZtZV9wcl9vcHMsCj4+ ICB9Owo+PiAgI2VuZGlmIC8qIENPTkZJR19OVk1FX01VTFRJUEFUSCAqLwo+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oCj4+ IGluZGV4IGVjZjQ0M2VmZGY5MS4uMTcyZTA1MzFmMzdmIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJz L252bWUvaG9zdC9udm1lLmgKPj4gKysrIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oCj4+IEBA IC00MDcsNiArNDA3LDE0IEBAIHN0cnVjdCBudm1lX25zIHsKPj4gIAl1OCBwaV90eXBlOwo+PiAg I2lmZGVmIENPTkZJR19CTEtfREVWX1pPTkVECj4+ICAJdTY0IHpzemU7Cj4+ICsKPj4gKwl1MzIg bnJfem9uZXM7Cj4+ICsJdTMyIG1hcjsKPj4gKwl1MzIgbW9yOwo+PiArCXUzMiBycmw7Cj4+ICsJ dTMyIGZybDsKPj4gKwl1MTYgem9jOwo+PiArCXUxNiBvemNzOwo+PiAgI2VuZGlmCj4+ICAJdW5z aWduZWQgbG9uZyBmZWF0dXJlczsKPj4gIAl1bnNpZ25lZCBsb25nIGZsYWdzOwo+PiBAQCAtNzA0 LDExICs3MTIsMTQgQEAgaW50IG52bWVfdXBkYXRlX3pvbmVfaW5mbyhzdHJ1Y3QgZ2VuZGlzayAq ZGlzaywgc3RydWN0IG52bWVfbnMgKm5zLAo+PiAgaW50IG52bWVfcmVwb3J0X3pvbmVzKHN0cnVj dCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsCj4+ICAJCSAgICAgIHVuc2lnbmVkIGlu dCBucl96b25lcywgcmVwb3J0X3pvbmVzX2NiIGNiLCB2b2lkICpkYXRhKTsKPj4KPj4gK2ludCBu dm1lX3JlcG9ydF96b25lX3Byb3Aoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHN0cnVjdCBibGtfem9u ZV9kZXYgKnpwcm9wKTsKPj4gKwo+PiAgYmxrX3N0YXR1c190IG52bWVfc2V0dXBfem9uZV9tZ210 X3NlbmQoc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLAo+PiAgCQkJCSAg ICAgICBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbW5kLAo+PiAgCQkJCSAgICAgICBlbnVtIG52bWVf em9uZV9tZ210X2FjdGlvbiBhY3Rpb24pOwo+PiAgI2Vsc2UKPj4gICNkZWZpbmUgbnZtZV9yZXBv cnRfem9uZXMgTlVMTAo+PiArI2RlZmluZSBudm1lX3JlcG9ydF96b25lX3Byb3AgTlVMTAo+Pgo+ PiAgc3RhdGljIGlubGluZSBibGtfc3RhdHVzX3QgbnZtZV9zZXR1cF96b25lX21nbXRfc2VuZChz dHJ1Y3QgbnZtZV9ucyAqbnMsCj4+ICAJCXN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCBudm1l X2NvbW1hbmQgKmNtbmQsCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC96bnMuYyBi L2RyaXZlcnMvbnZtZS9ob3N0L3pucy5jCj4+IGluZGV4IDJlNjUxMmFjNmYwMS4uMjU4ZDAzNjEw Y2MwIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL252bWUvaG9zdC96bnMuYwo+PiArKysgYi9kcml2 ZXJzL252bWUvaG9zdC96bnMuYwo+PiBAQCAtMzIsNiArMzIsMjggQEAgc3RhdGljIGludCBudm1l X3NldF9tYXhfYXBwZW5kKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpCj4+ICAJcmV0dXJuIDA7Cj4+ ICB9Cj4+Cj4+ICtzdGF0aWMgdTY0IG52bWVfem5zX25yX3pvbmVzKHN0cnVjdCBudm1lX25zICpu cykKPj4gK3sKPj4gKwlzdHJ1Y3QgbnZtZV9jb21tYW5kIGMgPSB7IH07Cj4+ICsJc3RydWN0IG52 bWVfem9uZV9yZXBvcnQgcmVwb3J0Owo+PiArCWludCBidWZsZW4gPSBzaXplb2Yoc3RydWN0IG52 bWVfem9uZV9yZXBvcnQpOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwljLnptci5vcGNvZGUgPSBu dm1lX2NtZF96b25lX21nbXRfcmVjdjsKPj4gKwljLnptci5uc2lkID0gY3B1X3RvX2xlMzIobnMt PmhlYWQtPm5zX2lkKTsKPj4gKwljLnptci5zbGJhID0gY3B1X3RvX2xlNjQoMCk7Cj4+ICsJYy56 bXIubnVtZCA9IGNwdV90b19sZTMyKG52bWVfYnl0ZXNfdG9fbnVtZChidWZsZW4pKTsKPj4gKwlj Lnptci56cmEgPSBOVk1FX1pSQV9aT05FX1JFUE9SVDsKPj4gKwljLnptci56cmFzZiA9IE5WTUVf WlJBU0ZfWk9ORV9SRVBPUlRfQUxMOwo+PiArCWMuem1yLnByID0gMDsKPj4gKwo+PiArCXJldCA9 IG52bWVfc3VibWl0X3N5bmNfY21kKG5zLT5xdWV1ZSwgJmMsICZyZXBvcnQsIGJ1Zmxlbik7Cj4+ ICsJaWYgKHJldCkKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCXJldHVybiBsZTY0X3RvX2Nw dShyZXBvcnQubnJfem9uZXMpOwo+PiArfQo+PiArCj4+ICBpbnQgbnZtZV91cGRhdGVfem9uZV9p bmZvKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsCj4+ICAJCQkgIHVu c2lnbmVkIGxiYWYpCj4+ICB7Cj4+IEBAIC04Nyw2ICsxMDksMTMgQEAgaW50IG52bWVfdXBkYXRl X3pvbmVfaW5mbyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc3RydWN0IG52bWVfbnMgKm5zLAo+PiAg CQlnb3RvIGZyZWVfZGF0YTsKPj4gIAl9Cj4+Cj4+ICsJbnMtPm5yX3pvbmVzID0gbnZtZV96bnNf bnJfem9uZXMobnMpOwo+PiArCW5zLT5tYXIgPSBsZTMyX3RvX2NwdShpZC0+bWFyKTsKPj4gKwlu cy0+bW9yID0gbGUzMl90b19jcHUoaWQtPm1vcik7Cj4+ICsJbnMtPnJybCA9IGxlMzJfdG9fY3B1 KGlkLT5ycmwpOwo+PiArCW5zLT5mcmwgPSBsZTMyX3RvX2NwdShpZC0+ZnJsKTsKPj4gKwlucy0+ em9jID0gbGUxNl90b19jcHUoaWQtPnpvYyk7Cj4+ICsKPj4gIAlxLT5saW1pdHMuem9uZWQgPSBC TEtfWk9ORURfSE07Cj4+ICAJYmxrX3F1ZXVlX2ZsYWdfc2V0KFFVRVVFX0ZMQUdfWk9ORV9SRVNF VEFMTCwgcSk7Cj4+ICBmcmVlX2RhdGE6Cj4+IEBAIC0yMzAsNiArMjU5LDM4IEBAIGludCBudm1l X3JlcG9ydF96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLAo+PiAg CXJldHVybiByZXQ7Cj4+ICB9Cj4+Cj4+ICtzdGF0aWMgaW50IG52bWVfbnNfcmVwb3J0X3pvbmVf cHJvcChzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCBibGtfem9uZV9kZXYgKnpwcm9wKQo+PiAr ewo+PiArCXpwcm9wLT5ucl96b25lcyA9IG5zLT5ucl96b25lczsKPj4gKwl6cHJvcC0+em9jID0g bnMtPnpvYzsKPj4gKwl6cHJvcC0+b3pjcyA9IG5zLT5vemNzOwo+PiArCXpwcm9wLT5tYXIgPSBu cy0+bWFyOwo+PiArCXpwcm9wLT5tb3IgPSBucy0+bW9yOwo+PiArCXpwcm9wLT5ycmwgPSBucy0+ cnJsOwo+PiArCXpwcm9wLT5mcmwgPSBucy0+ZnJsOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9 Cj4+ICsKPj4gK2ludCBudm1lX3JlcG9ydF96b25lX3Byb3Aoc3RydWN0IGdlbmRpc2sgKmRpc2ss IHN0cnVjdCBibGtfem9uZV9kZXYgKnpwcm9wKQo+PiArewo+PiArCXN0cnVjdCBudm1lX25zX2hl YWQgKmhlYWQgPSBOVUxMOwo+PiArCXN0cnVjdCBudm1lX25zICpuczsKPj4gKwlpbnQgc3JjdV9p ZHgsIHJldDsKPj4gKwo+PiArCW5zID0gbnZtZV9nZXRfbnNfZnJvbV9kaXNrKGRpc2ssICZoZWFk LCAmc3JjdV9pZHgpOwo+PiArCWlmICh1bmxpa2VseSghbnMpKQo+PiArCQlyZXR1cm4gLUVXT1VM REJMT0NLOwo+PiArCj4+ICsJaWYgKG5zLT5oZWFkLT5pZHMuY3NpID09IE5WTUVfQ1NJX1pOUykK Pj4gKwkJcmV0ID0gbnZtZV9uc19yZXBvcnRfem9uZV9wcm9wKG5zLCB6cHJvcCk7Cj4+ICsJZWxz ZQo+PiArCQlyZXQgPSAtRUlOVkFMOwo+PiArCW52bWVfcHV0X25zX2Zyb21fZGlzayhoZWFkLCBz cmN1X2lkeCk7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICBibGtfc3RhdHVz X3QgbnZtZV9zZXR1cF96b25lX21nbXRfc2VuZChzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCBy ZXF1ZXN0ICpyZXEsCj4+ICAJCXN0cnVjdCBudm1lX2NvbW1hbmQgKmMsIGVudW0gbnZtZV96b25l X21nbXRfYWN0aW9uIGFjdGlvbikKPj4gIHsKPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgv YmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCj4+IGluZGV4IDgzMDhkOGEzNzIwYi4u MGMwZmFhNThiN2Y0IDEwMDY0NAo+PiAtLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCj4+ICsr KyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKPj4gQEAgLTM3Miw2ICszNzIsOCBAQCBleHRlcm4g aW50IGJsa2Rldl96b25lX29wc19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9k ZV90IG1vZGUsCj4+ICAJCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7 Cj4+ICBleHRlcm4gaW50IGJsa2Rldl96b25lX21nbXRfaW9jdGwoc3RydWN0IGJsb2NrX2Rldmlj ZSAqYmRldiwgZm1vZGVfdCBtb2RlLAo+PiAgCQkJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWdu ZWQgbG9uZyBhcmcpOwo+PiArZXh0ZXJuIGludCBibGtkZXZfem9uZWRldl9wcm9wKHN0cnVjdCBi bG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKPj4gKwkJCXVuc2lnbmVkIGludCBjbWQs IHVuc2lnbmVkIGxvbmcgYXJnKTsKPj4gICNlbHNlIC8qIENPTkZJR19CTEtfREVWX1pPTkVEICov Cj4+Cj4+ICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBibGtkZXZfbnJfem9uZXMoc3RydWN0 IGdlbmRpc2sgKmRpc2spCj4+IEBAIC00MDAsNiArNDAyLDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50 IGJsa2Rldl96b25lX21nbXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKPj4gIAly ZXR1cm4gLUVOT1RUWTsKPj4gIH0KPj4KPj4gK3N0YXRpYyBpbmxpbmUgaW50IGJsa2Rldl96b25l ZGV2X3Byb3Aoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAo+PiArCQkJ CSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQo+PiArewo+PiArCXJl dHVybiAtRU5PVFRZOwo+PiArfQo+PiArCj4+ICAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfWk9O RUQgKi8KPj4KPj4gIHN0cnVjdCByZXF1ZXN0X3F1ZXVlIHsKPj4gQEAgLTE3NzAsNiArMTc3OCw3 IEBAIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB7Cj4+ICAJaW50ICgqcmVwb3J0X3pv bmVzKShzdHJ1Y3QgZ2VuZGlzayAqLCBzZWN0b3JfdCBzZWN0b3IsCj4+ICAJCQl1bnNpZ25lZCBp bnQgbnJfem9uZXMsIHJlcG9ydF96b25lc19jYiBjYiwgdm9pZCAqZGF0YSk7Cj4+ICAJY2hhciAq KCpkZXZub2RlKShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdW1vZGVfdCAqbW9kZSk7Cj4+ICsJaW50 ICgqcmVwb3J0X3pvbmVfcCkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHN0cnVjdCBibGtfem9uZV9k ZXYgKnpwcm9wKTsKPj4gIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKPj4gIAljb25zdCBzdHJ1Y3Qg cHJfb3BzICpwcl9vcHM7Cj4+ICB9Owo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4 L2Jsa3pvbmVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYmxrem9uZWQuaAo+PiBpbmRleCBkMDk3 OGVlMTBmYzcuLjBjNDlhNGIyY2U1ZCAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4 L2Jsa3pvbmVkLmgKPj4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3pvbmVkLmgKPj4gQEAg LTE0Miw2ICsxNDIsMTggQEAgc3RydWN0IGJsa196b25lX3JhbmdlIHsKPj4gIAlfX3U2NAkJbnJf c2VjdG9yczsKPj4gIH07Cj4+Cj4+ICtzdHJ1Y3QgYmxrX3pvbmVfZGV2IHsKPj4gKwlfX3UzMglu cl96b25lczsKPj4gKwlfX3UzMgltYXI7Cj4+ICsJX191MzIJbW9yOwo+PiArCV9fdTMyCXJybDsK Pj4gKwlfX3UzMglmcmw7Cj4+ICsJX191MTYJem9jOwo+PiArCV9fdTE2CW96Y3M7Cj4+ICsJX191 MzIJcnN2MzFbMl07Cj4+ICsJX191NjQJcnN2NjNbNF07Cj4+ICt9Owo+PiArCj4+ICAvKioKPj4g ICAqIGVudW0gYmxrX3pvbmVfYWN0aW9uIC0gWm9uZSBzdGF0ZSB0cmFuc2l0aW9ucyBtYW5hZ2Vk IGZyb20gdXNlci1zcGFjZQo+PiAgICoKPj4gQEAgLTIwOSw1ICsyMjEsNiBAQCBzdHJ1Y3QgYmxr X3pvbmVfbWdtdCB7Cj4+ICAjZGVmaW5lIEJMS0NMT1NFWk9ORQlfSU9XKDB4MTIsIDEzNSwgc3Ry dWN0IGJsa196b25lX3JhbmdlKQo+PiAgI2RlZmluZSBCTEtGSU5JU0haT05FCV9JT1coMHgxMiwg MTM2LCBzdHJ1Y3QgYmxrX3pvbmVfcmFuZ2UpCj4+ICAjZGVmaW5lIEJMS01HTVRaT05FCV9JT1Io MHgxMiwgMTM3LCBzdHJ1Y3QgYmxrX3pvbmVfbWdtdCkKPj4gKyNkZWZpbmUgQkxLWk9ORURFVlBS T1AJX0lPUigweDEyLCAxMzgsIHN0cnVjdCBibGtfem9uZV9kZXYpCj4+Cj4+ICAjZW5kaWYgLyog X1VBUElfQkxLWk9ORURfSCAqLwo+Pgo+Cj5BcyBjb21tZW50ZWQgYWxyZWFkeSwgTlZNZSBwYXNz dGhyb3VnaCBvciBzeXNmcyBkZXZpY2UgYXR0cmlidXRlcyB3b3VsZCBiZSBtdWNoCj5iZXR0ZXIu IFNlZSBzY3NpOiB0aGVyZSBpcyBubyBJT0NUTCBkZWZpbmVkIHRvIG9idGFpbiBldmVyeSBzaW5n bGUgbG9nIHBhZ2Ugb3IKPm1vZGUgcGFnZSBkZWZpbmVkLiBQYXNzdGhyb3VnaCBpcyB0aGUgaW50 ZXJmYWNlIHRvIGRvIHRoYXQuIEZvciBmcmVxdWVudGx5IHVzZWQKPmxvZyBwYWdlcyBnaXZpbmcg ZGV2aWNlIGluZm9ybWF0aW9uLCBzeXNmcyBpcyB1c2VkIGFzIGEgY2FjaGUuIFNlZSBhbGwgdGhl Cj4idnBkX3BnWFgiIGVudHJpZXMgdW5kZXIgL3N5cy9ibG9jay9zZFgvZGV2aWNlLiBBbGwgb2Yg dGhpcyBpcyBkb25lIGJ5IHRoZQo+ZHJpdmVyLiBOb3QgdGhlIGJsb2NrIGxheWVyLgoKT2suIExl dCBtZSBsb29rIGludG8gdGhhdC4gSSB3YXMgaGVzaXRhbnQgdG8gZG8gdGhpcyBhcyAoaSkgaXQg aXMgYSBsb3QKb2YgcGFyYW1ldGVycyBhbmQgKGlpKSBuYW1pbmcgQVRNIGlzIGEgYml0IGluY29u c2lzdGVudC4gR3Vlc3Mgd2UgY291bGQKZ3JvdXAgdGhlbSBhbGwgdW5kZXIgem9uZV8qIHByZWZp eCBmb3IgbmV3IHBhcmFtZXRlcnMuCgpKYXZpZXIKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkxpbnV4LW52bWUgbWFpbGluZyBsaXN0CkxpbnV4LW52bWVA bGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2xpbnV4LW52bWUK