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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EC287CD4851 for ; Thu, 14 May 2026 16:59:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:In-Reply-To:Content-Type: MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=OT/DCLf4cfG5L/wf2L3QEZ/tx4VnRKrxyqizpiTBQWI=; b=Ce8OaE6HueRbqk92VEZsb1Xb1R OSGORw1btTXWg6KaXtIXk1/r8ODiYNmTNgeP7ftSE2kPCMYE1IPQjHRbeVawR3g3WYddpe1AwMldH gJDKVW80mNQ/wqaeRXzWRg96FnbJr7AxFKX79EFMzo4jZuiBfm2dLz5YPnS+jv+s60RD1QEyWIdrv sa8F+BRTcOZx30SyQiF6uaKIAVYV0XVaIdGwN/EBvGtIJb9lw1gfOFqXTb2c2v4gpXVCCTtETWSxJ oBnLFR+/YtdSRCpzbJJdQXgSemC001222dlmDpDX+gujg+auaIjeRq6hHzpXHELTHgqnyvADo6tPp fY6JUzsQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wNZPN-000000068jq-1FXP; Thu, 14 May 2026 16:59:37 +0000 Received: from mail-dl1-x1236.google.com ([2607:f8b0:4864:20::1236]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wNZPJ-000000068iu-2Wgy for linux-nvme@lists.infradead.org; Thu, 14 May 2026 16:59:35 +0000 Received: by mail-dl1-x1236.google.com with SMTP id a92af1059eb24-12c8f9846c8so12272560c88.0 for ; Thu, 14 May 2026 09:59:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1778777972; x=1779382772; darn=lists.infradead.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=OT/DCLf4cfG5L/wf2L3QEZ/tx4VnRKrxyqizpiTBQWI=; b=U7m1PFKn8czidRHn4ZKnXfcQ7gNi5KEwrlORqSaHyrLxaXrvknjfaYBcqycF7iiwnZ 1Tw8IMmdO93ojiDe7D6yqp/7QXSIwFgPHTwUBXbmNGLaZ6hfqHdcuschDgRl92Lf7DHa Mc3iZhErS+ZQnCSuw1gzJlHPyNbpI/uTxO3RshYDk/WE31IcLNWNc/P+C09zEa+kKjCA Rtozunfm7rYLLqU1Yal9QwoY6TtgqjGA/48L2bTP8LLjUaNgmoOoS8kA3UhoIXwD2pxT bCj5uvyx/OC179/xthT31m5JHI3yOLa7NYsRwYT/BwFapL53awVyGXNnB0jPz+ggoSbB tvig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778777972; x=1779382772; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OT/DCLf4cfG5L/wf2L3QEZ/tx4VnRKrxyqizpiTBQWI=; b=IKejNF1TAQvloIOjQl5kGCQdLbYzKfLQ+T2wH4qcDH/arbLsEgNgstFmEe20fxrD7z f5fkWH1XeX9Nvp++H+EItHQkryMvxhOcNBu7uHzEdw8s9YsKAN6mWSnVsG3nRhBxNitp mxtp9WpUw4a8UCBYueTqWWMvOn2bR7iuixKI4OMTb56kvn8m7pKv/dRbf49/cgdIxksY dTTzAnuHfbyU2+e7YTcNbGFTsD+ZAe3jm/F11MLErC7wmHYUkVoXroKpOCyst7xdzSfd h8Z947ACylXJpxRk0s0VSLO+65hJSWgmh+RhSCRLReXqijMYrKYNpQEEnkA+scOyVdmf eahw== X-Forwarded-Encrypted: i=1; AFNElJ9SRzzVH71clsbNGMnFG1zGLZAbyzyCi3gPGkhABMRBiBPYYd3yN8MNmBGHW4U8NncJKzwCTy5ThgOV@lists.infradead.org X-Gm-Message-State: AOJu0YxDmkJiviGZa+gR6JwI3Xq93XRtAu4GrJ06ya+W+WwpyrhtILCv VKTyyL0XlIWtR1c4hKcK4YtNy/2uJMoxmxms+KFmGFPmLnjjgHtGePk1HKkFt7AuZbk= X-Gm-Gg: Acq92OHdLaMRtStwoIEMnkKWyOrdqqXbC6/GKFhLVHWaE+pSbLHsmb4A6Kpmzh803e7 TmIgdNdVI1DCd90rLyoGA2ITCml7jh1H1aRfDXy4MqT4HLTjsXQC/aiSH0XQFlfM0Xg4mCfz97u wbznMnLPXn9hnwcyeU1BqqBcOSdwrX39PosUEzA35OAZkPmRFZIQ1hmWAO52S6/TvalXcIpADd9 jEszbQzGD0wWOg+6nEZ2rm3hQSDtCqH+6ez7aKGynwvxhEalBHdlCcaPbsX0tN2WYaCODZdFjzI tNh1kCH3e0CcdtJVJkqontepaUGOxCeK2I4Zi/FhxOC/X4WLBtZ6jMyg3VIFOgpRE3i3GZezuMn hwJCR449SKextoOA/UlbABDiXJ8ijGDdrMO/pypRxrjR92MvVUme8X1ssjNv+lMdJ88lgXWts7b WFVLQojh4OGHP9dlRnp8tL9HQKgRtYjPFM5MlgzW7EOHJX3Pon0hesj6Y= X-Received: by 2002:a05:7022:128c:b0:128:d967:4673 with SMTP id a92af1059eb24-134302598f1mr5645772c88.16.1778777971878; Thu, 14 May 2026 09:59:31 -0700 (PDT) Received: from medusa.lab.kspace.sh ([208.88.152.253]) by smtp.googlemail.com with ESMTPSA id a92af1059eb24-134cc2352f2sm5260267c88.10.2026.05.14.09.59.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 May 2026 09:59:31 -0700 (PDT) Date: Thu, 14 May 2026 09:59:29 -0700 From: Mohamed Khalfella To: Maurizio Lombardi Cc: kbusch@kernel.org, mheyne@amazon.de, emilne@redhat.com, jmeneghi@redhat.com, linux-nvme@lists.infradead.org, dwagner@suse.de, mlombard@arkamax.eu, chaitanyak@nvidia.com, hare@kernel.org, hch@lst.de Subject: Re: [PATCH V5 3/7] nvme: add sysfs attribute to change admin timeout per nvme controller Message-ID: <20260514165929.GJ10532-mkhalfella@purestorage.com> References: <20260514083255.41109-1-mlombard@redhat.com> <20260514083255.41109-4-mlombard@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260514083255.41109-4-mlombard@redhat.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260514_095933_679127_32E4532A X-CRM114-Status: GOOD ( 26.85 ) X-BeenThere: linux-nvme@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-nvme" Errors-To: linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org On Thu 2026-05-14 10:32:51 +0200, Maurizio Lombardi wrote: > Currently, there is no method to adjust the timeout values on a > per-controller basis with nvme admin queues. > Add an admin_timeout attribute to nvme so that different nvme controllers > which may have different timeout requirements can have custom admin > timeouts set. > > The admin timeout is also applied to the fabrics queue (fabrics_q). > The fabrics queue is utilized for fabric-specific administrative and > control operations, such as Connect and Property Get/Set commands. > > Reviewed-by: Daniel Wagner > Reviewed-by: Sagi Grimberg > Signed-off-by: Maurizio Lombardi Reviewed-by: Mohamed Khalfella > --- > drivers/nvme/host/core.c | 1 + > drivers/nvme/host/nvme.h | 1 + > drivers/nvme/host/pci.c | 2 +- > drivers/nvme/host/sysfs.c | 41 +++++++++++++++++++++++++++++++++++++++ > 4 files changed, 44 insertions(+), 1 deletion(-) > > diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c > index 84f295e3bf08..fe6dcd19cecb 100644 > --- a/drivers/nvme/host/core.c > +++ b/drivers/nvme/host/core.c > @@ -5144,6 +5144,7 @@ int nvme_init_ctrl(struct nvme_ctrl *ctrl, struct device *dev, > memset(&ctrl->ka_cmd, 0, sizeof(ctrl->ka_cmd)); > ctrl->ka_cmd.common.opcode = nvme_admin_keep_alive; > ctrl->ka_last_check_time = jiffies; > + ctrl->admin_timeout = NVME_ADMIN_TIMEOUT; > > BUILD_BUG_ON(NVME_DSM_MAX_RANGES * sizeof(struct nvme_dsm_range) > > PAGE_SIZE); nvme_alloc_admin_tag_set() uses NVME_ADMIN_TIMEOUT. Do we want to replace that with ctrl->admin_timeout? > diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h > index 6f9ecb4948f4..7923533cce00 100644 > --- a/drivers/nvme/host/nvme.h > +++ b/drivers/nvme/host/nvme.h > @@ -370,6 +370,7 @@ struct nvme_ctrl { > u16 mtfa; > u32 ctrl_config; > u32 queue_count; > + u32 admin_timeout; > > u64 cap; > u32 max_hw_sectors; > diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c > index 8dc353451b21..80d2e517aac3 100644 > --- a/drivers/nvme/host/pci.c > +++ b/drivers/nvme/host/pci.c > @@ -3096,7 +3096,7 @@ static bool __nvme_delete_io_queues(struct nvme_dev *dev, u8 opcode) > unsigned long timeout; > > retry: > - timeout = NVME_ADMIN_TIMEOUT; > + timeout = dev->ctrl.admin_timeout; > while (nr_queues > 0) { > if (nvme_delete_queue(&dev->queues[nr_queues], opcode)) > break; > diff --git a/drivers/nvme/host/sysfs.c b/drivers/nvme/host/sysfs.c > index e59758616f27..3b39b64cd9da 100644 > --- a/drivers/nvme/host/sysfs.c > +++ b/drivers/nvme/host/sysfs.c > @@ -623,6 +623,46 @@ static ssize_t quirks_show(struct device *dev, struct device_attribute *attr, > } > static DEVICE_ATTR_RO(quirks); > > +static ssize_t nvme_admin_timeout_show(struct device *dev, > + struct device_attribute *attr, char *buf) > +{ > + struct nvme_ctrl *ctrl = dev_get_drvdata(dev); > + > + return sysfs_emit(buf, "%u\n", > + jiffies_to_msecs(ctrl->admin_timeout)); > +} > + > +static ssize_t nvme_admin_timeout_store(struct device *dev, > + struct device_attribute *attr, > + const char *buf, size_t count) > +{ > + struct nvme_ctrl *ctrl = dev_get_drvdata(dev); > + u32 timeout; > + int err; > + > + /* > + * Wait until the controller reaches the LIVE state to be sure that > + * admin_q and fabrics_q are properly initialized. > + */ > + if (!test_bit(NVME_CTRL_STARTED_ONCE, &ctrl->flags)) > + return -EBUSY; > + > + err = kstrtou32(buf, 10, &timeout); > + if (err || !timeout) > + return -EINVAL; > + > + ctrl->admin_timeout = msecs_to_jiffies(timeout); > + > + blk_queue_rq_timeout(ctrl->admin_q, ctrl->admin_timeout); > + if (ctrl->fabrics_q) > + blk_queue_rq_timeout(ctrl->fabrics_q, ctrl->admin_timeout); > + > + return count; > +} > + > +static DEVICE_ATTR(admin_timeout, S_IRUGO | S_IWUSR, > + nvme_admin_timeout_show, nvme_admin_timeout_store); > + > #ifdef CONFIG_NVME_HOST_AUTH > static ssize_t nvme_ctrl_dhchap_secret_show(struct device *dev, > struct device_attribute *attr, char *buf) > @@ -765,6 +805,7 @@ static struct attribute *nvme_dev_attrs[] = { > &dev_attr_cntrltype.attr, > &dev_attr_dctype.attr, > &dev_attr_quirks.attr, > + &dev_attr_admin_timeout.attr, > #ifdef CONFIG_NVME_HOST_AUTH > &dev_attr_dhchap_secret.attr, > &dev_attr_dhchap_ctrl_secret.attr, > -- > 2.54.0 >