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 79C54C433DF for ; Fri, 26 Jun 2020 06:09:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4E684207E8 for ; Fri, 26 Jun 2020 06:09:02 +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="DtaXE94V" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726036AbgFZGJB (ORCPT ); Fri, 26 Jun 2020 02:09:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50796 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725883AbgFZGJB (ORCPT ); Fri, 26 Jun 2020 02:09:01 -0400 Received: from mail-ed1-x542.google.com (mail-ed1-x542.google.com [IPv6:2a00:1450:4864:20::542]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F2F88C08C5C1 for ; Thu, 25 Jun 2020 23:09:00 -0700 (PDT) Received: by mail-ed1-x542.google.com with SMTP id a8so4802618edy.1 for ; Thu, 25 Jun 2020 23:09:00 -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=d31PpSzdyqjKwey15N5IKMpFdG+4vlPQzj0ZE0Mhabk=; b=DtaXE94Vz2GriaOfmgfyU24KSTsGYsYhe16nGRkyZ4Vt0Q7NOf7prCJyCX5nTwVho2 s6MMFbJsaIEi9nMefDZdz76yW9pvGBYygSnr1E3c7AoXh60LuYDBZcLNlhZPw30Hl70d DMY+zkZncupMiqsV8tZ9ZxDzst6KRGkKH0bfJgSmhJDsDHFoBiVxSrJjyIt0g2dAJ+OK hUqk77PpAminKSPmVUrdVWHfzzVy10IojrUHZpeees/F0DJYgOL5KbJbgqM7uhgI6KyB POZ92YEOvf9TcKie8zOk80xyVgyk4DgXXzCgeb7D3nSc2lWLXy9gCBQYFi10iG/65CpK 8h3Q== 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=d31PpSzdyqjKwey15N5IKMpFdG+4vlPQzj0ZE0Mhabk=; b=pv86PZ2BtKsBSlsIkg99pBY6sgJy2V4jnoTD/gr30sdWu1QaC2sqxW+bZDJexEGvu4 EAZRebPWna1woodZR5ncdSTJ/FeJWyJ5aVmpspfG0cOe4XhqvclKT3fJjvoLuyq+9DVe HTypSqblzN7R2MUUx3G+Y7eTXNUpFHC07u2BvOO5mLZ6GY4Hb+nnClwq8loWr/RSDe6z TncZiMGtnahTMaJqBwCRf9bQMq6j+4Byxotd5qKODf6g+bGDkMFIQ24M/Ewt7i73q+U8 TcogcysM7qm8W8Ciqq5752OiW/d8vTr1TASL5lck3HrtHBXqDdYMg/AO5Sb/Ojv5UFuG lnXw== X-Gm-Message-State: AOAM533ofuLHmFLk+4eioo3ycsi3CdW3eE2W8P3ED1VSQNhQX0yuiVBf ZO7ogEvmc2vXyO20bo1FOX/E6w== X-Google-Smtp-Source: ABdhPJx59lWENb/DyYuQHrZ3utvTYPC5G6bwIGS0eCgcvkCNm2mTPfpStObKCCaApZEWJfbF2ziT/w== X-Received: by 2002:aa7:d2d2:: with SMTP id k18mr1727405edr.16.1593151739548; Thu, 25 Jun 2020 23:08:59 -0700 (PDT) Received: from localhost (ip-5-186-127-235.cgn.fibianet.dk. [5.186.127.235]) by smtp.gmail.com with ESMTPSA id bc23sm2347762edb.90.2020.06.25.23.08.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Jun 2020 23:08:58 -0700 (PDT) Date: Fri, 26 Jun 2020 08:08:58 +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 3/6] block: add support for zone offline transition Message-ID: <20200626060858.uo56xe57l4tzepnc@mpHalley.localdomain> References: <20200625122152.17359-1-javier@javigon.com> <20200625122152.17359-4-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:34, Damien Le Moal wrote: >On 2020/06/25 21:22, Javier González wrote: >> From: Javier González >> >> Add support for offline transition on the zoned block device using the >> new zone management IOCTL >> >> 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 | 3 +++ >> drivers/nvme/host/core.c | 3 +++ >> include/linux/blk_types.h | 3 +++ >> include/linux/blkdev.h | 1 - >> include/uapi/linux/blkzoned.h | 1 + >> 6 files changed, 12 insertions(+), 1 deletion(-) >> >> 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 29194388a1bb..704fc15813d1 100644 >> --- a/block/blk-zoned.c >> +++ b/block/blk-zoned.c >> @@ -416,6 +416,9 @@ int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, >> case BLK_ZONE_MGMT_RESET: >> op = REQ_OP_ZONE_RESET; >> break; >> + case BLK_ZONE_MGMT_OFFLINE: >> + op = REQ_OP_ZONE_OFFLINE; >> + break; >> default: >> return -ENOTTY; >> } >> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c >> index f1215523792b..5b95c81d2a2d 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/include/linux/blk_types.h b/include/linux/blk_types.h >> index 16b57fb2b99c..b3921263c3dd 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, >> @@ -456,6 +458,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 bd8521f94dc4..8308d8a3720b 100644 >> --- a/include/linux/blkdev.h >> +++ b/include/linux/blkdev.h >> @@ -372,7 +372,6 @@ 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); >> - >> #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 a8c89fe58f97..d0978ee10fc7 100644 >> --- a/include/uapi/linux/blkzoned.h >> +++ b/include/uapi/linux/blkzoned.h >> @@ -155,6 +155,7 @@ enum blk_zone_action { >> BLK_ZONE_MGMT_FINISH = 0x2, >> BLK_ZONE_MGMT_OPEN = 0x3, >> BLK_ZONE_MGMT_RESET = 0x4, >> + BLK_ZONE_MGMT_OFFLINE = 0x5, >> }; >> >> /** >> > >As mentioned in previous email, the usefulness of this is dubious. Please >elaborate in the commit message. Sure NVMe ZNS defines this and we can support >it. But without a good use case, what is the point ? Use case is to transition zones in read-only state to offline when we are done moving valid data. It is easier to explicitly managing zones that are not usable by having all under the offline state. > >scsi SD driver will return BLK_STS_NOTSUPP if this offlining is sent to a >ZBC/ZAC drive. Not nice. Having a sysfs attribute "max_offline_zone_sectors" or >the like to indicate support by the device or not would be nicer. We can do that. > >Does offling ALL zones make any sense ? Because this patch does not prevent the >use of the REQ_ZONE_ALL flags introduced in patch 2. Probably not a good idea to >allow offlining all zones, no ? AFAIK the transition to offline is only valid when coming from a read-only state. I did think of adding a check, but I can see that other transitions go directly to the driver and then the device, so I decided to follow the same model. If you think it is better, we can add the check. 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=-5.9 required=3.0 tests=DATE_IN_PAST_03_06, 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 814C6C433E0 for ; Fri, 26 Jun 2020 12:39:09 +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 3F4E5207E8 for ; Fri, 26 Jun 2020 12:39:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="COGhNyda"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="FFEK8BOo"; 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="DtaXE94V" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3F4E5207E8 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=G9QuidW6+zIkk4bwX3SNuN8BrqI7rErXByT3VcJgAW4=; b=COGhNydatw5igR32nusfjSKZz xbm5cHx1xWqNYIpszhy3bT9HxbMqGF74xalHZHfmvjfeY/pyHL2a6HP8XYbiU9vi5Fy9zty48Xj50 0saIJFXnaW9Z9dRjiD9b7P6YhL5BU/Fec79pXKyPBTuLNfIRnRCTdF15a6WIXIATS8RwIYHl4osf3 JgRcBMj/hZTOQ4/dbp/kDJvgFnbdJ3LRgHH0vGlyhlGWbifq2aPpj4E/dxmCpkJIVMpN1GBjUKhlt ywrt/bE2Thl3ITxKtO2q2q44MbpGfAO7YZnBJqJ8iB8DK0ZRDnsHJjt0ueV06egdv/2fxlP5FAh5D AFfaKO5rg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jond8-0002cT-Kq; Fri, 26 Jun 2020 12:38:54 +0000 Received: from casper.infradead.org ([90.155.50.34]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jolIN-0001jR-Im for linux-nvme@merlin.infradead.org; Fri, 26 Jun 2020 10:09:19 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Transfer-Encoding: Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date: Sender:Reply-To:Content-ID:Content-Description; bh=d31PpSzdyqjKwey15N5IKMpFdG+4vlPQzj0ZE0Mhabk=; b=FFEK8BOorLFQKZH1CHjHlnJUNB XXP5QKCY+NFjo0LVHBn0mg94uiHGt8q4eGtPB6VE//ohOhMaeO81jx2/ZlCofytOuEWT59Rk3Aj7Q pSiF33V8e6yWaJhGBEs702+MntvT1QnHmaBwZxm64Y29gG9OLnotWJFhRuwMIfi2ZktPz0kIAWxGY a9WT/WAE6FUap25NKIwBhHyyK4idi+v2nshysyyPHoV5D+QyUcam894KGgbTwCF8KjZJZhmtPWzpy I6ZQWnCSahdit0FN25vHJY69FHLYeWhfZUytDS8spKmPlBTb9xrxg6dVGlZ4EcTF5nyFSi7RepQn2 oGAjtsSA==; Received: from mail-ed1-x544.google.com ([2a00:1450:4864:20::544]) by casper.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jolHG-0005ZV-G0 for linux-nvme@lists.infradead.org; Fri, 26 Jun 2020 10:09:06 +0000 Received: by mail-ed1-x544.google.com with SMTP id e22so6457405edq.8 for ; Fri, 26 Jun 2020 03:08:09 -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=d31PpSzdyqjKwey15N5IKMpFdG+4vlPQzj0ZE0Mhabk=; b=DtaXE94Vz2GriaOfmgfyU24KSTsGYsYhe16nGRkyZ4Vt0Q7NOf7prCJyCX5nTwVho2 s6MMFbJsaIEi9nMefDZdz76yW9pvGBYygSnr1E3c7AoXh60LuYDBZcLNlhZPw30Hl70d DMY+zkZncupMiqsV8tZ9ZxDzst6KRGkKH0bfJgSmhJDsDHFoBiVxSrJjyIt0g2dAJ+OK hUqk77PpAminKSPmVUrdVWHfzzVy10IojrUHZpeees/F0DJYgOL5KbJbgqM7uhgI6KyB POZ92YEOvf9TcKie8zOk80xyVgyk4DgXXzCgeb7D3nSc2lWLXy9gCBQYFi10iG/65CpK 8h3Q== 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=d31PpSzdyqjKwey15N5IKMpFdG+4vlPQzj0ZE0Mhabk=; b=pirxUyOHO08OmHXw7EnOlmY+0gBKn6dp6L/cIuaxJShXBJbF3Z3L0HNMP5wtrVtK9a lxpeQlwq4SIJKp8vVTX3dA8CYLz64QfMmoWSv1bXIa0LvCQg98T/t3ISchSjmoERcAgM tVx0VV96NlDhM5vfdBIxNE1MU0jyD+XHmZ7z12Cb5yNl0ZgL4LtZt+8sp9bcDMg5QxRy kJJ4WrUScYMtW3Pb36kxVX4WWweSjoZK/Ntf2R3/VRWKaOOoqOIiG1ONHqoX/oR4iJ21 clybSz4+K6xJVwgoejxexgSlL2t69WmogoHmT2H1vlJKpEJ6ycrir0bEGAxxbgXvmAlM 4VUA== X-Gm-Message-State: AOAM530H1tM8OWE/W7LGlbHzM5/k0i4Uok1/AHa0o0vFU8q/HRRuOTk4 uzniC6W5k32LuAG5G7jhYeTa1bOd8K3G1/R7 X-Google-Smtp-Source: ABdhPJx59lWENb/DyYuQHrZ3utvTYPC5G6bwIGS0eCgcvkCNm2mTPfpStObKCCaApZEWJfbF2ziT/w== X-Received: by 2002:aa7:d2d2:: with SMTP id k18mr1727405edr.16.1593151739548; Thu, 25 Jun 2020 23:08:59 -0700 (PDT) Received: from localhost (ip-5-186-127-235.cgn.fibianet.dk. [5.186.127.235]) by smtp.gmail.com with ESMTPSA id bc23sm2347762edb.90.2020.06.25.23.08.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Jun 2020 23:08:58 -0700 (PDT) Date: Fri, 26 Jun 2020 08:08:58 +0200 From: Javier =?utf-8?B?R29uesOhbGV6?= To: Damien Le Moal Subject: Re: [PATCH 3/6] block: add support for zone offline transition Message-ID: <20200626060858.uo56xe57l4tzepnc@mpHalley.localdomain> References: <20200625122152.17359-1-javier@javigon.com> <20200625122152.17359-4-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-20200626_110813_418281_5CEF503C X-CRM114-Status: GOOD ( 24.92 ) 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 T24gMjYuMDYuMjAyMCAwMTozNCwgRGFtaWVuIExlIE1vYWwgd3JvdGU6Cj5PbiAyMDIwLzA2LzI1 IDIxOjIyLCBKYXZpZXIgR29uesOhbGV6IHdyb3RlOgo+PiBGcm9tOiBKYXZpZXIgR29uesOhbGV6 IDxqYXZpZXIuZ29uekBzYW1zdW5nLmNvbT4KPj4KPj4gQWRkIHN1cHBvcnQgZm9yIG9mZmxpbmUg dHJhbnNpdGlvbiBvbiB0aGUgem9uZWQgYmxvY2sgZGV2aWNlIHVzaW5nIHRoZQo+PiBuZXcgem9u ZSBtYW5hZ2VtZW50IElPQ1RMCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IEphdmllciBHb256w6FsZXog PGphdmllci5nb256QHNhbXN1bmcuY29tPgo+PiBTaWduZWQtb2ZmLWJ5OiBTZWx2YUt1bWFyIFMg PHNlbHZha3VtYS5zMUBzYW1zdW5nLmNvbT4KPj4gU2lnbmVkLW9mZi1ieTogS2FuY2hhbiBKb3No aSA8am9zaGkua0BzYW1zdW5nLmNvbT4KPj4gU2lnbmVkLW9mZi1ieTogTml0ZXNoIFNoZXR0eSA8 bmouc2hldHR5QHNhbXN1bmcuY29tPgo+PiAtLS0KPj4gIGJsb2NrL2Jsay1jb3JlLmMgICAgICAg ICAgICAgIHwgMiArKwo+PiAgYmxvY2svYmxrLXpvbmVkLmMgICAgICAgICAgICAgfCAzICsrKwo+ PiAgZHJpdmVycy9udm1lL2hvc3QvY29yZS5jICAgICAgfCAzICsrKwo+PiAgaW5jbHVkZS9saW51 eC9ibGtfdHlwZXMuaCAgICAgfCAzICsrKwo+PiAgaW5jbHVkZS9saW51eC9ibGtkZXYuaCAgICAg ICAgfCAxIC0KPj4gIGluY2x1ZGUvdWFwaS9saW51eC9ibGt6b25lZC5oIHwgMSArCj4+ICA2IGZp bGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPj4KPj4gZGlmZiAt LWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCj4+IGluZGV4IDAzMjUy YWY4YzgyYy4uNTg5Y2JkYWNjNWVjIDEwMDY0NAo+PiAtLS0gYS9ibG9jay9ibGstY29yZS5jCj4+ ICsrKyBiL2Jsb2NrL2Jsay1jb3JlLmMKPj4gQEAgLTE0MCw2ICsxNDAsNyBAQCBzdGF0aWMgY29u c3QgY2hhciAqY29uc3QgYmxrX29wX25hbWVbXSA9IHsKPj4gIAlSRVFfT1BfTkFNRShaT05FX0NM T1NFKSwKPj4gIAlSRVFfT1BfTkFNRShaT05FX0ZJTklTSCksCj4+ICAJUkVRX09QX05BTUUoWk9O RV9BUFBFTkQpLAo+PiArCVJFUV9PUF9OQU1FKFpPTkVfT0ZGTElORSksCj4+ICAJUkVRX09QX05B TUUoV1JJVEVfU0FNRSksCj4+ICAJUkVRX09QX05BTUUoV1JJVEVfWkVST0VTKSwKPj4gIAlSRVFf T1BfTkFNRShTQ1NJX0lOKSwKPj4gQEAgLTEwMzAsNiArMTAzMSw3IEBAIGdlbmVyaWNfbWFrZV9y ZXF1ZXN0X2NoZWNrcyhzdHJ1Y3QgYmlvICpiaW8pCj4+ICAJY2FzZSBSRVFfT1BfWk9ORV9PUEVO Ogo+PiAgCWNhc2UgUkVRX09QX1pPTkVfQ0xPU0U6Cj4+ICAJY2FzZSBSRVFfT1BfWk9ORV9GSU5J U0g6Cj4+ICsJY2FzZSBSRVFfT1BfWk9ORV9PRkZMSU5FOgo+PiAgCQlpZiAoIWJsa19xdWV1ZV9p c196b25lZChxKSkKPj4gIAkJCWdvdG8gbm90X3N1cHBvcnRlZDsKPj4gIAkJYnJlYWs7Cj4+IGRp ZmYgLS1naXQgYS9ibG9jay9ibGstem9uZWQuYyBiL2Jsb2NrL2Jsay16b25lZC5jCj4+IGluZGV4 IDI5MTk0Mzg4YTFiYi4uNzA0ZmMxNTgxM2QxIDEwMDY0NAo+PiAtLS0gYS9ibG9jay9ibGstem9u ZWQuYwo+PiArKysgYi9ibG9jay9ibGstem9uZWQuYwo+PiBAQCAtNDE2LDYgKzQxNiw5IEBAIGlu dCBibGtkZXZfem9uZV9tZ210X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2Rl X3QgbW9kZSwKPj4gIAljYXNlIEJMS19aT05FX01HTVRfUkVTRVQ6Cj4+ICAJCW9wID0gUkVRX09Q X1pPTkVfUkVTRVQ7Cj4+ICAJCWJyZWFrOwo+PiArCWNhc2UgQkxLX1pPTkVfTUdNVF9PRkZMSU5F Ogo+PiArCQlvcCA9IFJFUV9PUF9aT05FX09GRkxJTkU7Cj4+ICsJCWJyZWFrOwo+PiAgCWRlZmF1 bHQ6Cj4+ICAJCXJldHVybiAtRU5PVFRZOwo+PiAgCX0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bnZtZS9ob3N0L2NvcmUuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYwo+PiBpbmRleCBmMTIx NTUyMzc5MmIuLjViOTVjODFkMmEyZCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9udm1lL2hvc3Qv Y29yZS5jCj4+ICsrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYwo+PiBAQCAtNzc2LDYgKzc3 Niw5IEBAIGJsa19zdGF0dXNfdCBudm1lX3NldHVwX2NtZChzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0 cnVjdCByZXF1ZXN0ICpyZXEsCj4+ICAJY2FzZSBSRVFfT1BfWk9ORV9GSU5JU0g6Cj4+ICAJCXJl dCA9IG52bWVfc2V0dXBfem9uZV9tZ210X3NlbmQobnMsIHJlcSwgY21kLCBOVk1FX1pPTkVfRklO SVNIKTsKPj4gIAkJYnJlYWs7Cj4+ICsJY2FzZSBSRVFfT1BfWk9ORV9PRkZMSU5FOgo+PiArCQly ZXQgPSBudm1lX3NldHVwX3pvbmVfbWdtdF9zZW5kKG5zLCByZXEsIGNtZCwgTlZNRV9aT05FX09G RkxJTkUpOwo+PiArCQlicmVhazsKPj4gIAljYXNlIFJFUV9PUF9XUklURV9aRVJPRVM6Cj4+ICAJ CXJldCA9IG52bWVfc2V0dXBfd3JpdGVfemVyb2VzKG5zLCByZXEsIGNtZCk7Cj4+ICAJCWJyZWFr Owo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaCBiL2luY2x1ZGUvbGlu dXgvYmxrX3R5cGVzLmgKPj4gaW5kZXggMTZiNTdmYjJiOTljLi5iMzkyMTI2M2MzZGQgMTAwNjQ0 Cj4+IC0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgKPj4gKysrIGIvaW5jbHVkZS9saW51 eC9ibGtfdHlwZXMuaAo+PiBAQCAtMzE2LDYgKzMxNiw4IEBAIGVudW0gcmVxX29wZiB7Cj4+ICAJ UkVRX09QX1pPTkVfRklOSVNICT0gMTIsCj4+ICAJLyogd3JpdGUgZGF0YSBhdCB0aGUgY3VycmVu dCB6b25lIHdyaXRlIHBvaW50ZXIgKi8KPj4gIAlSRVFfT1BfWk9ORV9BUFBFTkQJPSAxMywKPj4g KwkvKiBUcmFuc2l0aW9uIGEgem9uZSB0byBvZmZsaW5lICovCj4+ICsJUkVRX09QX1pPTkVfT0ZG TElORQk9IDE0LAo+Pgo+PiAgCS8qIFNDU0kgcGFzc3Rocm91Z2ggdXNpbmcgc3RydWN0IHNjc2lf cmVxdWVzdCAqLwo+PiAgCVJFUV9PUF9TQ1NJX0lOCQk9IDMyLAo+PiBAQCAtNDU2LDYgKzQ1OCw3 IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBvcF9pc196b25lX21nbXQoZW51bSByZXFfb3BmIG9wKQo+ PiAgCWNhc2UgUkVRX09QX1pPTkVfT1BFTjoKPj4gIAljYXNlIFJFUV9PUF9aT05FX0NMT1NFOgo+ PiAgCWNhc2UgUkVRX09QX1pPTkVfRklOSVNIOgo+PiArCWNhc2UgUkVRX09QX1pPTkVfT0ZGTElO RToKPj4gIAkJcmV0dXJuIHRydWU7Cj4+ICAJZGVmYXVsdDoKPj4gIAkJcmV0dXJuIGZhbHNlOwo+ PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxr ZGV2LmgKPj4gaW5kZXggYmQ4NTIxZjk0ZGM0Li44MzA4ZDhhMzcyMGIgMTAwNjQ0Cj4+IC0tLSBh L2luY2x1ZGUvbGludXgvYmxrZGV2LmgKPj4gKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAo+ PiBAQCAtMzcyLDcgKzM3Miw2IEBAIGV4dGVybiBpbnQgYmxrZGV2X3pvbmVfb3BzX2lvY3RsKHN0 cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKPj4gIAkJCQkgIHVuc2lnbmVk IGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKPj4gIGV4dGVybiBpbnQgYmxrZGV2X3pvbmVf bWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCj4+ICAJ CQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Cj4+IC0KPj4gICNlbHNl IC8qIENPTkZJR19CTEtfREVWX1pPTkVEICovCj4+Cj4+ICBzdGF0aWMgaW5saW5lIHVuc2lnbmVk IGludCBibGtkZXZfbnJfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spCj4+IGRpZmYgLS1naXQg YS9pbmNsdWRlL3VhcGkvbGludXgvYmxrem9uZWQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ibGt6 b25lZC5oCj4+IGluZGV4IGE4Yzg5ZmU1OGY5Ny4uZDA5NzhlZTEwZmM3IDEwMDY0NAo+PiAtLS0g YS9pbmNsdWRlL3VhcGkvbGludXgvYmxrem9uZWQuaAo+PiArKysgYi9pbmNsdWRlL3VhcGkvbGlu dXgvYmxrem9uZWQuaAo+PiBAQCAtMTU1LDYgKzE1NSw3IEBAIGVudW0gYmxrX3pvbmVfYWN0aW9u IHsKPj4gIAlCTEtfWk9ORV9NR01UX0ZJTklTSAk9IDB4MiwKPj4gIAlCTEtfWk9ORV9NR01UX09Q RU4JPSAweDMsCj4+ICAJQkxLX1pPTkVfTUdNVF9SRVNFVAk9IDB4NCwKPj4gKwlCTEtfWk9ORV9N R01UX09GRkxJTkUJPSAweDUsCj4+ICB9Owo+Pgo+PiAgLyoqCj4+Cj4KPkFzIG1lbnRpb25lZCBp biBwcmV2aW91cyBlbWFpbCwgdGhlIHVzZWZ1bG5lc3Mgb2YgdGhpcyBpcyBkdWJpb3VzLiBQbGVh c2UKPmVsYWJvcmF0ZSBpbiB0aGUgY29tbWl0IG1lc3NhZ2UuIFN1cmUgTlZNZSBaTlMgZGVmaW5l cyB0aGlzIGFuZCB3ZSBjYW4gc3VwcG9ydAo+aXQuIEJ1dCB3aXRob3V0IGEgZ29vZCB1c2UgY2Fz ZSwgd2hhdCBpcyB0aGUgcG9pbnQgPwoKVXNlIGNhc2UgaXMgdG8gdHJhbnNpdGlvbiB6b25lcyBp biByZWFkLW9ubHkgc3RhdGUgdG8gb2ZmbGluZSB3aGVuIHdlCmFyZSBkb25lIG1vdmluZyB2YWxp ZCBkYXRhLiBJdCBpcyBlYXNpZXIgdG8gZXhwbGljaXRseSBtYW5hZ2luZyB6b25lcwp0aGF0IGFy ZSBub3QgdXNhYmxlIGJ5IGhhdmluZyBhbGwgdW5kZXIgdGhlIG9mZmxpbmUgc3RhdGUuCgo+Cj5z Y3NpIFNEIGRyaXZlciB3aWxsIHJldHVybiBCTEtfU1RTX05PVFNVUFAgaWYgdGhpcyBvZmZsaW5p bmcgaXMgc2VudCB0byBhCj5aQkMvWkFDIGRyaXZlLiBOb3QgbmljZS4gSGF2aW5nIGEgc3lzZnMg YXR0cmlidXRlICJtYXhfb2ZmbGluZV96b25lX3NlY3RvcnMiIG9yCj50aGUgbGlrZSB0byBpbmRp Y2F0ZSBzdXBwb3J0IGJ5IHRoZSBkZXZpY2Ugb3Igbm90IHdvdWxkIGJlIG5pY2VyLgoKV2UgY2Fu IGRvIHRoYXQuCgo+Cj5Eb2VzIG9mZmxpbmcgQUxMIHpvbmVzIG1ha2UgYW55IHNlbnNlID8gQmVj YXVzZSB0aGlzIHBhdGNoIGRvZXMgbm90IHByZXZlbnQgdGhlCj51c2Ugb2YgdGhlIFJFUV9aT05F X0FMTCBmbGFncyBpbnRyb2R1Y2VkIGluIHBhdGNoIDIuIFByb2JhYmx5IG5vdCBhIGdvb2QgaWRl YSB0bwo+YWxsb3cgb2ZmbGluaW5nIGFsbCB6b25lcywgbm8gPwoKQUZBSUsgdGhlIHRyYW5zaXRp b24gdG8gb2ZmbGluZSBpcyBvbmx5IHZhbGlkIHdoZW4gY29taW5nIGZyb20gYQpyZWFkLW9ubHkg c3RhdGUuIEkgZGlkIHRoaW5rIG9mIGFkZGluZyBhIGNoZWNrLCBidXQgSSBjYW4gc2VlIHRoYXQg b3RoZXIKdHJhbnNpdGlvbnMgZ28gZGlyZWN0bHkgdG8gdGhlIGRyaXZlciBhbmQgdGhlbiB0aGUg ZGV2aWNlLCBzbyBJIGRlY2lkZWQKdG8gZm9sbG93IHRoZSBzYW1lIG1vZGVsLiBJZiB5b3UgdGhp bmsgaXQgaXMgYmV0dGVyLCB3ZSBjYW4gYWRkIHRoZQpjaGVjay4KCkphdmllcgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtbnZtZSBtYWlsaW5n IGxpc3QKTGludXgtbnZtZUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbnZtZQo=