From nobody Thu Apr 2 23:54:50 2026 Received: from mail-dy1-f182.google.com (mail-dy1-f182.google.com [74.125.82.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 15BA37404E for ; Sat, 14 Feb 2026 04:28:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771043320; cv=none; b=oRruJMfln9R6PvKrIIdtt6LyLs2ytyndFf1Acg2pFqMfPGc6Ll1hEyXm0DJ3VynkfYI7ZjLwC/x6YuFJUmrPCgtzfGo1oqSkxy38KxmwDVwcuaehses631eFI/fBQefKRad0K48soAyME0zmHETqrKVqfOI8CS+OxNOImLymP6w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771043320; c=relaxed/simple; bh=HtHr6JewgH5QgRGWBcJc8AhgYfwYel9RsTrenRXrXeM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LONbSb2qa81C+zQT8iNON4DmxpM/HzZsa7/CeASVrGbFpIy/a3jvmdiu4kG9P+2TDcNmJppKs4GgV3g5gggFPOOBw7aWRwys7VU1e2mWO2PuhTVcGbbLlBJtZKPUDLWcP4NYL/CSJvFFLduLclXha0JholR5L6sIGkitlpafKBY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=BSj3/2jv; arc=none smtp.client-ip=74.125.82.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="BSj3/2jv" Received: by mail-dy1-f182.google.com with SMTP id 5a478bee46e88-2b82c605dbdso3189512eec.0 for ; Fri, 13 Feb 2026 20:28:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1771043315; x=1771648115; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oVheserzpS3TkYHKpvBl78HcBp8VYTBPF64haSBCcyY=; b=BSj3/2jvBQgg7iSrjuUe+JQAi1VK3Gc5hfaFcKvYZT+jWBSLePDzo+ITXiYRUa7IRZ d/Rl4PgzxfAym4imG3jMXkYlpTzlMFqh67XfrMTrp7fd6O1l4BWdBS20AQDgTfW9YjZc UzMsqTXHDIa0dp6Mz0OM7nhUkMtfVQWezUluOc2TXcaLAnHPxbIQcMzSr0ez1BxP1XFk HgO5/jyBPyfgNFdCpKewT+3EC9ae8zDAMX3guV0D8q2GjhCPTSzSxUIbIgP5V2Ign/bT SjBZcgsdkxIUXZucEgfXshVR92LBbh/vuZeHOaCvn4BrAYAASKfFdYBfKvsKknI/vHq2 vIqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771043315; x=1771648115; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=oVheserzpS3TkYHKpvBl78HcBp8VYTBPF64haSBCcyY=; b=BNspQzWJMsKLevd4qKEuS/O14bymBt3m2frFbggTmKLDd4N4L0/jt6k1yvd9q/nRMS k++ZIfXWy3swoBzSLrqAZcsq5Le2W+lIqyoh9j+zE/W7rOQ/q63HsxMvHQ9qOr4YNTsm lbP3aVhtgVh35bd/qkq3SyyfRSWE/r9dK3aVsXpSW1WZHwXl+bm8qjMP40i/lILX+yoK lY56sGik2nVPxr2PIF+D3jZHDjdXHOtCRhdvBg8r31MH99dkApLwJt/iFcGwKgPx3XU3 4mS4u+meXyqAVEBnv7VmMOqPnu4DJKct4QTgkaqp0phRMqLXDtABuO5CKtkYJZdI9HG+ +sGw== X-Forwarded-Encrypted: i=1; AJvYcCUWkDaVrWp0PCvDPUuGe6XXGfpZNq9ja1umD2EM/thxGY3z3qVeM6dw6apLGuH9JX4giqL0XRn/enA7I+8=@vger.kernel.org X-Gm-Message-State: AOJu0Yw3mzUyFgWHnRVLqxnNcbuMz+3BHSD7TmKZQlWB61UvjMO1xIuF ZfNNSyv0S62NSzwrxOOsskG44d/fZsay6GwDdd6KqRLTqNd2NpBCCg5gU9cTzoL1fnI= X-Gm-Gg: AZuq6aLWj9sVl++ybAAdOAPS7Vn/xRQvM2mSRn4rvImUh0j52AlpUUHUIZ9xpkcMTEb tu3/5FeA12deXkLjRopQ/Js715hiNSYU25Vq6LKKYIUA/3DQZk058uH2mZXT7Db3S5J5/47uKgC B58Z8rP0J8d6bgv9xWlKoh8Pk5yuKIwIB6Z/meJuOVh/gm0njnfnWSf2hnBr8AI7rQpGCETLXkH Da9K6L8WPButc9OwLqHefzAunX8AOmMbzNv3NujuD+1K+PTlq7c9nxnia/59sC8CahrTY1CWSok btX/3XpVoZc7LBQe3vYcdqkUswRH7Ts3MBBp8tja5hcsV7DKHRHPbvVpkhkICjb5OLM/IWJz0Gl EKGnini853k4NmSeeYbvfl/JyKeSizOtI+WsH020NF/v09yb44SluElzltSqM9v+DmZXxxrribI pb2eezXqro4LYq7/0fMOL4ijsfUt9Q9oRiIiWq4Xzv79eu5g== X-Received: by 2002:a05:7022:b93:b0:11d:f682:e475 with SMTP id a92af1059eb24-1273aea73d4mr1856668c88.40.1771043314988; Fri, 13 Feb 2026 20:28:34 -0800 (PST) Received: from apollo.purestorage.com ([208.88.152.253]) by smtp.googlemail.com with ESMTPSA id a92af1059eb24-12742cbc900sm1021042c88.14.2026.02.13.20.28.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Feb 2026 20:28:34 -0800 (PST) From: Mohamed Khalfella To: Justin Tee , Naresh Gottumukkala , Paul Ely , Chaitanya Kulkarni , Christoph Hellwig , Jens Axboe , Keith Busch , Sagi Grimberg , James Smart , Hannes Reinecke Cc: Aaron Dailey , Randy Jennings , Dhaval Giani , linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, Mohamed Khalfella Subject: [PATCH v3 17/21] nvme: Add support for CQT to nvme host Date: Fri, 13 Feb 2026 20:25:18 -0800 Message-ID: <20260214042753.4073668-18-mkhalfella@purestorage.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260214042753.4073668-1-mkhalfella@purestorage.com> References: <20260214042753.4073668-1-mkhalfella@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" TP4129 KATO Corrections and Clarifications defined CQT (Command Quiesce Time) which is used along with KATO (Keep Alive Timeout) to set an upper limit for attempting Cross-Controller Recovery. Add ctrl->cqt and read its value from controller identify response. Update fence timeout to consider ctrl->cqt. Signed-off-by: Mohamed Khalfella --- drivers/nvme/host/core.c | 1 + drivers/nvme/host/nvme.h | 5 +++-- drivers/nvme/host/sysfs.c | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index a9fcde1b411b..0680d05900c1 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -3739,6 +3739,7 @@ static int nvme_init_identify(struct nvme_ctrl *ctrl) ctrl->ciu =3D id->ciu; ctrl->cirn =3D le64_to_cpu(id->cirn); atomic_set(&ctrl->ccr_limit, id->ccrl); + ctrl->cqt =3D le16_to_cpu(id->cqt); =20 ctrl->oacs =3D le16_to_cpu(id->oacs); ctrl->oncs =3D le16_to_cpu(id->oncs); diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index af6a4e83053e..a7f382e35821 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -336,6 +336,7 @@ struct nvme_ctrl { u32 max_zone_append; #endif u16 crdt[3]; + u16 cqt; u16 oncs; u8 dmrl; u8 ciu; @@ -1245,8 +1246,8 @@ static inline bool nvme_multi_css(struct nvme_ctrl *c= trl) static inline unsigned long nvme_fence_timeout_ms(struct nvme_ctrl *ctrl) { if (ctrl->ctratt & NVME_CTRL_ATTR_TBKAS) - return 3 * ctrl->kato * 1000; - return 2 * ctrl->kato * 1000; + return 3 * ctrl->kato * 1000 + ctrl->cqt; + return 2 * ctrl->kato * 1000 + ctrl->cqt; } =20 #endif /* _NVME_H */ diff --git a/drivers/nvme/host/sysfs.c b/drivers/nvme/host/sysfs.c index 1e4261144933..0234e11730bb 100644 --- a/drivers/nvme/host/sysfs.c +++ b/drivers/nvme/host/sysfs.c @@ -387,6 +387,7 @@ nvme_show_int_function(numa_node); nvme_show_int_function(queue_count); nvme_show_int_function(sqsize); nvme_show_int_function(kato); +nvme_show_int_function(cqt); =20 static ssize_t nvme_sysfs_ciu_show(struct device *dev, struct device_attribute *attr, @@ -759,6 +760,7 @@ static struct attribute *nvme_dev_attrs[] =3D { &dev_attr_sqsize.attr, &dev_attr_ciu.attr, &dev_attr_cirn.attr, + &dev_attr_cqt.attr, &dev_attr_hostnqn.attr, &dev_attr_hostid.attr, &dev_attr_ctrl_loss_tmo.attr, --=20 2.52.0