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 2736AC433E0 for ; Thu, 2 Jul 2020 08:40:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id F1A1D2084C for ; Thu, 2 Jul 2020 08:40:04 +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="2G+5hg19" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726462AbgGBIkE (ORCPT ); Thu, 2 Jul 2020 04:40:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49614 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725263AbgGBIkE (ORCPT ); Thu, 2 Jul 2020 04:40:04 -0400 Received: from mail-ej1-x641.google.com (mail-ej1-x641.google.com [IPv6:2a00:1450:4864:20::641]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B3409C08C5C1 for ; Thu, 2 Jul 2020 01:40:03 -0700 (PDT) Received: by mail-ej1-x641.google.com with SMTP id lx13so9645598ejb.4 for ; Thu, 02 Jul 2020 01:40:03 -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=CY1+xXeM98A+4ORvwrMrgQ9HrN1UK/F/dXmhdXBR9Q8=; b=2G+5hg19z8zKRrhF6e9qYJrqb9QevMu7duG3B47GG3zmgOnY8QY1fD0z/P23IPx07k gBCCEJW4iT12nsuTeiKO0LNuZ/NNHe7elGJP9yerFAkkDlfgk4k0kElJOTHM3IxAABJz GqOXYn0kQuqM1xCLq9kHB17Wg2UJPEvCPtsIi/nb3n5CE3DBlqPXUtXYnwlIdTTd+zZy 31tJVZmZeKpGv6x0wtEI72hl/EQ2kmpQraoUnNls58Zc/sEfFBvkFIkq09gcvcAdRSME cEivk/dMnqdUy/FdXcWQIX9pioIkvS11VtFMZQlW+RUK6ITk+oyM8B5txaMzoAOUq8mj mwvg== 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=CY1+xXeM98A+4ORvwrMrgQ9HrN1UK/F/dXmhdXBR9Q8=; b=RApZPj9taUjHVygKnZMX+c57i8QOFTJ4nrSM7a5qvncUPytrkWor2VJ5Ba3n1f+TQR AQY8kuPxiEMu/Nckw1NekT7nn5ZQrmJ89dr8GbOZGvJfLb0aB3CwuXGwO37f6f+UvjX1 DhtfbQEHAf6AootX7eTei4loJGKMu1oigOTPnkZEUvkxK5L0mMxTQl3/jm834ijkJZd2 NAXyO7aqb8ubs9sLUglBPlqlENJvC+7t+dWaxcBpE5gQ/4QeqpgH3+jDf9y0I7dTOa0H 1WQI0IkIXic250ZjctDOsZG0jGkKMO1HRuzXTlRCa5SML5bZz5pDWNS69b84afytG8/j 9WIQ== X-Gm-Message-State: AOAM530eTjIOZFCVOAR9q/0VEYUKcdpsOMvN+VhlxeaSd1B3HIy7mfIb AC6MOb7dhCgYdUz9ZbTMc9HbEA== X-Google-Smtp-Source: ABdhPJxobGY9yFW8oPSZk92kT6B6MKt1vmHt8jcVvdaNT58s95f3ggU08VHZZOMFxiSzlBcLG/d4QA== X-Received: by 2002:a17:906:240d:: with SMTP id z13mr24636676eja.346.1593679202338; Thu, 02 Jul 2020 01:40:02 -0700 (PDT) Received: from localhost ([194.62.217.57]) by smtp.gmail.com with ESMTPSA id s2sm8677638edu.39.2020.07.02.01.40.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Jul 2020 01:40:01 -0700 (PDT) Date: Thu, 2 Jul 2020 10:39:56 +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" , "mb@lightnvm.io" , SelvaKumar S , Kanchan Joshi , Nitesh Shetty Subject: Re: [PATCH 2/4] block: add support for zone offline transition Message-ID: <20200702083956.rwlewfgyc6ycs4ys@mpHalley.local> References: <20200702065438.46350-1-javier@javigon.com> <20200702065438.46350-3-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 02.07.2020 08:10, Damien Le Moal wrote: >On 2020/07/02 15:55, Javier González wrote: >> From: Javier González >> >> Add support for offline transition on the zoned block device. Use the >> existing feature flags for the underlying driver to report support for >> the feature, as currently this transition is only supported in ZNS and >> not in ZAC/ZBC >> >> Signed-off-by: Javier González >> Signed-off-by: SelvaKumar S >> Signed-off-by: Kanchan Joshi >> Signed-off-by: Nitesh Shetty >> --- >> block/blk-core.c | 2 ++ >> block/blk-zoned.c | 8 +++++++- >> drivers/nvme/host/core.c | 3 +++ >> drivers/nvme/host/zns.c | 2 +- >> include/linux/blk_types.h | 3 +++ >> include/linux/blkdev.h | 1 - >> include/uapi/linux/blkzoned.h | 3 +++ >> 7 files changed, 19 insertions(+), 3 deletions(-) >> >> diff --git a/block/blk-core.c b/block/blk-core.c >> index 03252af8c82c..589cbdacc5ec 100644 >> --- a/block/blk-core.c >> +++ b/block/blk-core.c >> @@ -140,6 +140,7 @@ static const char *const blk_op_name[] = { >> REQ_OP_NAME(ZONE_CLOSE), >> REQ_OP_NAME(ZONE_FINISH), >> REQ_OP_NAME(ZONE_APPEND), >> + REQ_OP_NAME(ZONE_OFFLINE), >> REQ_OP_NAME(WRITE_SAME), >> REQ_OP_NAME(WRITE_ZEROES), >> REQ_OP_NAME(SCSI_IN), >> @@ -1030,6 +1031,7 @@ generic_make_request_checks(struct bio *bio) >> case REQ_OP_ZONE_OPEN: >> case REQ_OP_ZONE_CLOSE: >> case REQ_OP_ZONE_FINISH: >> + case REQ_OP_ZONE_OFFLINE: >> if (!blk_queue_is_zoned(q)) >> goto not_supported; >> break; >> diff --git a/block/blk-zoned.c b/block/blk-zoned.c >> index 0f156e96e48f..b97f67f462b4 100644 >> --- a/block/blk-zoned.c >> +++ b/block/blk-zoned.c >> @@ -320,7 +320,8 @@ int blkdev_report_zones_ioctl(struct block_device *bdev, fmode_t mode, >> } >> >> /* >> - * BLKRESETZONE, BLKOPENZONE, BLKCLOSEZONE and BLKFINISHZONE ioctl processing. >> + * BLKRESETZONE, BLKOPENZONE, BLKCLOSEZONE, BLKFINISHZONE and BLKOFFLINEZONE >> + * ioctl processing. >> * Called from blkdev_ioctl. >> */ >> int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, >> @@ -363,6 +364,11 @@ int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, >> case BLKFINISHZONE: >> op = REQ_OP_ZONE_FINISH; >> break; >> + case BLKOFFLINEZONE: >> + if (!(q->zone_flags & BLK_ZONE_REP_OFFLINE)) >> + return -EINVAL; > >return -ENOTTY here. > >That is the error returned for regular block devices when a zone ioctl is >received, indicating the lack of support for these ioctls. Since this is also a >lack of support by the device here too, we may as well keep the same error >code. Returning -EINVAL should be reserved for cases where the device can accept >the ioctl but start sector or number of sectors is invalid. Ok. > > >> + op = REQ_OP_ZONE_OFFLINE; >> + break; >> default: >> return -ENOTTY; >> } >> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c >> index e5f754889234..1f5c7fc3d2c9 100644 >> --- a/drivers/nvme/host/core.c >> +++ b/drivers/nvme/host/core.c >> @@ -776,6 +776,9 @@ blk_status_t nvme_setup_cmd(struct nvme_ns *ns, struct request *req, >> case REQ_OP_ZONE_FINISH: >> ret = nvme_setup_zone_mgmt_send(ns, req, cmd, NVME_ZONE_FINISH); >> break; >> + case REQ_OP_ZONE_OFFLINE: >> + ret = nvme_setup_zone_mgmt_send(ns, req, cmd, NVME_ZONE_OFFLINE); >> + break; >> case REQ_OP_WRITE_ZEROES: >> ret = nvme_setup_write_zeroes(ns, req, cmd); >> break; >> diff --git a/drivers/nvme/host/zns.c b/drivers/nvme/host/zns.c >> index 888264261ba3..b34d2ed13825 100644 >> --- a/drivers/nvme/host/zns.c >> +++ b/drivers/nvme/host/zns.c >> @@ -81,7 +81,7 @@ int nvme_update_zone_info(struct gendisk *disk, struct nvme_ns *ns, >> } >> >> q->limits.zoned = BLK_ZONED_HM; >> - q->zone_flags = BLK_ZONE_REP_CAPACITY; >> + q->zone_flags = BLK_ZONE_REP_CAPACITY | BLK_ZONE_REP_OFFLINE; > >The name BLK_ZONE_REP_OFFLINE is not ideal. This flag is not about if offline >condition will be reported or not. It is about the drive supporting an explicit >offlining zone operation. I wanted to follow the same convention. I can change the name in the same enum for the report flags. > >> blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, q); >> free_data: >> kfree(id); >> diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h >> index ccb895f911b1..c0123c643e2f 100644 >> --- a/include/linux/blk_types.h >> +++ b/include/linux/blk_types.h >> @@ -316,6 +316,8 @@ enum req_opf { >> REQ_OP_ZONE_FINISH = 12, >> /* write data at the current zone write pointer */ >> REQ_OP_ZONE_APPEND = 13, >> + /* Transition a zone to offline */ >> + REQ_OP_ZONE_OFFLINE = 14, >> >> /* SCSI passthrough using struct scsi_request */ >> REQ_OP_SCSI_IN = 32, >> @@ -455,6 +457,7 @@ static inline bool op_is_zone_mgmt(enum req_opf op) >> case REQ_OP_ZONE_OPEN: >> case REQ_OP_ZONE_CLOSE: >> case REQ_OP_ZONE_FINISH: >> + case REQ_OP_ZONE_OFFLINE: >> return true; >> default: >> return false; >> diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h >> index 3f2e3425fa53..e489b646486d 100644 >> --- a/include/linux/blkdev.h >> +++ b/include/linux/blkdev.h >> @@ -370,7 +370,6 @@ extern int blkdev_report_zones_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); >> - >> #else /* CONFIG_BLK_DEV_ZONED */ >> >> static inline unsigned int blkdev_nr_zones(struct gendisk *disk) >> diff --git a/include/uapi/linux/blkzoned.h b/include/uapi/linux/blkzoned.h >> index 42c3366cc25f..e5adf4a9f4b0 100644 >> --- a/include/uapi/linux/blkzoned.h >> +++ b/include/uapi/linux/blkzoned.h >> @@ -77,9 +77,11 @@ enum blk_zone_cond { >> * enum blk_zone_report_flags - Feature flags of reported zone descriptors. >> * >> * @BLK_ZONE_REP_CAPACITY: Zone descriptor has capacity field. >> + * @BLK_ZONE_REP_OFFLINE : Zone device supports offline transition. > >The device supports explicit zone offline transition > >Since the implicit transition by the device may happen, even on SMR disks. > >But I am not sure this flags is very useful. Or rather, isn't it out of place >here ? Device features are normally reported through sysfs (e.g. discard, etc). >It is certainly confusing and not matching the user doc for rep.flag which >states that the flags are about the zone descriptors, not what the device can >do. So at the very least, the comments need to change. > >The other thing is that the implementation does not consider device mapper case >again: if a DM target is built on one or more ZNS drives all supporting zone >offline, then the target should be allowed to report zone offline support too, >no ? dm-linear and dm-flakey certainly should be allowed to do that. Exporting a >"zone_offline" (or something like named that) sysfs limit would allow that to be >supported easily through limit stacking and avoid the need for the report flag. I can add that too. I left it out as I did not add any implementation on top of it for the device mapper itself. If this is the way that it makes sense, then we can add it to the different device mappers later on. > >Happy to here others opinion about this one though. > >> */ >> enum blk_zone_report_flags { >> BLK_ZONE_REP_CAPACITY = (1 << 0), >> + BLK_ZONE_REP_OFFLINE = (1 << 1), >> }; >> >> /** >> @@ -166,5 +168,6 @@ struct blk_zone_range { >> #define BLKOPENZONE _IOW(0x12, 134, struct blk_zone_range) >> #define BLKCLOSEZONE _IOW(0x12, 135, struct blk_zone_range) >> #define BLKFINISHZONE _IOW(0x12, 136, struct blk_zone_range) >> +#define BLKOFFLINEZONE _IOW(0x12, 137, struct blk_zone_range) >> >> #endif /* _UAPI_BLKZONED_H */ >> > 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 69024C433DF for ; Thu, 2 Jul 2020 08:40:10 +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 290822084C for ; Thu, 2 Jul 2020 08:40:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ixe0s+2U"; 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="2G+5hg19" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 290822084C 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=xyAJaJi83iV3Nfesd0kb5U/fjcz8e08f4tDzEqsWHHs=; b=ixe0s+2UOhvetBvBE4vwu+mk8 VSGvumloQE9hDiZIopQoUy8TKpj7cu5nkm0uIhWzDoPOgzvlXH3TLT05NPp9VZ0jVcm8kuzItiUef 1pb4+VEZUTlnlmg1f8X5AgYvM+0NOGV/4/HBt4MBLHA6qD/ciD8rDBUS6mSCklz0rwMzbMHB51Xvs 19BrTmKhtGgVxf899iHhf3VniDZfOI0SeiOFiGBvU3Jz6Eshtu/Rs21be6W3JWyL60RShfbujAG/u iih6gJdYHGz96lZgSwcThgM5wiMe/w/fe7Bs2vwcTmDHjxeH1jQJ4c1X6J19ffo4jk7lc6vz8nLEa X5a8zyjxA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jqulK-0002vc-AB; Thu, 02 Jul 2020 08:40:06 +0000 Received: from mail-ej1-x643.google.com ([2a00:1450:4864:20::643]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jqulH-0002vA-Rp for linux-nvme@lists.infradead.org; Thu, 02 Jul 2020 08:40:04 +0000 Received: by mail-ej1-x643.google.com with SMTP id p20so28262795ejd.13 for ; Thu, 02 Jul 2020 01:40:03 -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=CY1+xXeM98A+4ORvwrMrgQ9HrN1UK/F/dXmhdXBR9Q8=; b=2G+5hg19z8zKRrhF6e9qYJrqb9QevMu7duG3B47GG3zmgOnY8QY1fD0z/P23IPx07k gBCCEJW4iT12nsuTeiKO0LNuZ/NNHe7elGJP9yerFAkkDlfgk4k0kElJOTHM3IxAABJz GqOXYn0kQuqM1xCLq9kHB17Wg2UJPEvCPtsIi/nb3n5CE3DBlqPXUtXYnwlIdTTd+zZy 31tJVZmZeKpGv6x0wtEI72hl/EQ2kmpQraoUnNls58Zc/sEfFBvkFIkq09gcvcAdRSME cEivk/dMnqdUy/FdXcWQIX9pioIkvS11VtFMZQlW+RUK6ITk+oyM8B5txaMzoAOUq8mj mwvg== 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=CY1+xXeM98A+4ORvwrMrgQ9HrN1UK/F/dXmhdXBR9Q8=; b=P3gqySC1nu/VoCghN9nOUnNO3in9O5Nc8/JiyYNH/bnUBjwL2Usb3nblSy/l0WvMmo pmJz7cV6ZsEdYrFKjZxR2Q2n0FR7yTr+UOBG2ki+o+gh/glbiMg9+Bhb51uNlDaihRDZ XPAgctdd0YizYLXn7vGHBljTuaJhnqv/NZi1Sj+YGgXJ0Gyu8T+YaLq/bzhEqLr4Wnv7 6EjArZocbbD+aUpN+WJ4RgQaT7uS++JtIq8U33XUGyYGb+Tgrn1n9KyKUWjuRumZpZPc 8/+18C7I8KG/fiB+W1QvwPyyTDPAU+4lm/uaTwMY4UEj7sjCYks/lE6ka2tY7jShA+wo wUEw== X-Gm-Message-State: AOAM530UmNygT9Ae1exmCDiS1qkQ3xOlFETAPL8NEiMjL6jh74wWsiyi 1MnvmXArXCxbBRMT7tWpWdRipQ== X-Google-Smtp-Source: ABdhPJxobGY9yFW8oPSZk92kT6B6MKt1vmHt8jcVvdaNT58s95f3ggU08VHZZOMFxiSzlBcLG/d4QA== X-Received: by 2002:a17:906:240d:: with SMTP id z13mr24636676eja.346.1593679202338; Thu, 02 Jul 2020 01:40:02 -0700 (PDT) Received: from localhost ([194.62.217.57]) by smtp.gmail.com with ESMTPSA id s2sm8677638edu.39.2020.07.02.01.40.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Jul 2020 01:40:01 -0700 (PDT) Date: Thu, 2 Jul 2020 10:39:56 +0200 From: Javier =?utf-8?B?R29uesOhbGV6?= To: Damien Le Moal Subject: Re: [PATCH 2/4] block: add support for zone offline transition Message-ID: <20200702083956.rwlewfgyc6ycs4ys@mpHalley.local> References: <20200702065438.46350-1-javier@javigon.com> <20200702065438.46350-3-javier@javigon.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200702_044003_937709_8C057DB5 X-CRM114-Status: GOOD ( 27.21 ) 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" , "mb@lightnvm.io" , "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 T24gMDIuMDcuMjAyMCAwODoxMCwgRGFtaWVuIExlIE1vYWwgd3JvdGU6Cj5PbiAyMDIwLzA3LzAy IDE1OjU1LCBKYXZpZXIgR29uesOhbGV6IHdyb3RlOgo+PiBGcm9tOiBKYXZpZXIgR29uesOhbGV6 IDxqYXZpZXIuZ29uekBzYW1zdW5nLmNvbT4KPj4KPj4gQWRkIHN1cHBvcnQgZm9yIG9mZmxpbmUg dHJhbnNpdGlvbiBvbiB0aGUgem9uZWQgYmxvY2sgZGV2aWNlLiBVc2UgdGhlCj4+IGV4aXN0aW5n IGZlYXR1cmUgZmxhZ3MgZm9yIHRoZSB1bmRlcmx5aW5nIGRyaXZlciB0byByZXBvcnQgc3VwcG9y dCBmb3IKPj4gdGhlIGZlYXR1cmUsIGFzIGN1cnJlbnRseSB0aGlzIHRyYW5zaXRpb24gaXMgb25s eSBzdXBwb3J0ZWQgaW4gWk5TIGFuZAo+PiBub3QgaW4gWkFDL1pCQwo+Pgo+PiBTaWduZWQtb2Zm LWJ5OiBKYXZpZXIgR29uesOhbGV6IDxqYXZpZXIuZ29uekBzYW1zdW5nLmNvbT4KPj4gU2lnbmVk LW9mZi1ieTogU2VsdmFLdW1hciBTIDxzZWx2YWt1bWEuczFAc2Ftc3VuZy5jb20+Cj4+IFNpZ25l ZC1vZmYtYnk6IEthbmNoYW4gSm9zaGkgPGpvc2hpLmtAc2Ftc3VuZy5jb20+Cj4+IFNpZ25lZC1v ZmYtYnk6IE5pdGVzaCBTaGV0dHkgPG5qLnNoZXR0eUBzYW1zdW5nLmNvbT4KPj4gLS0tCj4+ICBi bG9jay9ibGstY29yZS5jICAgICAgICAgICAgICB8IDIgKysKPj4gIGJsb2NrL2Jsay16b25lZC5j ICAgICAgICAgICAgIHwgOCArKysrKysrLQo+PiAgZHJpdmVycy9udm1lL2hvc3QvY29yZS5jICAg ICAgfCAzICsrKwo+PiAgZHJpdmVycy9udm1lL2hvc3Qvem5zLmMgICAgICAgfCAyICstCj4+ICBp bmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oICAgICB8IDMgKysrCj4+ICBpbmNsdWRlL2xpbnV4L2Js a2Rldi5oICAgICAgICB8IDEgLQo+PiAgaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3pvbmVkLmggfCAz ICsrKwo+PiAgNyBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygt KQo+Pgo+PiBkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMK Pj4gaW5kZXggMDMyNTJhZjhjODJjLi41ODljYmRhY2M1ZWMgMTAwNjQ0Cj4+IC0tLSBhL2Jsb2Nr L2Jsay1jb3JlLmMKPj4gKysrIGIvYmxvY2svYmxrLWNvcmUuYwo+PiBAQCAtMTQwLDYgKzE0MCw3 IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBibGtfb3BfbmFtZVtdID0gewo+PiAgCVJFUV9P UF9OQU1FKFpPTkVfQ0xPU0UpLAo+PiAgCVJFUV9PUF9OQU1FKFpPTkVfRklOSVNIKSwKPj4gIAlS RVFfT1BfTkFNRShaT05FX0FQUEVORCksCj4+ICsJUkVRX09QX05BTUUoWk9ORV9PRkZMSU5FKSwK Pj4gIAlSRVFfT1BfTkFNRShXUklURV9TQU1FKSwKPj4gIAlSRVFfT1BfTkFNRShXUklURV9aRVJP RVMpLAo+PiAgCVJFUV9PUF9OQU1FKFNDU0lfSU4pLAo+PiBAQCAtMTAzMCw2ICsxMDMxLDcgQEAg Z2VuZXJpY19tYWtlX3JlcXVlc3RfY2hlY2tzKHN0cnVjdCBiaW8gKmJpbykKPj4gIAljYXNlIFJF UV9PUF9aT05FX09QRU46Cj4+ICAJY2FzZSBSRVFfT1BfWk9ORV9DTE9TRToKPj4gIAljYXNlIFJF UV9PUF9aT05FX0ZJTklTSDoKPj4gKwljYXNlIFJFUV9PUF9aT05FX09GRkxJTkU6Cj4+ICAJCWlm ICghYmxrX3F1ZXVlX2lzX3pvbmVkKHEpKQo+PiAgCQkJZ290byBub3Rfc3VwcG9ydGVkOwo+PiAg CQlicmVhazsKPj4gZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay16b25lZC5jIGIvYmxvY2svYmxrLXpv bmVkLmMKPj4gaW5kZXggMGYxNTZlOTZlNDhmLi5iOTdmNjdmNDYyYjQgMTAwNjQ0Cj4+IC0tLSBh L2Jsb2NrL2Jsay16b25lZC5jCj4+ICsrKyBiL2Jsb2NrL2Jsay16b25lZC5jCj4+IEBAIC0zMjAs NyArMzIwLDggQEAgaW50IGJsa2Rldl9yZXBvcnRfem9uZXNfaW9jdGwoc3RydWN0IGJsb2NrX2Rl dmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAo+PiAgfQo+Pgo+PiAgLyoKPj4gLSAqIEJMS1JFU0VU Wk9ORSwgQkxLT1BFTlpPTkUsIEJMS0NMT1NFWk9ORSBhbmQgQkxLRklOSVNIWk9ORSBpb2N0bCBw cm9jZXNzaW5nLgo+PiArICogQkxLUkVTRVRaT05FLCBCTEtPUEVOWk9ORSwgQkxLQ0xPU0VaT05F LCBCTEtGSU5JU0haT05FIGFuZCBCTEtPRkZMSU5FWk9ORQo+PiArICogaW9jdGwgcHJvY2Vzc2lu Zy4KPj4gICAqIENhbGxlZCBmcm9tIGJsa2Rldl9pb2N0bC4KPj4gICAqLwo+PiAgaW50IGJsa2Rl dl96b25lX21nbXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2Rl LAo+PiBAQCAtMzYzLDYgKzM2NCwxMSBAQCBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1 Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCj4+ICAJY2FzZSBCTEtGSU5JU0ha T05FOgo+PiAgCQlvcCA9IFJFUV9PUF9aT05FX0ZJTklTSDsKPj4gIAkJYnJlYWs7Cj4+ICsJY2Fz ZSBCTEtPRkZMSU5FWk9ORToKPj4gKwkJaWYgKCEocS0+em9uZV9mbGFncyAmIEJMS19aT05FX1JF UF9PRkZMSU5FKSkKPj4gKwkJCXJldHVybiAtRUlOVkFMOwo+Cj5yZXR1cm4gLUVOT1RUWSBoZXJl Lgo+Cj5UaGF0IGlzIHRoZSBlcnJvciByZXR1cm5lZCBmb3IgcmVndWxhciBibG9jayBkZXZpY2Vz IHdoZW4gYSB6b25lIGlvY3RsIGlzCj5yZWNlaXZlZCwgaW5kaWNhdGluZyB0aGUgbGFjayBvZiBz dXBwb3J0IGZvciB0aGVzZSBpb2N0bHMuIFNpbmNlIHRoaXMgaXMgYWxzbyBhCj5sYWNrICBvZiBz dXBwb3J0IGJ5IHRoZSBkZXZpY2UgaGVyZSB0b28sIHdlIG1heSBhcyB3ZWxsIGtlZXAgdGhlIHNh bWUgZXJyb3IKPmNvZGUuIFJldHVybmluZyAtRUlOVkFMIHNob3VsZCBiZSByZXNlcnZlZCBmb3Ig Y2FzZXMgd2hlcmUgdGhlIGRldmljZSBjYW4gYWNjZXB0Cj50aGUgaW9jdGwgYnV0IHN0YXJ0IHNl Y3RvciBvciBudW1iZXIgb2Ygc2VjdG9ycyBpcyBpbnZhbGlkLgoKT2suCgo+Cj4KPj4gKwkJb3Ag PSBSRVFfT1BfWk9ORV9PRkZMSU5FOwo+PiArCQlicmVhazsKPj4gIAlkZWZhdWx0Ogo+PiAgCQly ZXR1cm4gLUVOT1RUWTsKPj4gIAl9Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9j b3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKPj4gaW5kZXggZTVmNzU0ODg5MjM0Li4x ZjVjN2ZjM2QyYzkgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYwo+PiAr KysgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKPj4gQEAgLTc3Niw2ICs3NzYsOSBAQCBibGtf c3RhdHVzX3QgbnZtZV9zZXR1cF9jbWQoc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgcmVxdWVz dCAqcmVxLAo+PiAgCWNhc2UgUkVRX09QX1pPTkVfRklOSVNIOgo+PiAgCQlyZXQgPSBudm1lX3Nl dHVwX3pvbmVfbWdtdF9zZW5kKG5zLCByZXEsIGNtZCwgTlZNRV9aT05FX0ZJTklTSCk7Cj4+ICAJ CWJyZWFrOwo+PiArCWNhc2UgUkVRX09QX1pPTkVfT0ZGTElORToKPj4gKwkJcmV0ID0gbnZtZV9z ZXR1cF96b25lX21nbXRfc2VuZChucywgcmVxLCBjbWQsIE5WTUVfWk9ORV9PRkZMSU5FKTsKPj4g KwkJYnJlYWs7Cj4+ICAJY2FzZSBSRVFfT1BfV1JJVEVfWkVST0VTOgo+PiAgCQlyZXQgPSBudm1l X3NldHVwX3dyaXRlX3plcm9lcyhucywgcmVxLCBjbWQpOwo+PiAgCQlicmVhazsKPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3pucy5jIGIvZHJpdmVycy9udm1lL2hvc3Qvem5zLmMK Pj4gaW5kZXggODg4MjY0MjYxYmEzLi5iMzRkMmVkMTM4MjUgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZl cnMvbnZtZS9ob3N0L3pucy5jCj4+ICsrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L3pucy5jCj4+IEBA IC04MSw3ICs4MSw3IEBAIGludCBudm1lX3VwZGF0ZV96b25lX2luZm8oc3RydWN0IGdlbmRpc2sg KmRpc2ssIHN0cnVjdCBudm1lX25zICpucywKPj4gIAl9Cj4+Cj4+ICAJcS0+bGltaXRzLnpvbmVk ID0gQkxLX1pPTkVEX0hNOwo+PiAtCXEtPnpvbmVfZmxhZ3MgPSBCTEtfWk9ORV9SRVBfQ0FQQUNJ VFk7Cj4+ICsJcS0+em9uZV9mbGFncyA9IEJMS19aT05FX1JFUF9DQVBBQ0lUWSB8IEJMS19aT05F X1JFUF9PRkZMSU5FOwo+Cj5UaGUgbmFtZSBCTEtfWk9ORV9SRVBfT0ZGTElORSBpcyBub3QgaWRl YWwuICBUaGlzIGZsYWcgaXMgbm90IGFib3V0IGlmIG9mZmxpbmUKPmNvbmRpdGlvbiB3aWxsIGJl IHJlcG9ydGVkIG9yIG5vdC4gSXQgaXMgYWJvdXQgdGhlIGRyaXZlIHN1cHBvcnRpbmcgYW4gZXhw bGljaXQKPm9mZmxpbmluZyB6b25lIG9wZXJhdGlvbi4KCkkgd2FudGVkIHRvIGZvbGxvdyB0aGUg c2FtZSBjb252ZW50aW9uLiBJIGNhbiBjaGFuZ2UgdGhlIG5hbWUgaW4gdGhlCnNhbWUgZW51bSBm b3IgdGhlIHJlcG9ydCBmbGFncy4KCj4KPj4gIAlibGtfcXVldWVfZmxhZ19zZXQoUVVFVUVfRkxB R19aT05FX1JFU0VUQUxMLCBxKTsKPj4gIGZyZWVfZGF0YToKPj4gIAlrZnJlZShpZCk7Cj4+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9ibGtf dHlwZXMuaAo+PiBpbmRleCBjY2I4OTVmOTExYjEuLmMwMTIzYzY0M2UyZiAxMDA2NDQKPj4gLS0t IGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaAo+PiArKysgYi9pbmNsdWRlL2xpbnV4L2Jsa190 eXBlcy5oCj4+IEBAIC0zMTYsNiArMzE2LDggQEAgZW51bSByZXFfb3BmIHsKPj4gIAlSRVFfT1Bf Wk9ORV9GSU5JU0gJPSAxMiwKPj4gIAkvKiB3cml0ZSBkYXRhIGF0IHRoZSBjdXJyZW50IHpvbmUg d3JpdGUgcG9pbnRlciAqLwo+PiAgCVJFUV9PUF9aT05FX0FQUEVORAk9IDEzLAo+PiArCS8qIFRy YW5zaXRpb24gYSB6b25lIHRvIG9mZmxpbmUgKi8KPj4gKwlSRVFfT1BfWk9ORV9PRkZMSU5FCT0g MTQsCj4+Cj4+ICAJLyogU0NTSSBwYXNzdGhyb3VnaCB1c2luZyBzdHJ1Y3Qgc2NzaV9yZXF1ZXN0 ICovCj4+ICAJUkVRX09QX1NDU0lfSU4JCT0gMzIsCj4+IEBAIC00NTUsNiArNDU3LDcgQEAgc3Rh dGljIGlubGluZSBib29sIG9wX2lzX3pvbmVfbWdtdChlbnVtIHJlcV9vcGYgb3ApCj4+ICAJY2Fz ZSBSRVFfT1BfWk9ORV9PUEVOOgo+PiAgCWNhc2UgUkVRX09QX1pPTkVfQ0xPU0U6Cj4+ICAJY2Fz ZSBSRVFfT1BfWk9ORV9GSU5JU0g6Cj4+ICsJY2FzZSBSRVFfT1BfWk9ORV9PRkZMSU5FOgo+PiAg CQlyZXR1cm4gdHJ1ZTsKPj4gIAlkZWZhdWx0Ogo+PiAgCQlyZXR1cm4gZmFsc2U7Cj4+IGRpZmYg LS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAo+ PiBpbmRleCAzZjJlMzQyNWZhNTMuLmU0ODliNjQ2NDg2ZCAxMDA2NDQKPj4gLS0tIGEvaW5jbHVk ZS9saW51eC9ibGtkZXYuaAo+PiArKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCj4+IEBAIC0z NzAsNyArMzcwLDYgQEAgZXh0ZXJuIGludCBibGtkZXZfcmVwb3J0X3pvbmVzX2lvY3RsKHN0cnVj dCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKPj4gIAkJCQkgICAgIHVuc2lnbmVk IGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKPj4gIGV4dGVybiBpbnQgYmxrZGV2X3pvbmVf bWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCj4+ICAJ CQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Cj4+IC0KPj4gICNlbHNl IC8qIENPTkZJR19CTEtfREVWX1pPTkVEICovCj4+Cj4+ICBzdGF0aWMgaW5saW5lIHVuc2lnbmVk IGludCBibGtkZXZfbnJfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spCj4+IGRpZmYgLS1naXQg YS9pbmNsdWRlL3VhcGkvbGludXgvYmxrem9uZWQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ibGt6 b25lZC5oCj4+IGluZGV4IDQyYzMzNjZjYzI1Zi4uZTVhZGY0YTlmNGIwIDEwMDY0NAo+PiAtLS0g YS9pbmNsdWRlL3VhcGkvbGludXgvYmxrem9uZWQuaAo+PiArKysgYi9pbmNsdWRlL3VhcGkvbGlu dXgvYmxrem9uZWQuaAo+PiBAQCAtNzcsOSArNzcsMTEgQEAgZW51bSBibGtfem9uZV9jb25kIHsK Pj4gICAqIGVudW0gYmxrX3pvbmVfcmVwb3J0X2ZsYWdzIC0gRmVhdHVyZSBmbGFncyBvZiByZXBv cnRlZCB6b25lIGRlc2NyaXB0b3JzLgo+PiAgICoKPj4gICAqIEBCTEtfWk9ORV9SRVBfQ0FQQUNJ VFk6IFpvbmUgZGVzY3JpcHRvciBoYXMgY2FwYWNpdHkgZmllbGQuCj4+ICsgKiBAQkxLX1pPTkVf UkVQX09GRkxJTkUgOiBab25lIGRldmljZSBzdXBwb3J0cyBvZmZsaW5lIHRyYW5zaXRpb24uCj4K PlRoZSBkZXZpY2Ugc3VwcG9ydHMgZXhwbGljaXQgem9uZSBvZmZsaW5lIHRyYW5zaXRpb24KPgo+ U2luY2UgdGhlIGltcGxpY2l0IHRyYW5zaXRpb24gYnkgdGhlIGRldmljZSBtYXkgaGFwcGVuLCBl dmVuIG9uIFNNUiBkaXNrcy4KPgo+QnV0IEkgYW0gbm90IHN1cmUgdGhpcyBmbGFncyBpcyB2ZXJ5 IHVzZWZ1bC4gT3IgcmF0aGVyLCBpc24ndCBpdCBvdXQgb2YgcGxhY2UKPmhlcmUgPyBEZXZpY2Ug ZmVhdHVyZXMgYXJlIG5vcm1hbGx5IHJlcG9ydGVkIHRocm91Z2ggc3lzZnMgKGUuZy4gZGlzY2Fy ZCwgZXRjKS4KPkl0IGlzIGNlcnRhaW5seSBjb25mdXNpbmcgYW5kIG5vdCBtYXRjaGluZyB0aGUg dXNlciBkb2MgZm9yIHJlcC5mbGFnIHdoaWNoCj5zdGF0ZXMgdGhhdCB0aGUgZmxhZ3MgYXJlIGFi b3V0IHRoZSB6b25lIGRlc2NyaXB0b3JzLCBub3Qgd2hhdCB0aGUgZGV2aWNlIGNhbgo+ZG8uIFNv IGF0IHRoZSB2ZXJ5IGxlYXN0LCB0aGUgY29tbWVudHMgbmVlZCB0byBjaGFuZ2UuCj4KPlRoZSBv dGhlciB0aGluZyBpcyB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBjb25zaWRlciBk ZXZpY2UgbWFwcGVyIGNhc2UKPmFnYWluOiBpZiBhIERNIHRhcmdldCBpcyBidWlsdCBvbiBvbmUg b3IgbW9yZSBaTlMgZHJpdmVzIGFsbCBzdXBwb3J0aW5nIHpvbmUKPm9mZmxpbmUsIHRoZW4gdGhl IHRhcmdldCBzaG91bGQgYmUgYWxsb3dlZCB0byByZXBvcnQgem9uZSBvZmZsaW5lIHN1cHBvcnQg dG9vLAo+bm8gPyBkbS1saW5lYXIgYW5kIGRtLWZsYWtleSBjZXJ0YWlubHkgc2hvdWxkIGJlIGFs bG93ZWQgdG8gZG8gdGhhdC4gRXhwb3J0aW5nIGEKPiJ6b25lX29mZmxpbmUiIChvciBzb21ldGhp bmcgbGlrZSBuYW1lZCB0aGF0KSBzeXNmcyBsaW1pdCB3b3VsZCBhbGxvdyB0aGF0IHRvIGJlCj5z dXBwb3J0ZWQgZWFzaWx5IHRocm91Z2ggbGltaXQgc3RhY2tpbmcgYW5kIGF2b2lkIHRoZSBuZWVk IGZvciB0aGUgcmVwb3J0IGZsYWcuCgpJIGNhbiBhZGQgdGhhdCB0b28uIEkgbGVmdCBpdCBvdXQg YXMgSSBkaWQgbm90IGFkZCBhbnkgaW1wbGVtZW50YXRpb24gb24KdG9wIG9mIGl0IGZvciB0aGUg ZGV2aWNlIG1hcHBlciBpdHNlbGYuIElmIHRoaXMgaXMgdGhlIHdheSB0aGF0IGl0IG1ha2VzCnNl bnNlLCB0aGVuIHdlIGNhbiBhZGQgaXQgdG8gdGhlIGRpZmZlcmVudCBkZXZpY2UgbWFwcGVycyBs YXRlciBvbi4KCj4KPkhhcHB5IHRvIGhlcmUgb3RoZXJzIG9waW5pb24gYWJvdXQgdGhpcyBvbmUg dGhvdWdoLgo+Cj4+ICAgKi8KPj4gIGVudW0gYmxrX3pvbmVfcmVwb3J0X2ZsYWdzIHsKPj4gIAlC TEtfWk9ORV9SRVBfQ0FQQUNJVFkJPSAoMSA8PCAwKSwKPj4gKwlCTEtfWk9ORV9SRVBfT0ZGTElO RQk9ICgxIDw8IDEpLAo+PiAgfTsKPj4KPj4gIC8qKgo+PiBAQCAtMTY2LDUgKzE2OCw2IEBAIHN0 cnVjdCBibGtfem9uZV9yYW5nZSB7Cj4+ICAjZGVmaW5lIEJMS09QRU5aT05FCV9JT1coMHgxMiwg MTM0LCBzdHJ1Y3QgYmxrX3pvbmVfcmFuZ2UpCj4+ICAjZGVmaW5lIEJMS0NMT1NFWk9ORQlfSU9X KDB4MTIsIDEzNSwgc3RydWN0IGJsa196b25lX3JhbmdlKQo+PiAgI2RlZmluZSBCTEtGSU5JU0ha T05FCV9JT1coMHgxMiwgMTM2LCBzdHJ1Y3QgYmxrX3pvbmVfcmFuZ2UpCj4+ICsjZGVmaW5lIEJM S09GRkxJTkVaT05FCV9JT1coMHgxMiwgMTM3LCBzdHJ1Y3QgYmxrX3pvbmVfcmFuZ2UpCj4+Cj4+ ICAjZW5kaWYgLyogX1VBUElfQkxLWk9ORURfSCAqLwo+Pgo+CgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtbnZtZSBtYWlsaW5nIGxpc3QKTGlu dXgtbnZtZUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtbnZtZQo=