From nobody Mon Feb 9 07:20:35 2026 Received: from mail-dl1-f52.google.com (mail-dl1-f52.google.com [74.125.82.52]) (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 5552938A728 for ; Fri, 30 Jan 2026 22:36:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769812595; cv=none; b=lHTZHdErCZ5cB6aKZFVGZrPWkjvOAtrUqYzCTtO8XX8mgxKny5EgKke6ZL6DzYlEw6os+UsK3I37zQAeZor0tIvc4oS+yaW70EWriiTM1LHB1Vu4+MtgPpLub5hGeskT1iGDrtSVsFe1Xk01ALSUpFhZWp3LNjd5MY2I2rcsrE4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769812595; c=relaxed/simple; bh=URQ1XMCWlLNVomKc60HFCpi+RzOzz75KlJGEQqBAS5Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qrRGH3Pp1yL9ddcnWKBjf/gcm0WSPk7fG8GuZGYfDoQVKTplh4qDizPXg2VAPbu85lm0KdearmEsMwj0bBj7zAh66/8gj3G2FdDbNfCsmAJWmW73mI4q/cOHSth6ku7ZDzDSRlSlZzXkt8J37wm5iy8hsXCuZ23uTkPJ1K734bA= 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=DCcg2Cbc; arc=none smtp.client-ip=74.125.82.52 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="DCcg2Cbc" Received: by mail-dl1-f52.google.com with SMTP id a92af1059eb24-124877d78a6so3345017c88.1 for ; Fri, 30 Jan 2026 14:36:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1769812589; x=1770417389; 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=3tS4KzqYbhEL6jev7Qh8Wf78xstwgPnfDr7XEbpNCcA=; b=DCcg2CbcvhuxpWJ8OX2afEzpbuYJpdl1sWSioQHErpcUmu0vsgNgSUZh9DbJSSYs8F KjnzgsMrLAdPT7SU5LeYKcXEYcO3V1mReh/mDE9YgTCcTHNd4/NXhP3WV44hvGjzyitw eqYxFCzjGu3ehjH0uB7kyJ6l8lpNexTxfkPaoAP1gjWBFvgpbPanixTu/XDJmqL8ydzO 0iGPWCE5E3IO4AA+UHsVxxbyjxwRTIGRtAlrR/VkSzWi3b83XvRypPuoOHXhumSrYS38 OHgObkWOaS1jPyOg8N4QePJqg1+U+vXkwdNeu7nbxbiAp7YJNRPhl5npQN0p+rswHh2o s3sQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769812589; x=1770417389; 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=3tS4KzqYbhEL6jev7Qh8Wf78xstwgPnfDr7XEbpNCcA=; b=ELur/AuXGuevXymTv1yqqo6bn7r+aBB2qgzDfNlHgYIk+IGRPf6MWdNI+uF2bAdQa2 PO3bym5q+e9aBFEx98fM4A9p+Oac0mNRLtaIZ/fIopj29voKX7S0pV5rGn4j/UopuRcS ZykFBDtCQDhbci7BVDtqkiPrJhCemNaL5nOJq4xDBLM0zj9bAnd5At0Jz7SsDYM36lpD gur0MUljfDV+W6OSmO/eHtW+Y5aq0ndwVdJOOkSR/a2ifCeUG2/38KS5OqsULxmsxpLf qAGlouo+s/JR4Sl1frjToaQ3uWJSrwkLaE8FD/4UrBn3qFxbYY5UAsKNkGSCHvHxmsca 61sw== X-Forwarded-Encrypted: i=1; AJvYcCXJbomhrdO0OLQcDP2JpVjcVnxHLdGJ58Z/SNnp4+ZlSlS8Yap+HneO0VD2ZIfZRnWFzImNTulUvxEBYic=@vger.kernel.org X-Gm-Message-State: AOJu0YxuMqTJV4yBuNl+gKK85Hol+5xIe2qsL6fNX1N+a4TgTOJPmZrx yJeX2/M3LYFc1kccIUdikM7iQzvdtsDru5cKbsF2Cb0iK2cJIgudtXR66CJ9/7h8FjY= X-Gm-Gg: AZuq6aLzWR2FTttopcnC1cM2hu49T/cJm0JHgUFFmet88XtkSc3kRskkxY2W0pye6po KKNRuEUfrM4USU8QWL+74aeX0vdnp5LkeVTzWfyZwCcC0n+qzUMRsozVbf7tn+lcrzY88wo6bpt ZZPJumWjLZs3In1gxAYUXAx1ZuK6Zw8v6WFYgaJ0NK9U9elxQRKnwUlTAOVGes+BFnur2SiVhnh u+fsR4CWNtBkHIsEAvn8VvSKLPQ77Kp6kV9Y/dbtLNj2Y0e3I/pSvRRCc9OevhSf1xoXcfn5vBg GW+Q6AyzEX6hpa9xpBZYKCparzyoLzORIPLvPlWroSmvYlD5NyrFshBKtgX+6ZOrAjogwhYO2bA CU6x/THtcc2jtjokhwlWpVFTu7k2gm+8uIqZrbZQCYnt+Y8sAuERfLyG32tM3sCloKF1Au19SYm dJT8LN5futdPhyl9y/priU7S8wcD2oVMTv9A== X-Received: by 2002:a05:7022:e98d:b0:11e:65b5:75ce with SMTP id a92af1059eb24-125c0f9ab5fmr1931557c88.10.1769812589406; Fri, 30 Jan 2026 14:36:29 -0800 (PST) Received: from apollo.purestorage.com ([208.88.152.253]) by smtp.googlemail.com with ESMTPSA id a92af1059eb24-124a9d6b906sm13161717c88.4.2026.01.30.14.36.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jan 2026 14:36:29 -0800 (PST) From: Mohamed Khalfella To: Justin Tee , Naresh Gottumukkala , Paul Ely , Chaitanya Kulkarni , Christoph Hellwig , Jens Axboe , Keith Busch , Sagi Grimberg Cc: Aaron Dailey , Randy Jennings , Dhaval Giani , Hannes Reinecke , linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, Mohamed Khalfella Subject: [PATCH v2 06/14] nvme: Rapid Path Failure Recovery read controller identify fields Date: Fri, 30 Jan 2026 14:34:10 -0800 Message-ID: <20260130223531.2478849-7-mkhalfella@purestorage.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260130223531.2478849-1-mkhalfella@purestorage.com> References: <20260130223531.2478849-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" TP8028 Rapid path failure added new fileds to controller identify response. Read CIU (Controller Instance Uniquifier), CIRN (Controller Instance Random Number), and CCRL (Cross-Controller Reset Limit) from controller identify response. Expose CIU and CIRN as sysfs attributes so the values can be used directrly by user if needed. 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. Signed-off-by: Mohamed Khalfella Reviewed-by: Hannes Reinecke Reviewed-by: Sagi Grimberg --- drivers/nvme/host/core.c | 5 +++++ drivers/nvme/host/nvme.h | 11 +++++++++++ drivers/nvme/host/sysfs.c | 23 +++++++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 7bf228df6001..8961d612ccb0 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -3571,6 +3571,11 @@ static int nvme_init_identify(struct nvme_ctrl *ctrl) ctrl->crdt[1] =3D le16_to_cpu(id->crdt2); ctrl->crdt[2] =3D le16_to_cpu(id->crdt3); =20 + 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); + ctrl->oacs =3D le16_to_cpu(id->oacs); ctrl->oncs =3D le16_to_cpu(id->oncs); ctrl->mtfa =3D le16_to_cpu(id->mtfa); diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index 9a5f28c5103c..9dd9f179ad88 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -326,13 +326,17 @@ struct nvme_ctrl { u32 max_zone_append; #endif u16 crdt[3]; + u16 cqt; u16 oncs; u8 dmrl; + u8 ciu; u32 dmrsl; + u64 cirn; u16 oacs; u16 sqsize; u32 max_namespaces; atomic_t abort_limit; + atomic_t ccr_limit; u8 vwc; u32 vs; u32 sgls; @@ -1225,4 +1229,11 @@ static inline bool nvme_multi_css(struct nvme_ctrl *= ctrl) return (ctrl->ctrl_config & NVME_CC_CSS_MASK) =3D=3D NVME_CC_CSS_CSI; } =20 +static inline unsigned long nvme_fence_timeout_ms(struct nvme_ctrl *ctrl) +{ + if (ctrl->ctratt & NVME_CTRL_ATTR_TBKAS) + return 3 * ctrl->kato * 1000 + ctrl->cqt; + return 2 * ctrl->kato * 1000 + ctrl->cqt; +} + #endif /* _NVME_H */ diff --git a/drivers/nvme/host/sysfs.c b/drivers/nvme/host/sysfs.c index 29430949ce2f..f81bbb6ec768 100644 --- a/drivers/nvme/host/sysfs.c +++ b/drivers/nvme/host/sysfs.c @@ -388,6 +388,27 @@ nvme_show_int_function(queue_count); nvme_show_int_function(sqsize); nvme_show_int_function(kato); =20 +static ssize_t nvme_sysfs_ciu_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct nvme_ctrl *ctrl =3D dev_get_drvdata(dev); + + return sysfs_emit(buf, "%02x\n", ctrl->ciu); +} +static DEVICE_ATTR(ciu, S_IRUGO, nvme_sysfs_ciu_show, NULL); + +static ssize_t nvme_sysfs_cirn_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct nvme_ctrl *ctrl =3D dev_get_drvdata(dev); + + return sysfs_emit(buf, "%016llx\n", ctrl->cirn); +} +static DEVICE_ATTR(cirn, S_IRUGO, nvme_sysfs_cirn_show, NULL); + + static ssize_t nvme_sysfs_delete(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) @@ -734,6 +755,8 @@ static struct attribute *nvme_dev_attrs[] =3D { &dev_attr_numa_node.attr, &dev_attr_queue_count.attr, &dev_attr_sqsize.attr, + &dev_attr_ciu.attr, + &dev_attr_cirn.attr, &dev_attr_hostnqn.attr, &dev_attr_hostid.attr, &dev_attr_ctrl_loss_tmo.attr, --=20 2.52.0