From nobody Fri Apr  4 10:58:09 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
ARC-Seal: i=1; a=rsa-sha256; t=1740648764; cv=none;
	d=zohomail.com; s=zohoarc;
	b=S+7QAUi06xa7DnG8uT4+HmIu4hYUgtXkv1aM9qpp0zO82V036zstpaqH6lPh5ZNsNNoKwbfbBu9FwQiU5Z1xDVl5lgfXD5sHH/GsMTuGkK3nHHKbum42ZPSfjHcZpR2h55mYeU5bgXRAv5estjTwJdimUO7KACgeOSiwAOe5CZI=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1740648764;
 h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To;
	bh=dAVRViJuqfc0dcxFnHqF/2fKV606ih1LEeXwmuraMI0=;
	b=CjDMaCtLmzj8c8fAMHYkFMaPn46MLabz2Xvb4bgsbDa25in4ibTFe4ijKeiJpJuT+adIkqAoVYzSUI3SBewHrXj9tYAup0io0iIrLvrawh9PbLHmTwF+oEJadNOo85ne1R+QWoOlp+jJqZg07G2r2aovWLSz2rwFrs7fnXQADik=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1740648764345658.3108831892087;
 Thu, 27 Feb 2025 01:32:44 -0800 (PST)
Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces@nongnu.org>)
	id 1tnaDx-0007jj-DW; Thu, 27 Feb 2025 04:30:33 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaDu-0007co-8x; Thu, 27 Feb 2025 04:30:30 -0500
Received: from fout-a6-smtp.messagingengine.com ([103.168.172.149])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaDr-0008EQ-NK; Thu, 27 Feb 2025 04:30:29 -0500
Received: from phl-compute-11.internal (phl-compute-11.phl.internal
 [10.202.2.51])
 by mailfout.phl.internal (Postfix) with ESMTP id 19B591382F68;
 Thu, 27 Feb 2025 04:30:26 -0500 (EST)
Received: from phl-mailfrontend-01 ([10.202.2.162])
 by phl-compute-11.internal (MEProxy); Thu, 27 Feb 2025 04:30:26 -0500
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu,
 27 Feb 2025 04:30:22 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk;
 h=cc:cc:content-transfer-encoding:content-type:date:date:from
 :from:in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to; s=fm3; t=1740648626; x=
 1740735026; bh=dAVRViJuqfc0dcxFnHqF/2fKV606ih1LEeXwmuraMI0=; b=e
 Bwt5stGTMeh8ACYRWw53kbt2r9TCf4fqR+C0JxRd2vHxEOhKebE4UbfDIXiv7qtP
 2R3nZJZfKyMJYjcc4ehgoaG0wOV35Tt6bxQIamDEXoGIIWgy6UrlCIF49xxTPqBi
 beaevuLiaBGmkRrcrAI0KcugxhcDB97KhFylyynfc7A99KQGBgtGdafDK0AuK2+U
 bur1A6Vbe8BfjWFnS3TDNEDJS9qQ7gEnWrH/vXglU8Nn+bJpWldTZWrAXVY6G7T4
 pbQtpkunlKYJKP4nAnmP3t89sZTCSdN3G+ttsVmGQuQbHQ70ftizWcOM4zqAipa4
 lPpB/autY42VAyHFcb08w==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:date:date:feedback-id:feedback-id:from:from
 :in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender
 :x-me-sender:x-sasl-enc; s=fm1; t=1740648626; x=1740735026; bh=d
 AVRViJuqfc0dcxFnHqF/2fKV606ih1LEeXwmuraMI0=; b=wM6u1ZfynP+nHxeK4
 Vq2yTrJWAWCX6hQS73XrZLB3nQf2Zr8TMjB3bL/xVOXN7DJYSfv+7iesvolxRmt+
 CfyQ/gVNtAlwJ5wxmgoOTvmRJ7p0Q3wjtfmcN4PYf4OOFtRHnCo95HYJzxv9sAdc
 CmRIJyiGSOcESvqVxiYJwfdeLixm2nSSestoA5EJLwdm8aSvTDcdKR1fRFgVGkls
 a76QSsNAbKa+EDufyONeMukt3ZDslKO+6UB/ISPN0Jrg1WYq7uv9UD1iN0ScBxh6
 l//5a5UdeVptcWoTexsz1stXMgnvhKfwT4R8EGfqONnwDf6ezXoT+fhR+l+RzcFJ
 lwYvA==
X-ME-Sender: <xms:sTDAZ4knRVerQ2mH0u5EdwZszuMTlEJx8eAirJ3j5bW8HmCDcGu9ng>
 <xme:sTDAZ30HOdKmz2Rx5MN5hxqxr421eaSNu_uPGsFe407x0HIBy4wtVevDvzxsjOUkT
 KTPnOkJ_tXFr-mGQKo>
X-ME-Received: 
 <xmr:sTDAZ2rWngNh2PaKFbUMQMk1u_7VrBRByv9jl06QzCK1hIloci2BWa3DgJWSarP7R4PETzKGY5BeOxg_oIImXHv0>
X-ME-Proxy-Cause: 
 gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdekjedutdcutefuodetggdotefrod
 ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpggftfghnshhusghstghrihgsvgdp
 uffrtefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivg
 hnthhsucdlqddutddtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddt
 necuhfhrohhmpefmlhgruhhsucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnth
 drughkqeenucggtffrrghtthgvrhhnpeeguedtleehvdevfefhvefftdfgveejjeefgfek
 ffejffeuueehuddtteduuddtgeenucffohhmrghinhepohhpvghntghomhhpuhhtvgdroh
 hrghdpnhhvmhgvgihprhgvshhsrdhorhhgnecuvehluhhsthgvrhfuihiivgeptdenucfr
 rghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukhdpnhgspg
 hrtghpthhtohepudegpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehqvghmuhdq
 uggvvhgvlhesnhhonhhgnhhurdhorhhgpdhrtghpthhtohepphgvthgvrhdrmhgrhiguvg
 hllheslhhinhgrrhhordhorhhgpdhrtghpthhtohepshgsrghtvghssehrrghithhhlhhi
 nhdrtghomhdprhgtphhtthhopehjrdhgrhgrnhgrughoshesshgrmhhsuhhnghdrtghomh
 dprhgtphhtthhopehkrdhjvghnshgvnhesshgrmhhsuhhnghdrtghomhdprhgtphhtthho
 pehksghushgthheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepihhtshesihhrrhgvlh
 gvvhgrnhhtrdgukhdprhgtphhtthhopehfohhsshesuggvfhhmrggtrhhordhithdprhgt
 phhtthhopehsthgvfhgrnhhhrgesrhgvughhrghtrdgtohhm
X-ME-Proxy: <xmx:sTDAZ0nz3xmyhumF93fVNfXBxXv7je07Chq1QLf7kwFDdVYPrA2akQ>
 <xmx:sTDAZ23wfQokqUSNX9ZkxIebWp0K8shWR5u4wtBipepVXo6bJX5wbQ>
 <xmx:sTDAZ7voA0mWK3sPDxEUOBfGN_BAMezfhpOp1DDttp5Imn6Wb7U_OQ>
 <xmx:sTDAZyWrw8KVycdep9oOB3FHD_ROwfQyOBVCigZ9mNkvBCw4PyHfJg>
 <xmx:sjDAZwPA2Q8sKgNHUvv5_YZ7fOJwnI9WXcHvQoNE-mDGZhhfHQMW6jf1>
Feedback-ID: idc91472f:Fastmail
From: Klaus Jensen <its@irrelevant.dk>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
 Stephen Bates <sbates@raithlin.com>,
 Joel Granados <j.granados@samsung.com>,
 Klaus Jensen <k.jensen@samsung.com>, Keith Busch <kbusch@kernel.org>,
 Klaus Jensen <its@irrelevant.dk>, Jesper Devantier <foss@defmacro.it>,
 Stefan Hajnoczi <stefanha@redhat.com>, Fam Zheng <fam@euphon.net>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <philmd@linaro.org>,
 Kevin Wolf <kwolf@redhat.com>, Hanna Reitz <hreitz@redhat.com>,
 qemu-block@nongnu.org
Subject: [PULL 01/10] hw/nvme: Add OCP SMART / Health Information Extended Log
 Page
Date: Thu, 27 Feb 2025 10:30:08 +0100
Message-ID: <20250227093018.11262-2-its@irrelevant.dk>
X-Mailer: git-send-email 2.47.2
In-Reply-To: <20250227093018.11262-1-its@irrelevant.dk>
References: <20250227093018.11262-1-its@irrelevant.dk>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=103.168.172.149; envelope-from=its@irrelevant.dk;
 helo=fout-a6-smtp.messagingengine.com
X-Spam_score_int: -27
X-Spam_score: -2.8
X-Spam_bar: --
X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org
X-ZohoMail-DKIM: pass (identity @irrelevant.dk)
X-ZM-MESSAGEID: 1740648767118019100
Content-Type: text/plain; charset="utf-8"

From: Stephen Bates <sbates@raithlin.com>

The Open Compute Project [1] includes a Datacenter NVMe
SSD Specification [2]. The most recent version of this specification
(as of November 2024) is 2.6.1. This specification layers on top of
the NVM Express specifications [3] to provide additional
functionality. A key part of of this is the 512 Byte OCP SMART / Health
Information Extended log page that is defined in Section 4.8.6 of the
specification.

We add a controller argument (ocp) that toggles on/off the SMART log
extended structure.  To accommodate different vendor specific specifications
like OCP, we add a multiplexing function (nvme_vendor_specific_log) which
will route to the different log functions based on arguments and log ids.
We only return the OCP extended SMART log when the command is 0xC0 and ocp
has been turned on in the nvme argumants.

Though we add the whole nvme SMART log extended structure, we only populate
the physical_media_units_{read,written}, log_page_version and
log_page_uuid.

This patch is based on work done by Joel but has been modified enough
that he requested a co-developed-by tag rather than a signed-off-by.

[1]: https://www.opencompute.org/
[2]: https://www.opencompute.org/documents/datacenter-nvme-ssd-specificatio=
n-v2-6-1-pdf
[3]: https://nvmexpress.org/specifications/

Signed-off-by: Stephen Bates <sbates@raithlin.com>
Co-developed-by: Joel Granados <j.granados@samsung.com>
Reviewed-by: Klaus Jensen <k.jensen@samsung.com>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 docs/system/devices/nvme.rst |  7 +++++
 hw/nvme/ctrl.c               | 59 ++++++++++++++++++++++++++++++++++++
 hw/nvme/nvme.h               |  1 +
 include/block/nvme.h         | 41 +++++++++++++++++++++++++
 4 files changed, 108 insertions(+)

diff --git a/docs/system/devices/nvme.rst b/docs/system/devices/nvme.rst
index d2b1ca96455f..6509b35fcb4e 100644
--- a/docs/system/devices/nvme.rst
+++ b/docs/system/devices/nvme.rst
@@ -53,6 +53,13 @@ parameters.
   Vendor ID. Set this to ``on`` to revert to the unallocated Intel ID
   previously used.
=20
+``ocp`` (default: ``off``)
+  The Open Compute Project defines the Datacenter NVMe SSD Specification t=
hat
+  sits on top of NVMe. It describes additional commands and NVMe behaviors
+  specific for the Datacenter. When this option is ``on`` OCP features suc=
h as
+  the SMART / Health information extended log become available in the
+  controller. We emulate version 5 of this log page.
+
 Additional Namespaces
 ---------------------
=20
diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 8175751518f8..11687e597a11 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -4917,6 +4917,45 @@ static void nvme_set_blk_stats(NvmeNamespace *ns, st=
ruct nvme_stats *stats)
     stats->write_commands +=3D s->nr_ops[BLOCK_ACCT_WRITE];
 }
=20
+static uint16_t nvme_ocp_extended_smart_info(NvmeCtrl *n, uint8_t rae,
+                                             uint32_t buf_len, uint64_t of=
f,
+                                             NvmeRequest *req)
+{
+    NvmeNamespace *ns =3D NULL;
+    NvmeSmartLogExtended smart_l =3D { 0 };
+    struct nvme_stats stats =3D { 0 };
+    uint32_t trans_len;
+
+    if (off >=3D sizeof(smart_l)) {
+        return NVME_INVALID_FIELD | NVME_DNR;
+    }
+
+    /* accumulate all stats from all namespaces */
+    for (int i =3D 1; i <=3D NVME_MAX_NAMESPACES; i++) {
+        ns =3D nvme_ns(n, i);
+        if (ns) {
+            nvme_set_blk_stats(ns, &stats);
+        }
+    }
+
+    smart_l.physical_media_units_written[0] =3D cpu_to_le64(stats.units_wr=
itten);
+    smart_l.physical_media_units_read[0] =3D cpu_to_le64(stats.units_read);
+    smart_l.log_page_version =3D 0x0005;
+
+    static const uint8_t guid[16] =3D {
+        0xC5, 0xAF, 0x10, 0x28, 0xEA, 0xBF, 0xF2, 0xA4,
+        0x9C, 0x4F, 0x6F, 0x7C, 0xC9, 0x14, 0xD5, 0xAF
+    };
+    memcpy(smart_l.log_page_guid, guid, sizeof(smart_l.log_page_guid));
+
+    if (!rae) {
+        nvme_clear_events(n, NVME_AER_TYPE_SMART);
+    }
+
+    trans_len =3D MIN(sizeof(smart_l) - off, buf_len);
+    return nvme_c2h(n, (uint8_t *) &smart_l + off, trans_len, req);
+}
+
 static uint16_t nvme_smart_info(NvmeCtrl *n, uint8_t rae, uint32_t buf_len,
                                 uint64_t off, NvmeRequest *req)
 {
@@ -5146,6 +5185,23 @@ static uint16_t nvme_cmd_effects(NvmeCtrl *n, uint8_=
t csi, uint32_t buf_len,
     return nvme_c2h(n, ((uint8_t *)&log) + off, trans_len, req);
 }
=20
+static uint16_t nvme_vendor_specific_log(NvmeCtrl *n, uint8_t rae,
+                                         uint32_t buf_len, uint64_t off,
+                                         NvmeRequest *req, uint8_t lid)
+{
+    switch (lid) {
+    case NVME_OCP_EXTENDED_SMART_INFO:
+        if (n->params.ocp) {
+            return nvme_ocp_extended_smart_info(n, rae, buf_len, off, req);
+        }
+        break;
+        /* add a case for each additional vendor specific log id */
+    }
+
+    trace_pci_nvme_err_invalid_log_page(nvme_cid(req), lid);
+    return NVME_INVALID_FIELD | NVME_DNR;
+}
+
 static size_t sizeof_fdp_conf_descr(size_t nruh, size_t vss)
 {
     size_t entry_siz =3D sizeof(NvmeFdpDescrHdr) + nruh * sizeof(NvmeRuhDe=
scr)
@@ -5396,6 +5452,8 @@ static uint16_t nvme_get_log(NvmeCtrl *n, NvmeRequest=
 *req)
         return nvme_smart_info(n, rae, len, off, req);
     case NVME_LOG_FW_SLOT_INFO:
         return nvme_fw_log_info(n, len, off, req);
+    case NVME_LOG_VENDOR_START...NVME_LOG_VENDOR_END:
+        return nvme_vendor_specific_log(n, rae, len, off, req, lid);
     case NVME_LOG_CHANGED_NSLIST:
         return nvme_changed_nslist(n, rae, len, off, req);
     case NVME_LOG_CMD_EFFECTS:
@@ -8971,6 +9029,7 @@ static const Property nvme_props[] =3D {
     DEFINE_PROP_BOOL("atomic.dn", NvmeCtrl, params.atomic_dn, 0),
     DEFINE_PROP_UINT16("atomic.awun", NvmeCtrl, params.atomic_awun, 0),
     DEFINE_PROP_UINT16("atomic.awupf", NvmeCtrl, params.atomic_awupf, 0),
+    DEFINE_PROP_BOOL("ocp", NvmeCtrl, params.ocp, false),
 };
=20
 static void nvme_get_smart_warning(Object *obj, Visitor *v, const char *na=
me,
diff --git a/hw/nvme/nvme.h b/hw/nvme/nvme.h
index 724220691057..e307e733e46a 100644
--- a/hw/nvme/nvme.h
+++ b/hw/nvme/nvme.h
@@ -545,6 +545,7 @@ typedef struct NvmeParams {
     uint32_t  sriov_max_vq_per_vf;
     uint32_t  sriov_max_vi_per_vf;
     bool     msix_exclusive_bar;
+    bool     ocp;
=20
     struct {
         bool mem;
diff --git a/include/block/nvme.h b/include/block/nvme.h
index f4d108841bf5..975d321c5c08 100644
--- a/include/block/nvme.h
+++ b/include/block/nvme.h
@@ -1015,6 +1015,40 @@ typedef struct QEMU_PACKED NvmeSmartLog {
     uint8_t     reserved2[320];
 } NvmeSmartLog;
=20
+typedef struct QEMU_PACKED NvmeSmartLogExtended {
+    uint64_t    physical_media_units_written[2];
+    uint64_t    physical_media_units_read[2];
+    uint64_t    bad_user_blocks;
+    uint64_t    bad_system_nand_blocks;
+    uint64_t    xor_recovery_count;
+    uint64_t    uncorrectable_read_error_count;
+    uint64_t    soft_ecc_error_count;
+    uint64_t    end2end_correction_counts;
+    uint8_t     system_data_percent_used;
+    uint8_t     refresh_counts[7];
+    uint64_t    user_data_erase_counts;
+    uint16_t    thermal_throttling_stat_and_count;
+    uint16_t    dssd_spec_version[3];
+    uint64_t    pcie_correctable_error_count;
+    uint32_t    incomplete_shutdowns;
+    uint32_t    rsvd116;
+    uint8_t     percent_free_blocks;
+    uint8_t     rsvd121[7];
+    uint16_t    capacity_health;
+    uint8_t     nvme_errata_ver;
+    uint8_t     rsvd131[5];
+    uint64_t    unaligned_io;
+    uint64_t    security_ver_num;
+    uint64_t    total_nuse;
+    uint64_t    plp_start_count[2];
+    uint64_t    endurance_estimate[2];
+    uint64_t    pcie_retraining_count;
+    uint64_t    power_state_change_count;
+    uint8_t     rsvd208[286];
+    uint16_t    log_page_version;
+    uint64_t    log_page_guid[2];
+} NvmeSmartLogExtended;
+
 #define NVME_SMART_WARN_MAX     6
 enum NvmeSmartWarn {
     NVME_SMART_SPARE                  =3D 1 << 0,
@@ -1052,6 +1086,12 @@ enum NvmeLogIdentifier {
     NVME_LOG_FDP_RUH_USAGE              =3D 0x21,
     NVME_LOG_FDP_STATS                  =3D 0x22,
     NVME_LOG_FDP_EVENTS                 =3D 0x23,
+    NVME_LOG_VENDOR_START               =3D 0xc0,
+    NVME_LOG_VENDOR_END                 =3D 0xff,
+};
+
+enum NvmeOcpLogIdentifier {
+    NVME_OCP_EXTENDED_SMART_INFO =3D 0xc0,
 };
=20
 typedef struct QEMU_PACKED NvmePSD {
@@ -1899,6 +1939,7 @@ static inline void _nvme_check_size(void)
     QEMU_BUILD_BUG_ON(sizeof(NvmeErrorLog) !=3D 64);
     QEMU_BUILD_BUG_ON(sizeof(NvmeFwSlotInfoLog) !=3D 512);
     QEMU_BUILD_BUG_ON(sizeof(NvmeSmartLog) !=3D 512);
+    QEMU_BUILD_BUG_ON(sizeof(NvmeSmartLogExtended) !=3D 512);
     QEMU_BUILD_BUG_ON(sizeof(NvmeEffectsLog) !=3D 4096);
     QEMU_BUILD_BUG_ON(sizeof(NvmeIdCtrl) !=3D 4096);
     QEMU_BUILD_BUG_ON(sizeof(NvmeIdCtrlZoned) !=3D 4096);
--=20
2.47.2
From nobody Fri Apr  4 10:58:09 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
ARC-Seal: i=1; a=rsa-sha256; t=1740648683; cv=none;
	d=zohomail.com; s=zohoarc;
	b=Gm8SaPNEx57eqOtP0djVwNiVs7ffnkwYd0QeMJf0ariWqyFdCzOPNmhz+zQXSpdPRwad2eg4semjx3di+ofjy8AdQ86sAjduWNsdCQ+n6LJw7uOZ+LQQZE4luRfmxweGf+Gq4ILsdD1cf4Cg0rThBEVAt5roDKXb931f6AtUsAI=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1740648683;
 h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To;
	bh=71nKXCD5HsDTXriIYfUqdPCUY2WpZZReasEE7dQsRn0=;
	b=lVbQXD30qMoS2LUVM2GLKEbcspxKUbQbu6+6Tympcx57ncpOslbgEJ84y5fmaJiCkGe2pY6QualQqECLW5ere447AwFoAwNwr30gm+rdW2joi4mmg2t5H9NJgCHMV0F/n3bWDbYalIOclDaNE7rgVr/epX8aWSx910HIDxMpFvc=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 174064868247827.18108701295307;
 Thu, 27 Feb 2025 01:31:22 -0800 (PST)
Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces@nongnu.org>)
	id 1tnaE1-0007lP-2f; Thu, 27 Feb 2025 04:30:37 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaDv-0007dP-8d; Thu, 27 Feb 2025 04:30:31 -0500
Received: from fout-a6-smtp.messagingengine.com ([103.168.172.149])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaDs-0008En-UD; Thu, 27 Feb 2025 04:30:30 -0500
Received: from phl-compute-06.internal (phl-compute-06.phl.internal
 [10.202.2.46])
 by mailfout.phl.internal (Postfix) with ESMTP id E86E01382F79;
 Thu, 27 Feb 2025 04:30:27 -0500 (EST)
Received: from phl-mailfrontend-01 ([10.202.2.162])
 by phl-compute-06.internal (MEProxy); Thu, 27 Feb 2025 04:30:27 -0500
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu,
 27 Feb 2025 04:30:26 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk;
 h=cc:cc:content-transfer-encoding:content-type:date:date:from
 :from:in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to; s=fm3; t=1740648627; x=
 1740735027; bh=71nKXCD5HsDTXriIYfUqdPCUY2WpZZReasEE7dQsRn0=; b=t
 2vOz4MlzB/lTMX8TkFXmLx4netKrImAkvFd22oO5ul6mt9kois3g+8Z2T+0PL+Un
 d80xfJabpPMk7ejjlVzFXkOtVM99x64akPIMkUKVB/eEM0GGwIGa1xIB+/e+Jx1J
 5x7iomzfsr+gW1rM1GBJgTqgmnWD7oz6ahV4XbF0cvX7zQ9ffut+KIq4DLVl2Ock
 9haISL8O9xu83sOWzf3EVdL9vIdDR8uX6Ths9e4MoG/XWvAjTD9kN/no9C+4kKHY
 V3ZMABimoug4oAw4Sa/idiKtv8wHIz+hNA1v94Jfd9vCT5I+MDpVAN0s2PQZYoYr
 gBNMLUqMCCKhO8F9InTCg==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:date:date:feedback-id:feedback-id:from:from
 :in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender
 :x-me-sender:x-sasl-enc; s=fm1; t=1740648627; x=1740735027; bh=7
 1nKXCD5HsDTXriIYfUqdPCUY2WpZZReasEE7dQsRn0=; b=pFXbrCj9kJUJz2+BF
 NqWE4OdSb7yPuFhx10rqYHLjVyqgcDbRDSim8vY7EsttdxI0JlycmjqHm/JEHZ/Y
 fiLr5QzYDJVubo6A30rSYkHGScEJMQ4BipJjgJWeqZ+MwFLOIDQ73Kkv4yAhGnIP
 nfl5lpK20vS2tXNG+KuKeP0PGDo/QZF+4RQFEBaW6/rO+C8ZbsvWyFuVuhLjLC8t
 V/c+u4/eCWmn33Dp314ckb9J0yim2W2nv+IxP9SBpYqteQfcZXTy+shiwDhTG1YT
 BTOZ6a+LxTEVdw+eJ664Z7Pv3W4EBgoU9K02ZYKt23RkI3AmUAQ+dkk+VOmt5TuB
 xpAMA==
X-ME-Sender: <xms:szDAZ4H8RxUSHXS71CQHbq6Ve__wIL6SNu2hgzJcvvU44N3Apse9bQ>
 <xme:szDAZxWFZKnvCTGizX0TUM9FUkzdDuthHOTxUKk_E1Ch93axxpR4w01qvKlquIjdG
 o3ZV1wUlgyqIiBxTWY>
X-ME-Received: 
 <xmr:szDAZyLgGUybwn4qY1-pSkAlYsl7HkBqlYWNsLN2YuEI-Kq06Q9TcqKsEH8QY-55mp8Uaio3RNYMGe716ZmO5m-m>
X-ME-Proxy-Cause: 
 gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdekjeduudcutefuodetggdotefrod
 ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpggftfghnshhusghstghrihgsvgdp
 uffrtefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivg
 hnthhsucdlqddutddtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddt
 necuhfhrohhmpefmlhgruhhsucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnth
 drughkqeenucggtffrrghtthgvrhhnpeejgfeilefgieevheekueevheehkeefveegiefg
 heefgfejjeehffefgedujedugeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh
 epmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughkpdhnsggprhgtphht
 thhopeejpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehqvghmuhdquggvvhgvlh
 esnhhonhhgnhhurdhorhhgpdhrtghpthhtohepphgvthgvrhdrmhgrhiguvghllheslhhi
 nhgrrhhordhorhhgpdhrtghpthhtohepkhdrjhgvnhhsvghnsehsrghmshhunhhgrdgtoh
 hmpdhrtghpthhtohepfhhoshhsseguvghfmhgrtghrohdrihhtpdhrtghpthhtohepkhgs
 uhhstghhsehkvghrnhgvlhdrohhrghdprhgtphhtthhopehithhssehirhhrvghlvghvrg
 hnthdrughkpdhrtghpthhtohepqhgvmhhuqdgslhhotghksehnohhnghhnuhdrohhrgh
X-ME-Proxy: <xmx:szDAZ6FmngYCl-EUyAXFhc3fPf9llyVLbQ03qEP1btaeqvLthg-l8Q>
 <xmx:szDAZ-UcVpjBWnNcrTVpZjIUto6EeiCbhrYc7t7lvyAFQ1kY8zdqHg>
 <xmx:szDAZ9OnovTQ-8eoBe0uFQm8D_RtvRL5Z710_pAcXuhbIzcqvEXitQ>
 <xmx:szDAZ12YKm_o-RogISZ_w7VsPq--Ub29RU19uINZi6iNGqpGtJTu5A>
 <xmx:szDAZ5F-fetq_pwJ4YD_ERrtKJdQnzKL4sL-ASRGKnrHGlGipnFTQbhS>
Feedback-ID: idc91472f:Fastmail
From: Klaus Jensen <its@irrelevant.dk>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
 Klaus Jensen <k.jensen@samsung.com>,
 Jesper Wendel Devantier <foss@defmacro.it>,
 Keith Busch <kbusch@kernel.org>, Klaus Jensen <its@irrelevant.dk>,
 qemu-block@nongnu.org
Subject: [PULL 02/10] hw/nvme: always initialize a subsystem
Date: Thu, 27 Feb 2025 10:30:09 +0100
Message-ID: <20250227093018.11262-3-its@irrelevant.dk>
X-Mailer: git-send-email 2.47.2
In-Reply-To: <20250227093018.11262-1-its@irrelevant.dk>
References: <20250227093018.11262-1-its@irrelevant.dk>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=103.168.172.149; envelope-from=its@irrelevant.dk;
 helo=fout-a6-smtp.messagingengine.com
X-Spam_score_int: -27
X-Spam_score: -2.8
X-Spam_bar: --
X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org
X-ZohoMail-DKIM: pass (identity @irrelevant.dk)
X-ZM-MESSAGEID: 1740648684903019100
Content-Type: text/plain; charset="utf-8"

From: Klaus Jensen <k.jensen@samsung.com>

If no nvme-subsys is explicitly configured, instantiate one.

Reviewed-by: Jesper Wendel Devantier <foss@defmacro.it>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c | 36 +++++++++++++++-------------
 hw/nvme/ns.c   | 64 +++++++++++++++++---------------------------------
 2 files changed, 42 insertions(+), 58 deletions(-)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 11687e597a11..5a7ccbcc1b80 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -8823,15 +8823,13 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *=
pci_dev)
     id->psd[0].enlat =3D cpu_to_le32(0x10);
     id->psd[0].exlat =3D cpu_to_le32(0x4);
=20
-    if (n->subsys) {
-        id->cmic |=3D NVME_CMIC_MULTI_CTRL;
-        ctratt |=3D NVME_CTRATT_ENDGRPS;
+    id->cmic |=3D NVME_CMIC_MULTI_CTRL;
+    ctratt |=3D NVME_CTRATT_ENDGRPS;
=20
-        id->endgidmax =3D cpu_to_le16(0x1);
+    id->endgidmax =3D cpu_to_le16(0x1);
=20
-        if (n->subsys->endgrp.fdp.enabled) {
-            ctratt |=3D NVME_CTRATT_FDPS;
-        }
+    if (n->subsys->endgrp.fdp.enabled) {
+        ctratt |=3D NVME_CTRATT_FDPS;
     }
=20
     id->ctratt =3D cpu_to_le32(ctratt);
@@ -8860,7 +8858,15 @@ static int nvme_init_subsys(NvmeCtrl *n, Error **err=
p)
     int cntlid;
=20
     if (!n->subsys) {
-        return 0;
+        DeviceState *dev =3D qdev_new(TYPE_NVME_SUBSYS);
+
+        qdev_prop_set_string(dev, "nqn", n->params.serial);
+
+        if (!qdev_realize(dev, NULL, errp)) {
+            return -1;
+        }
+
+        n->subsys =3D NVME_SUBSYS(dev);
     }
=20
     cntlid =3D nvme_subsys_register_ctrl(n, errp);
@@ -8950,17 +8956,15 @@ static void nvme_exit(PCIDevice *pci_dev)
=20
     nvme_ctrl_reset(n, NVME_RESET_FUNCTION);
=20
-    if (n->subsys) {
-        for (i =3D 1; i <=3D NVME_MAX_NAMESPACES; i++) {
-            ns =3D nvme_ns(n, i);
-            if (ns) {
-                ns->attached--;
-            }
+    for (i =3D 1; i <=3D NVME_MAX_NAMESPACES; i++) {
+        ns =3D nvme_ns(n, i);
+        if (ns) {
+            ns->attached--;
         }
-
-        nvme_subsys_unregister_ctrl(n->subsys, n);
     }
=20
+    nvme_subsys_unregister_ctrl(n->subsys, n);
+
     g_free(n->cq);
     g_free(n->sq);
     g_free(n->aer_reqs);
diff --git a/hw/nvme/ns.c b/hw/nvme/ns.c
index 410df2959192..94cabc6a5b8d 100644
--- a/hw/nvme/ns.c
+++ b/hw/nvme/ns.c
@@ -727,25 +727,14 @@ static void nvme_ns_realize(DeviceState *dev, Error *=
*errp)
     uint32_t nsid =3D ns->params.nsid;
     int i;
=20
-    if (!n->subsys) {
-        /* If no subsys, the ns cannot be attached to more than one ctrl. =
*/
-        ns->params.shared =3D false;
-        if (ns->params.detached) {
-            error_setg(errp, "detached requires that the nvme device is "
-                       "linked to an nvme-subsys device");
-            return;
-        }
-    } else {
-        /*
-         * If this namespace belongs to a subsystem (through a link on the
-         * controller device), reparent the device.
-         */
-        if (!qdev_set_parent_bus(dev, &subsys->bus.parent_bus, errp)) {
-            return;
-        }
-        ns->subsys =3D subsys;
-        ns->endgrp =3D &subsys->endgrp;
+    assert(subsys);
+
+    /* reparent to subsystem bus */
+    if (!qdev_set_parent_bus(dev, &subsys->bus.parent_bus, errp)) {
+        return;
     }
+    ns->subsys =3D subsys;
+    ns->endgrp =3D &subsys->endgrp;
=20
     if (nvme_ns_setup(ns, errp)) {
         return;
@@ -753,7 +742,7 @@ static void nvme_ns_realize(DeviceState *dev, Error **e=
rrp)
=20
     if (!nsid) {
         for (i =3D 1; i <=3D NVME_MAX_NAMESPACES; i++) {
-            if (nvme_ns(n, i) || nvme_subsys_ns(subsys, i)) {
+            if (nvme_subsys_ns(subsys, i)) {
                 continue;
             }
=20
@@ -765,38 +754,29 @@ static void nvme_ns_realize(DeviceState *dev, Error *=
*errp)
             error_setg(errp, "no free namespace id");
             return;
         }
-    } else {
-        if (nvme_ns(n, nsid) || nvme_subsys_ns(subsys, nsid)) {
-            error_setg(errp, "namespace id '%d' already allocated", nsid);
-            return;
-        }
+    } else if (nvme_subsys_ns(subsys, nsid)) {
+        error_setg(errp, "namespace id '%d' already allocated", nsid);
+        return;
     }
=20
-    if (subsys) {
-        subsys->namespaces[nsid] =3D ns;
+    subsys->namespaces[nsid] =3D ns;
=20
-        ns->id_ns.endgid =3D cpu_to_le16(0x1);
-        ns->id_ns_ind.endgrpid =3D cpu_to_le16(0x1);
+    ns->id_ns.endgid =3D cpu_to_le16(0x1);
+    ns->id_ns_ind.endgrpid =3D cpu_to_le16(0x1);
=20
-        if (ns->params.detached) {
-            return;
-        }
+    if (ns->params.detached) {
+        return;
+    }
=20
-        if (ns->params.shared) {
-            for (i =3D 0; i < ARRAY_SIZE(subsys->ctrls); i++) {
-                NvmeCtrl *ctrl =3D subsys->ctrls[i];
+    if (ns->params.shared) {
+        for (i =3D 0; i < ARRAY_SIZE(subsys->ctrls); i++) {
+            NvmeCtrl *ctrl =3D subsys->ctrls[i];
=20
-                if (ctrl && ctrl !=3D SUBSYS_SLOT_RSVD) {
-                    nvme_attach_ns(ctrl, ns);
-                }
+            if (ctrl && ctrl !=3D SUBSYS_SLOT_RSVD) {
+                nvme_attach_ns(ctrl, ns);
             }
-
-            return;
         }
-
     }
-
-    nvme_attach_ns(n, ns);
 }
=20
 static const Property nvme_ns_props[] =3D {
--=20
2.47.2
From nobody Fri Apr  4 10:58:09 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
ARC-Seal: i=1; a=rsa-sha256; t=1740648682; cv=none;
	d=zohomail.com; s=zohoarc;
	b=CCPEzAliVTjy6/x/U4rflU4vcnXkddTRxSIsSGcP0fXmcEo3j1HKFUjDHVwvjGyb6zJGSNMAUiMQ24M4Hfo1tc1SFwHStbm7Zi45cOzYhMFeK1PTL3+fDS4IHNOhLLJ6Da9yXBndG0Z0AXJWnANTK/JNNn60+/8j5FjM/ue55HY=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1740648682;
 h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To;
	bh=/mc3xBeqRFRxpB4/dFAIRqOEU9FtF9Vd+rUYFybqzVk=;
	b=HsNfgNdAdJrj/LK9wn1+zAe9R8Sj1zULvgWaTnQFaxP4KXpxNA+0p3fq7kNbTJu8Kz05/53mGkAQY7nA1MB8j2dYkPp+SxAfTBWco4pWOsqc1hpAEdhL+9wnkIAHolUm5B1aJW9WmhQJNCfWneKkJrxVeSiYdTiYYkbBinQZgfg=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 17406486824971000.8156052831717;
 Thu, 27 Feb 2025 01:31:22 -0800 (PST)
Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces@nongnu.org>)
	id 1tnaEC-00081q-TZ; Thu, 27 Feb 2025 04:30:49 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaDy-0007lZ-57; Thu, 27 Feb 2025 04:30:36 -0500
Received: from fout-a6-smtp.messagingengine.com ([103.168.172.149])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaDv-0008Fk-FT; Thu, 27 Feb 2025 04:30:33 -0500
Received: from phl-compute-01.internal (phl-compute-01.phl.internal
 [10.202.2.41])
 by mailfout.phl.internal (Postfix) with ESMTP id 5867C1382F7E;
 Thu, 27 Feb 2025 04:30:30 -0500 (EST)
Received: from phl-mailfrontend-01 ([10.202.2.162])
 by phl-compute-01.internal (MEProxy); Thu, 27 Feb 2025 04:30:30 -0500
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu,
 27 Feb 2025 04:30:28 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk;
 h=cc:cc:content-transfer-encoding:content-type:date:date:from
 :from:in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to; s=fm3; t=1740648630; x=
 1740735030; bh=/mc3xBeqRFRxpB4/dFAIRqOEU9FtF9Vd+rUYFybqzVk=; b=G
 /xg9IiC8plS3JeLqFv2nx2gkuAAX+CMjPNKGCNc+eyvxyJAUMEeQnEV9x/4ooGDr
 57h/4R6enWeCFSZem/Lb1fYcywQIDjxhBGSRq91sm/j0/rf0xHOOaMXjanrN7qxB
 dQOrDjlpNGM9em/XQUdRdGHMwfltmWB1fobGvxy/VO6Et2Vfe/TnM+7S6hwz8NKl
 xPq7Y7aVaE4GUVhJQQCSAxkDTyQMv+ImIjI35/GwCEW1LO1H3GOVsDwhXZRMzzkO
 ChWkAG8GJC/Ot9mr8zcUBLQdTe1jRJJ0QmcIm3HJ57IPGL7Kx9fERAbMzDWWwSPp
 mDDwphhspre0NOwnTEs1A==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:date:date:feedback-id:feedback-id:from:from
 :in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender
 :x-me-sender:x-sasl-enc; s=fm1; t=1740648630; x=1740735030; bh=/
 mc3xBeqRFRxpB4/dFAIRqOEU9FtF9Vd+rUYFybqzVk=; b=GckOcuKxAbBCBS1TP
 qjztyjMn0iX4IBjmMdcZcV1QF2JjyyZwFNujixc9O+4lLIyLOnbEa0sklpFpkFS/
 Ghkh+V27pPNZjmYFOiIrKayGLetaW0mna4nfXYzQ2tK91diCviFGCf0USHZqvJDQ
 VxcipGEP8+UABz01kPsA0Isg5jvTA3akLPXxekahTRfpE2XWJhbx8ENpl/6C0C4u
 nyN8faJE9EUNeFIIRh3M0NNF2WDRYJNKp+JDVLmHD2yoqPR7FM58StY9t2/o9AVQ
 RCkVl0RVpQ8WY8k4xofLHQUm5p3jQsATzse7ipW/tMLyE6PWFxSm/+nrFzE1Kxhx
 NkunA==
X-ME-Sender: <xms:tjDAZxuXM1HMpAfT9igoc7DWkWAX4pRMd3i6gYu3qjrVmJ6Hf3iXhg>
 <xme:tjDAZ6e0k-svcHxSnlUrilUVpBEqbRjQLAw9GfkCeyUjbe7XjQp8oTy2287tEKx96
 _G2j3f6rHofTQ5SSs8>
X-ME-Received: 
 <xmr:tjDAZ0xNhlXXJ_LnFKb-FnaFSMytWWm8Qsuq-jzxgSZ9QnorpU_p_e-Qq1dd5HyNas9h-rcAgZvqivifdVDtgMfD>
X-ME-Proxy-Cause: 
 gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdekjeduudcutefuodetggdotefrod
 ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpggftfghnshhusghstghrihgsvgdp
 uffrtefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivg
 hnthhsucdlqddutddtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddt
 necuhfhrohhmpefmlhgruhhsucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnth
 drughkqeenucggtffrrghtthgvrhhnpeejgfeilefgieevheekueevheehkeefveegiefg
 heefgfejjeehffefgedujedugeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh
 epmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughkpdhnsggprhgtphht
 thhopeduvddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepqhgvmhhuqdguvghvvg
 hlsehnohhnghhnuhdrohhrghdprhgtphhtthhopehpvghtvghrrdhmrgihuggvlhhlsehl
 ihhnrghrohdrohhrghdprhgtphhtthhopehkrdhjvghnshgvnhesshgrmhhsuhhnghdrtg
 homhdprhgtphhtthhopehfohhsshesuggvfhhmrggtrhhordhithdprhgtphhtthhopehk
 sghushgthheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepihhtshesihhrrhgvlhgvvh
 grnhhtrdgukhdprhgtphhtthhopehsthgvfhgrnhhhrgesrhgvughhrghtrdgtohhmpdhr
 tghpthhtohepfhgrmhesvghuphhhohhnrdhnvghtpdhrtghpthhtohepphhhihhlmhguse
 hlihhnrghrohdrohhrgh
X-ME-Proxy: <xmx:tjDAZ4OdlILMmnQYWavBNlZ5aK4dQ_qg6Gsco6hKvrgdRJ9TJUQL9A>
 <xmx:tjDAZx-H0inxgv41XdgpzMGvU9gyC8NEJnWDRbj7QOg7BGeOJtc8hA>
 <xmx:tjDAZ4X-g-d8O0GqEuC4bQTOHYntLcRZfJKWyMccWx0vMi_hN6dsJg>
 <xmx:tjDAZyduGJX0m06s7H4zPHOx10NPH850EydsbnJ1tfQr18BNSRS_Gg>
 <xmx:tjDAZ0VGaDymJSRhDrhKnmlDBcFcZiiYgugt-e5FZcb9RPua45u7P4wx>
Feedback-ID: idc91472f:Fastmail
From: Klaus Jensen <its@irrelevant.dk>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
 Klaus Jensen <k.jensen@samsung.com>,
 Jesper Wendel Devantier <foss@defmacro.it>,
 Keith Busch <kbusch@kernel.org>, Klaus Jensen <its@irrelevant.dk>,
 Stefan Hajnoczi <stefanha@redhat.com>, Fam Zheng <fam@euphon.net>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <philmd@linaro.org>,
 Kevin Wolf <kwolf@redhat.com>, Hanna Reitz <hreitz@redhat.com>,
 qemu-block@nongnu.org
Subject: [PULL 03/10] hw/nvme: make oacs dynamic
Date: Thu, 27 Feb 2025 10:30:10 +0100
Message-ID: <20250227093018.11262-4-its@irrelevant.dk>
X-Mailer: git-send-email 2.47.2
In-Reply-To: <20250227093018.11262-1-its@irrelevant.dk>
References: <20250227093018.11262-1-its@irrelevant.dk>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=103.168.172.149; envelope-from=its@irrelevant.dk;
 helo=fout-a6-smtp.messagingengine.com
X-Spam_score_int: -27
X-Spam_score: -2.8
X-Spam_bar: --
X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org
X-ZohoMail-DKIM: pass (identity @irrelevant.dk)
X-ZM-MESSAGEID: 1740648684898019100
Content-Type: text/plain; charset="utf-8"

From: Klaus Jensen <k.jensen@samsung.com>

Virtualization Management needs sriov-related parameters. Only report
support for the command when that conditions are true.

Reviewed-by: Jesper Wendel Devantier <foss@defmacro.it>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c       | 25 ++++++++++++++++++-------
 hw/nvme/nvme.h       |  4 ++++
 include/block/nvme.h |  3 ++-
 3 files changed, 24 insertions(+), 8 deletions(-)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 5a7ccbcc1b80..4ee8588ca9ae 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -266,7 +266,7 @@ static const uint32_t nvme_feature_cap[NVME_FID_MAX] =
=3D {
     [NVME_FDP_EVENTS]               =3D NVME_FEAT_CAP_CHANGE | NVME_FEAT_C=
AP_NS,
 };
=20
-static const uint32_t nvme_cse_acs[256] =3D {
+static const uint32_t nvme_cse_acs_default[256] =3D {
     [NVME_ADM_CMD_DELETE_SQ]        =3D NVME_CMD_EFF_CSUPP,
     [NVME_ADM_CMD_CREATE_SQ]        =3D NVME_CMD_EFF_CSUPP,
     [NVME_ADM_CMD_GET_LOG_PAGE]     =3D NVME_CMD_EFF_CSUPP,
@@ -278,7 +278,6 @@ static const uint32_t nvme_cse_acs[256] =3D {
     [NVME_ADM_CMD_GET_FEATURES]     =3D NVME_CMD_EFF_CSUPP,
     [NVME_ADM_CMD_ASYNC_EV_REQ]     =3D NVME_CMD_EFF_CSUPP,
     [NVME_ADM_CMD_NS_ATTACHMENT]    =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
NIC,
-    [NVME_ADM_CMD_VIRT_MNGMT]       =3D NVME_CMD_EFF_CSUPP,
     [NVME_ADM_CMD_DBBUF_CONFIG]     =3D NVME_CMD_EFF_CSUPP,
     [NVME_ADM_CMD_FORMAT_NVM]       =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
LBCC,
     [NVME_ADM_CMD_DIRECTIVE_RECV]   =3D NVME_CMD_EFF_CSUPP,
@@ -5174,7 +5173,7 @@ static uint16_t nvme_cmd_effects(NvmeCtrl *n, uint8_t=
 csi, uint32_t buf_len,
         }
     }
=20
-    memcpy(log.acs, nvme_cse_acs, sizeof(nvme_cse_acs));
+    memcpy(log.acs, n->cse.acs, sizeof(log.acs));
=20
     if (src_iocs) {
         memcpy(log.iocs, src_iocs, sizeof(log.iocs));
@@ -7300,7 +7299,7 @@ static uint16_t nvme_admin_cmd(NvmeCtrl *n, NvmeReque=
st *req)
     trace_pci_nvme_admin_cmd(nvme_cid(req), nvme_sqid(req), req->cmd.opcod=
e,
                              nvme_adm_opc_str(req->cmd.opcode));
=20
-    if (!(nvme_cse_acs[req->cmd.opcode] & NVME_CMD_EFF_CSUPP)) {
+    if (!(n->cse.acs[req->cmd.opcode] & NVME_CMD_EFF_CSUPP)) {
         trace_pci_nvme_err_invalid_admin_opc(req->cmd.opcode);
         return NVME_INVALID_OPCODE | NVME_DNR;
     }
@@ -8740,6 +8739,9 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *pc=
i_dev)
     uint64_t cap =3D ldq_le_p(&n->bar.cap);
     NvmeSecCtrlEntry *sctrl =3D nvme_sctrl(n);
     uint32_t ctratt;
+    uint16_t oacs;
+
+    memcpy(n->cse.acs, nvme_cse_acs_default, sizeof(n->cse.acs));
=20
     id->vid =3D cpu_to_le16(pci_get_word(pci_conf + PCI_VENDOR_ID));
     id->ssvid =3D cpu_to_le16(pci_get_word(pci_conf + PCI_SUBSYSTEM_VENDOR=
_ID));
@@ -8770,9 +8772,18 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *p=
ci_dev)
=20
     id->mdts =3D n->params.mdts;
     id->ver =3D cpu_to_le32(NVME_SPEC_VER);
-    id->oacs =3D
-        cpu_to_le16(NVME_OACS_NS_MGMT | NVME_OACS_FORMAT | NVME_OACS_DBBUF=
 |
-                    NVME_OACS_DIRECTIVES);
+
+    oacs =3D NVME_OACS_NMS | NVME_OACS_FORMAT | NVME_OACS_DBBUF |
+        NVME_OACS_DIRECTIVES;
+
+    if (n->params.sriov_max_vfs) {
+        oacs |=3D NVME_OACS_VMS;
+
+        n->cse.acs[NVME_ADM_CMD_VIRT_MNGMT] =3D NVME_CMD_EFF_CSUPP;
+    }
+
+    id->oacs =3D cpu_to_le16(oacs);
+
     id->cntrltype =3D 0x1;
=20
     /*
diff --git a/hw/nvme/nvme.h b/hw/nvme/nvme.h
index e307e733e46a..b86cad388f5a 100644
--- a/hw/nvme/nvme.h
+++ b/hw/nvme/nvme.h
@@ -584,6 +584,10 @@ typedef struct NvmeCtrl {
     uint64_t    dbbuf_eis;
     bool        dbbuf_enabled;
=20
+    struct {
+        uint32_t acs[256];
+    } cse;
+
     struct {
         MemoryRegion mem;
         uint8_t      *buf;
diff --git a/include/block/nvme.h b/include/block/nvme.h
index 975d321c5c08..80fbcb420d48 100644
--- a/include/block/nvme.h
+++ b/include/block/nvme.h
@@ -1232,8 +1232,9 @@ enum NvmeIdCtrlOacs {
     NVME_OACS_SECURITY      =3D 1 << 0,
     NVME_OACS_FORMAT        =3D 1 << 1,
     NVME_OACS_FW            =3D 1 << 2,
-    NVME_OACS_NS_MGMT       =3D 1 << 3,
+    NVME_OACS_NMS           =3D 1 << 3,
     NVME_OACS_DIRECTIVES    =3D 1 << 5,
+    NVME_OACS_VMS           =3D 1 << 7,
     NVME_OACS_DBBUF         =3D 1 << 8,
 };
=20
--=20
2.47.2
From nobody Fri Apr  4 10:58:09 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
ARC-Seal: i=1; a=rsa-sha256; t=1740648731; cv=none;
	d=zohomail.com; s=zohoarc;
	b=Vky1nwRqFL48IO7Ic62spizIi/FO2KBXt19lP8tdU0YiXsIVDMuA94s06G13g60KFmuF3hRo9mKwxsUaKqYq5fMt1ZkRyc1zm4y9SvnrKkuyQmewhOLzWQdPgAci7CkngOy0LpN3LUX3RlS5ZwWcrV1fqQFonbwMi0GQGfcfdJo=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1740648731;
 h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To;
	bh=nJtS3p8VcX/Jbbm825Qp1j6N3CnFWdb3PT2YenvEOwQ=;
	b=FNzUobaaoIChM8GxAxwQjiISnz7gqylBx9zIzCSc/kiokrI6saBMDhHSDErUSYknlVpmWtMear6MIyPSzPTO5dfNmZlBWogAl7+9XVHgzS9getAYR4u7oz2PfnM8FIdDOOCwWBiL4UnqPFte3S3yx3jlT3KAynCPwQjn3icsyNg=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1740648731566591.5835027299355;
 Thu, 27 Feb 2025 01:32:11 -0800 (PST)
Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces@nongnu.org>)
	id 1tnaE7-0007tj-BQ; Thu, 27 Feb 2025 04:30:45 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaE1-0007mj-BA; Thu, 27 Feb 2025 04:30:37 -0500
Received: from fhigh-a1-smtp.messagingengine.com ([103.168.172.152])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaDy-0008HX-7W; Thu, 27 Feb 2025 04:30:37 -0500
Received: from phl-compute-05.internal (phl-compute-05.phl.internal
 [10.202.2.45])
 by mailfhigh.phl.internal (Postfix) with ESMTP id 01E871140BC6;
 Thu, 27 Feb 2025 04:30:33 -0500 (EST)
Received: from phl-mailfrontend-01 ([10.202.2.162])
 by phl-compute-05.internal (MEProxy); Thu, 27 Feb 2025 04:30:33 -0500
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu,
 27 Feb 2025 04:30:30 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk;
 h=cc:cc:content-transfer-encoding:content-type:date:date:from
 :from:in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to; s=fm3; t=1740648632; x=
 1740735032; bh=nJtS3p8VcX/Jbbm825Qp1j6N3CnFWdb3PT2YenvEOwQ=; b=B
 zlSpBYIB4mE0pXH3EMe4Ys7zS8nmZVT8/JPkO9I/rVfixkUAXt4N3MOyKh8IYr4w
 Eq5yGzY/WmIFQzIN/D47DfPBVgOS5uDilF2AtNEhgu61Lk4bSW+fLEv4j8k6M6Cb
 fh4UygSEZNsXuFEp/5AZRpOplm4pleAFnH8wJX8Fqz+ROygD8P7IbIhQChJSluqn
 mOciBUsFOy4Y4S1D+NekLFWMgg8n4pijFd86KtXF5Mttgr+xHyoNLLRAkJrBoLyL
 hMErXXQvXGnBSLdEqj+bYncKiPLBMpPtpkMuXXizO2u4POgSMBdwhH+c9KrTdQFO
 5QgHMO+lqI7Wczp93PJjA==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:date:date:feedback-id:feedback-id:from:from
 :in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender
 :x-me-sender:x-sasl-enc; s=fm1; t=1740648632; x=1740735032; bh=n
 JtS3p8VcX/Jbbm825Qp1j6N3CnFWdb3PT2YenvEOwQ=; b=aibhcqKcPeSTvT/Mo
 1lrrIuhNnAZGAjDafOXD3dJCiLuAjHNsET+CQ5Gl9ge2+7arFrfOCEvOdlDbrN46
 bnf0A7Ib0nmBI1XHogtada6x4ni2wbdADrqpsqIYCO5Z85f+stARI53koATMAyEg
 7EG9po65fct7oiLn53z6K7Dz6ferrIASr5Js1aeaLDT91HOJO6vD10nAZr6rOOuf
 doijHhlyKKOyajHrvWLL/3/rQxVLyYORlOTfEybtLEG0/zfH87dmEPo62ekAk/qT
 Iw26mviTbAdna6ddI4gpbHfv5A0LAi24uu63/n1hQC8+Q9CXjjAIOnFQyjMooI9u
 TtYKg==
X-ME-Sender: <xms:uDDAZxkoVPuidJ1-8Gx1uGG-jIPxG8oSRWg481LZ1G5E1XTqJF7Mvw>
 <xme:uDDAZ82k3Yv3tRcrKOjrW4R60EFRIpjcjS7TpuRT8wDVTp3iNhvYE8HZv8YSLFPdJ
 iA0OBdbTw6CkSxX-gU>
X-ME-Received: 
 <xmr:uDDAZ3qxy1nFN7YINKESqs3ih2IK-DjnHyjUVBSaE110-v5pqAsPM7BI80EZfxGXt3mpLQiEKYeVEdHfPsv6vD1J>
X-ME-Proxy-Cause: 
 gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdekjedutdcutefuodetggdotefrod
 ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpggftfghnshhusghstghrihgsvgdp
 uffrtefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivg
 hnthhsucdlqddutddtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddt
 necuhfhrohhmpefmlhgruhhsucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnth
 drughkqeenucggtffrrghtthgvrhhnpeejgfeilefgieevheekueevheehkeefveegiefg
 heefgfejjeehffefgedujedugeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh
 epmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughkpdhnsggprhgtphht
 thhopeduvddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepqhgvmhhuqdguvghvvg
 hlsehnohhnghhnuhdrohhrghdprhgtphhtthhopehpvghtvghrrdhmrgihuggvlhhlsehl
 ihhnrghrohdrohhrghdprhgtphhtthhopehkrdhjvghnshgvnhesshgrmhhsuhhnghdrtg
 homhdprhgtphhtthhopehfohhsshesuggvfhhmrggtrhhordhithdprhgtphhtthhopehk
 sghushgthheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepihhtshesihhrrhgvlhgvvh
 grnhhtrdgukhdprhgtphhtthhopehsthgvfhgrnhhhrgesrhgvughhrghtrdgtohhmpdhr
 tghpthhtohepfhgrmhesvghuphhhohhnrdhnvghtpdhrtghpthhtohepphhhihhlmhguse
 hlihhnrghrohdrohhrgh
X-ME-Proxy: <xmx:uDDAZxmZieoff3GvK3QFoD-YyiPG9cMExZrWrF7XcfLmiDgmDK8JOA>
 <xmx:uDDAZ_1pcongKXjBwo6EU7QgZQkGmSwM9lkpCgFMXL3iKb9OhcrgqQ>
 <xmx:uDDAZwsLE-2vx6A4GMfuE1xp73agfgMCCS6xrcKkvFO3a4tTphKiNg>
 <xmx:uDDAZzUnyTcPFECEn9ypyxNzaNycOyPGGT0ePTPb4ROkLlr_io6ltQ>
 <xmx:uDDAZ9NeEQd54h70AAiEmnVLjWGhJSFxcH885rjylZnwb86tsJmf7Nz7>
Feedback-ID: idc91472f:Fastmail
From: Klaus Jensen <its@irrelevant.dk>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
 Klaus Jensen <k.jensen@samsung.com>,
 Jesper Wendel Devantier <foss@defmacro.it>,
 Keith Busch <kbusch@kernel.org>, Klaus Jensen <its@irrelevant.dk>,
 Stefan Hajnoczi <stefanha@redhat.com>, Fam Zheng <fam@euphon.net>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <philmd@linaro.org>,
 Kevin Wolf <kwolf@redhat.com>, Hanna Reitz <hreitz@redhat.com>,
 qemu-block@nongnu.org
Subject: [PULL 04/10] hw/nvme: add knob for doorbell buffer config support
Date: Thu, 27 Feb 2025 10:30:11 +0100
Message-ID: <20250227093018.11262-5-its@irrelevant.dk>
X-Mailer: git-send-email 2.47.2
In-Reply-To: <20250227093018.11262-1-its@irrelevant.dk>
References: <20250227093018.11262-1-its@irrelevant.dk>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=103.168.172.152; envelope-from=its@irrelevant.dk;
 helo=fhigh-a1-smtp.messagingengine.com
X-Spam_score_int: -27
X-Spam_score: -2.8
X-Spam_bar: --
X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org
X-ZohoMail-DKIM: pass (identity @irrelevant.dk)
X-ZM-MESSAGEID: 1740648734369019100
Content-Type: text/plain; charset="utf-8"

From: Klaus Jensen <k.jensen@samsung.com>

Add a 'dbcs' knob to allow Doorbell Buffer Config command to be
disabled.

Reviewed-by: Jesper Wendel Devantier <foss@defmacro.it>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c       | 11 ++++++++---
 hw/nvme/nvme.h       |  1 +
 include/block/nvme.h |  2 +-
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 4ee8588ca9ae..1ad76da943a6 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -278,7 +278,6 @@ static const uint32_t nvme_cse_acs_default[256] =3D {
     [NVME_ADM_CMD_GET_FEATURES]     =3D NVME_CMD_EFF_CSUPP,
     [NVME_ADM_CMD_ASYNC_EV_REQ]     =3D NVME_CMD_EFF_CSUPP,
     [NVME_ADM_CMD_NS_ATTACHMENT]    =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
NIC,
-    [NVME_ADM_CMD_DBBUF_CONFIG]     =3D NVME_CMD_EFF_CSUPP,
     [NVME_ADM_CMD_FORMAT_NVM]       =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
LBCC,
     [NVME_ADM_CMD_DIRECTIVE_RECV]   =3D NVME_CMD_EFF_CSUPP,
     [NVME_ADM_CMD_DIRECTIVE_SEND]   =3D NVME_CMD_EFF_CSUPP,
@@ -8773,8 +8772,13 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *p=
ci_dev)
     id->mdts =3D n->params.mdts;
     id->ver =3D cpu_to_le32(NVME_SPEC_VER);
=20
-    oacs =3D NVME_OACS_NMS | NVME_OACS_FORMAT | NVME_OACS_DBBUF |
-        NVME_OACS_DIRECTIVES;
+    oacs =3D NVME_OACS_NMS | NVME_OACS_FORMAT | NVME_OACS_DIRECTIVES;
+
+    if (n->params.dbcs) {
+        oacs |=3D NVME_OACS_DBCS;
+
+        n->cse.acs[NVME_ADM_CMD_DBBUF_CONFIG] =3D NVME_CMD_EFF_CSUPP;
+    }
=20
     if (n->params.sriov_max_vfs) {
         oacs |=3D NVME_OACS_VMS;
@@ -9024,6 +9028,7 @@ static const Property nvme_props[] =3D {
     DEFINE_PROP_BOOL("use-intel-id", NvmeCtrl, params.use_intel_id, false),
     DEFINE_PROP_BOOL("legacy-cmb", NvmeCtrl, params.legacy_cmb, false),
     DEFINE_PROP_BOOL("ioeventfd", NvmeCtrl, params.ioeventfd, false),
+    DEFINE_PROP_BOOL("dbcs", NvmeCtrl, params.dbcs, true),
     DEFINE_PROP_UINT8("zoned.zasl", NvmeCtrl, params.zasl, 0),
     DEFINE_PROP_BOOL("zoned.auto_transition", NvmeCtrl,
                      params.auto_transition_zones, true),
diff --git a/hw/nvme/nvme.h b/hw/nvme/nvme.h
index b86cad388f5a..b8d063a027a9 100644
--- a/hw/nvme/nvme.h
+++ b/hw/nvme/nvme.h
@@ -539,6 +539,7 @@ typedef struct NvmeParams {
     bool     auto_transition_zones;
     bool     legacy_cmb;
     bool     ioeventfd;
+    bool     dbcs;
     uint16_t  sriov_max_vfs;
     uint16_t sriov_vq_flexible;
     uint16_t sriov_vi_flexible;
diff --git a/include/block/nvme.h b/include/block/nvme.h
index 80fbcb420d48..63eb74460eac 100644
--- a/include/block/nvme.h
+++ b/include/block/nvme.h
@@ -1235,7 +1235,7 @@ enum NvmeIdCtrlOacs {
     NVME_OACS_NMS           =3D 1 << 3,
     NVME_OACS_DIRECTIVES    =3D 1 << 5,
     NVME_OACS_VMS           =3D 1 << 7,
-    NVME_OACS_DBBUF         =3D 1 << 8,
+    NVME_OACS_DBCS          =3D 1 << 8,
 };
=20
 enum NvmeIdCtrlOncs {
--=20
2.47.2
From nobody Fri Apr  4 10:58:09 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
ARC-Seal: i=1; a=rsa-sha256; t=1740648728; cv=none;
	d=zohomail.com; s=zohoarc;
	b=FkXz/cJ6CAwP1ni00fvkwXW0Am+cYftoRfHPp19AUED7pNBVmidhbIJgG+6tNYVtIx+Czt1eZOw2k+SmiOisbZShkU0NQgBXLop032qXW6i8GjUSTMG1176E59BA2rK7nmxp0z8CotyRnIObuWO+t+cLLcgAiHudowFIAv1NaPM=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1740648728;
 h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To;
	bh=piQ0jCwd+gUw5pjvRr3WPHXU0ONE7wn4psJts59xtOw=;
	b=T5ZtkEyJGsVqLtV0n6cWB/qnwKaS5A3u9oax9FbOv3CqnC6V749TCX+tN9iFkBNlegDqBdTztRyy/4Sv2JJOERxfaM6DJLllJFX9Tzug6y7KraCHyMcjUVwuJQLmEQWJvuxYSmKpWQnQbp7FUX+2+WhvwXcBv+OnaUMx5Q+WGos=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1740648728810511.59304560661826;
 Thu, 27 Feb 2025 01:32:08 -0800 (PST)
Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces@nongnu.org>)
	id 1tnaEL-00089h-E9; Thu, 27 Feb 2025 04:30:57 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaE1-0007oH-Up; Thu, 27 Feb 2025 04:30:38 -0500
Received: from fout-a6-smtp.messagingengine.com ([103.168.172.149])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaE0-0008Hv-8R; Thu, 27 Feb 2025 04:30:37 -0500
Received: from phl-compute-04.internal (phl-compute-04.phl.internal
 [10.202.2.44])
 by mailfout.phl.internal (Postfix) with ESMTP id 4725F1382F69;
 Thu, 27 Feb 2025 04:30:35 -0500 (EST)
Received: from phl-mailfrontend-01 ([10.202.2.162])
 by phl-compute-04.internal (MEProxy); Thu, 27 Feb 2025 04:30:35 -0500
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu,
 27 Feb 2025 04:30:33 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk;
 h=cc:cc:content-transfer-encoding:content-type:date:date:from
 :from:in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to; s=fm3; t=1740648635; x=
 1740735035; bh=piQ0jCwd+gUw5pjvRr3WPHXU0ONE7wn4psJts59xtOw=; b=t
 u9OLu6EoGT6kW3oQCGxMXzIXa3kt5IuMzHYtFqYfs3XeXX/Hfb+mwT+ORTsRIy+a
 kG/brFAgzn0Lnr8ySjffcJLblpVKGK3JrDhjtALUdmNOSRQC2ITvhFA+AEGIoHMf
 BqhVfIV/XmKyR1pTvtliykpzQcvkZ0b2Uq90UdHE+yWI5j9usrMCb84DfkNlETxh
 QnacTjX+oPpm2Ouv5LvDQxPCGIqVDMhJkoz2aUo4/1K/DR3AvZx1IPh+mCpoQTFL
 zzhZJf2O3RpiByyL4rWP0poK7o3xfupXeiljqrYSOgNMbx7vfZF06zaoNkYgExCq
 w1WHjAOxWr6l9CV/RM8AA==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:date:date:feedback-id:feedback-id:from:from
 :in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender
 :x-me-sender:x-sasl-enc; s=fm1; t=1740648635; x=1740735035; bh=p
 iQ0jCwd+gUw5pjvRr3WPHXU0ONE7wn4psJts59xtOw=; b=h+ARg9W3C2yBGU4QM
 wXuYVNpKRhxadfYFATc0jFujrhc2PY1qRtO0sypbHHw88sujxYbNjXEwGfF65t+w
 qhgrIDUyNJ/Eab6f92Ax7nwAuA8Yf2IXaLmCMFxnZQcU2tWZc5Uigkntu0jHSEob
 VHI7JFvY1EN+XlHUKCDxzxeiqYX2cDgoY5KnWoGt9OaceUNf11EucqGdQ2EkOgPx
 8jpxOE8MSfx8lFIKhmrEz9UrxB4XRxZ6Ck4a3GJxMrBUd8Bqwh8XlaW6xBoY2ted
 /UydIarFCy4jyY3NG35tS2Sq7pAAwVlbPwF6gm/MlXrWPsig2+mkjS5bjl4CSy1h
 +/a1g==
X-ME-Sender: <xms:uzDAZ1fra9PTyiN9iqmsFf8fA5kcttQFzAUYg_AQNyTBDzc1ydV-vw>
 <xme:uzDAZzN6jagzzZ6SEb5JYc3cerdGd6CA9pafVNfUoXsGeUhmeGgRDQ4VbrDGqiFkE
 yqTKotuy58PUxeHo1A>
X-ME-Received: 
 <xmr:uzDAZ-gxa7jx6Y1xcyr76FpcLs6kIdRK7OUEUqLMSHGCFT7QyLEclSLoSJ5yuMzSYnyXSS-K1R4-ewCdobGTqfP2>
X-ME-Proxy-Cause: 
 gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdekjedutdcutefuodetggdotefrod
 ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpggftfghnshhusghstghrihgsvgdp
 uffrtefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivg
 hnthhsucdlqddutddtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddt
 necuhfhrohhmpefmlhgruhhsucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnth
 drughkqeenucggtffrrghtthgvrhhnpeejgfeilefgieevheekueevheehkeefveegiefg
 heefgfejjeehffefgedujedugeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh
 epmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughkpdhnsggprhgtphht
 thhopeduvddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepqhgvmhhuqdguvghvvg
 hlsehnohhnghhnuhdrohhrghdprhgtphhtthhopehpvghtvghrrdhmrgihuggvlhhlsehl
 ihhnrghrohdrohhrghdprhgtphhtthhopehkrdhjvghnshgvnhesshgrmhhsuhhnghdrtg
 homhdprhgtphhtthhopehfohhsshesuggvfhhmrggtrhhordhithdprhgtphhtthhopehk
 sghushgthheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepihhtshesihhrrhgvlhgvvh
 grnhhtrdgukhdprhgtphhtthhopehsthgvfhgrnhhhrgesrhgvughhrghtrdgtohhmpdhr
 tghpthhtohepfhgrmhesvghuphhhohhnrdhnvghtpdhrtghpthhtohepphhhihhlmhguse
 hlihhnrghrohdrohhrgh
X-ME-Proxy: <xmx:uzDAZ-8bPkvyN6i5QN5y-algER1Eo9aTohepY22ljM3MEkb3Kercdg>
 <xmx:uzDAZxtjIhVczOeVajAPUS2VmhLDtmUQwrDZvbPT1ywuXNOMYh24bw>
 <xmx:uzDAZ9EQeSw_B3D89OXQwt8_X1sW4lIZKoC1vg4k7je2S7SxVUnQOg>
 <xmx:uzDAZ4OA8eUsP_iwpt1P0WY_ZtyvVRvsS7aJgbvEkxHgKPgX-DoTJQ>
 <xmx:uzDAZ6GnWkewpSXnoEmyzQ7-4z3gaHQrBLaeoLej5TBxtxwXCyzW4VTr>
Feedback-ID: idc91472f:Fastmail
From: Klaus Jensen <its@irrelevant.dk>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
 Klaus Jensen <k.jensen@samsung.com>,
 Jesper Wendel Devantier <foss@defmacro.it>,
 Keith Busch <kbusch@kernel.org>, Klaus Jensen <its@irrelevant.dk>,
 Stefan Hajnoczi <stefanha@redhat.com>, Fam Zheng <fam@euphon.net>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <philmd@linaro.org>,
 Kevin Wolf <kwolf@redhat.com>, Hanna Reitz <hreitz@redhat.com>,
 qemu-block@nongnu.org
Subject: [PULL 05/10] nvme: fix iocs status code values
Date: Thu, 27 Feb 2025 10:30:12 +0100
Message-ID: <20250227093018.11262-6-its@irrelevant.dk>
X-Mailer: git-send-email 2.47.2
In-Reply-To: <20250227093018.11262-1-its@irrelevant.dk>
References: <20250227093018.11262-1-its@irrelevant.dk>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=103.168.172.149; envelope-from=its@irrelevant.dk;
 helo=fout-a6-smtp.messagingengine.com
X-Spam_score_int: -27
X-Spam_score: -2.8
X-Spam_bar: --
X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org
X-ZohoMail-DKIM: pass (identity @irrelevant.dk)
X-ZM-MESSAGEID: 1740648730385019100
Content-Type: text/plain; charset="utf-8"

From: Klaus Jensen <k.jensen@samsung.com>

The status codes related to I/O Command Sets are in the wrong group.

Reviewed-by: Jesper Wendel Devantier <foss@defmacro.it>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c       | 4 ++--
 include/block/nvme.h | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 1ad76da943a6..2b73f601608f 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -5681,7 +5681,7 @@ static uint16_t nvme_identify_ns(NvmeCtrl *n, NvmeReq=
uest *req, bool active)
         return nvme_c2h(n, (uint8_t *)&ns->id_ns, sizeof(NvmeIdNs), req);
     }
=20
-    return NVME_INVALID_CMD_SET | NVME_DNR;
+    return NVME_INVALID_IOCS | NVME_DNR;
 }
=20
 static uint16_t nvme_identify_ctrl_list(NvmeCtrl *n, NvmeRequest *req,
@@ -6647,7 +6647,7 @@ static uint16_t nvme_set_feature(NvmeCtrl *n, NvmeReq=
uest *req)
     case NVME_COMMAND_SET_PROFILE:
         if (dw11 & 0x1ff) {
             trace_pci_nvme_err_invalid_iocsci(dw11 & 0x1ff);
-            return NVME_CMD_SET_CMB_REJECTED | NVME_DNR;
+            return NVME_IOCS_COMBINATION_REJECTED | NVME_DNR;
         }
         break;
     case NVME_FDP_MODE:
diff --git a/include/block/nvme.h b/include/block/nvme.h
index 63eb74460eac..aecfc9ce66b4 100644
--- a/include/block/nvme.h
+++ b/include/block/nvme.h
@@ -906,8 +906,6 @@ enum NvmeStatusCodes {
     NVME_SGL_DESCR_TYPE_INVALID =3D 0x0011,
     NVME_INVALID_USE_OF_CMB     =3D 0x0012,
     NVME_INVALID_PRP_OFFSET     =3D 0x0013,
-    NVME_CMD_SET_CMB_REJECTED   =3D 0x002b,
-    NVME_INVALID_CMD_SET        =3D 0x002c,
     NVME_FDP_DISABLED           =3D 0x0029,
     NVME_INVALID_PHID_LIST      =3D 0x002a,
     NVME_LBA_RANGE              =3D 0x0080,
@@ -940,6 +938,8 @@ enum NvmeStatusCodes {
     NVME_INVALID_SEC_CTRL_STATE =3D 0x0120,
     NVME_INVALID_NUM_RESOURCES  =3D 0x0121,
     NVME_INVALID_RESOURCE_ID    =3D 0x0122,
+    NVME_IOCS_COMBINATION_REJECTED =3D 0x012b,
+    NVME_INVALID_IOCS           =3D 0x012c,
     NVME_CONFLICTING_ATTRS      =3D 0x0180,
     NVME_INVALID_PROT_INFO      =3D 0x0181,
     NVME_WRITE_TO_RO            =3D 0x0182,
--=20
2.47.2
From nobody Fri Apr  4 10:58:09 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
ARC-Seal: i=1; a=rsa-sha256; t=1740648756; cv=none;
	d=zohomail.com; s=zohoarc;
	b=XIIzseBgSD2VeuM8bDRBDv0AVAGZE7sSu+jnJ02TQvVdQsagokD+clYproEdNArwztQLwlTbySejK4J6ves7HrKN5ja1ZAIie+r1FEgdLejOOfNvfaBdI1FVssZ4WkwOYer/8xEK2pLIc13pgIrG8qpeTbB0um5mRWHFO2zVzSY=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1740648756;
 h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To;
	bh=dZuF08uJ1a3asratCM7/aWSmjseMjsdnXiaM51iax7c=;
	b=dX40peXR9YU/ZW1fNZ8DKSgp3TKViLYwxJayvIsCCtzFH6S5G3wj9SL46cmoxYqfEAm/fqgVAFv6EKgU6ACRaWHqNBsDpCXufMtqn8ssBtCJy+686NwsjgrDoGID9Ufjxp8HiGjtheH5P3jR/nbjFb72C6cXFScbJTdaRpVButk=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1740648756421530.4356676105737;
 Thu, 27 Feb 2025 01:32:36 -0800 (PST)
Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces@nongnu.org>)
	id 1tnaEN-0008KQ-7o; Thu, 27 Feb 2025 04:31:06 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaEA-000836-AK; Thu, 27 Feb 2025 04:30:48 -0500
Received: from fhigh-a1-smtp.messagingengine.com ([103.168.172.152])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaE2-0008IR-FY; Thu, 27 Feb 2025 04:30:40 -0500
Received: from phl-compute-01.internal (phl-compute-01.phl.internal
 [10.202.2.41])
 by mailfhigh.phl.internal (Postfix) with ESMTP id 7F17D1140BC5;
 Thu, 27 Feb 2025 04:30:37 -0500 (EST)
Received: from phl-mailfrontend-01 ([10.202.2.162])
 by phl-compute-01.internal (MEProxy); Thu, 27 Feb 2025 04:30:37 -0500
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu,
 27 Feb 2025 04:30:35 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk;
 h=cc:cc:content-transfer-encoding:content-type:date:date:from
 :from:in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to; s=fm3; t=1740648637; x=
 1740735037; bh=dZuF08uJ1a3asratCM7/aWSmjseMjsdnXiaM51iax7c=; b=a
 +setTad8dwBoTL3q7bqaxDl4T9l+wkl/JiqX3XLNKAn2FAGc1Rxqf972e0e/RKNB
 aSQnrId4Q5Ao6hlgoGUD0fBBKnUWfKiC+PP1gn1UF8ScPA1Mp1IkmD2PnHXJIT2N
 lZTp2LK402icLqGkTPerIPQX9fqKiDJk4dgcHFjy8y6XUOPhVxMRLmgPE1jnADoc
 OSRVTxirM+iEnMIDl005kghQxppe4xbmZTb5EL+q5Hm+JdKnWvQlKDHG2qbgxsjl
 2QnT/OJyDAlGOCAbSsxYKATYRAAPxZoEBxPb19IbgSYR83I5Wi9ngYVXDtIQ89f4
 +LU/NP0KqV0MzQiPNIBwg==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:date:date:feedback-id:feedback-id:from:from
 :in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender
 :x-me-sender:x-sasl-enc; s=fm1; t=1740648637; x=1740735037; bh=d
 ZuF08uJ1a3asratCM7/aWSmjseMjsdnXiaM51iax7c=; b=1HWJQODbtZpGuCLGJ
 /ihDO+wJ7ZzkY8/bIy3EHTkpmU/4Vkc4R6uVSreq6F841BKkgSirL5G5qyMvO6vl
 b+Wl9pw2Ia8jOw8+tcaiCPxEoekTcfBo0GC+enbolyXM5zew3Pmlxv5URhFhmtm5
 2hFOVzbLfH8GWV0ID65ikcWXd5AYSTSv1dWIhRD4fMa8HSBNfPNa7fkzWOyXOfuM
 oMyR2df3Yb5bGw2/+exd6oPUHq2g1kcjxgi7DBKDjmYH3k7uTaeoJNgRk2MxlQVz
 OmWioyZYie5AoO8h1jx9YZy1i2+LR2pAKj3ynZ3aOhB3uhwdmquk1Gxmzkq7wF5f
 f6QVg==
X-ME-Sender: <xms:vTDAZ888TbspuB-hYZ06s2g2UbOIdUh-9XxO_TQPdlb9gaqvTBYTiQ>
 <xme:vTDAZ0v6Tv1GwrokCa7V5uDynZSfkzAexku6o1NaEcHpBCI7fAaRdSAAUxW1zVCtS
 _2ZQKlxc20LP2QU6zg>
X-ME-Received: 
 <xmr:vTDAZyBMBI6d6mKm-Yi9TWsTCDRGf_onmaGsMDux953NfMiUCZsRghrMCPbVwngLt_f-VTeK3ZoPFLlHjRx_tnrl>
X-ME-Proxy-Cause: 
 gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdekjeduudcutefuodetggdotefrod
 ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpggftfghnshhusghstghrihgsvgdp
 uffrtefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivg
 hnthhsucdlqddutddtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddt
 necuhfhrohhmpefmlhgruhhsucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnth
 drughkqeenucggtffrrghtthgvrhhnpeejgfeilefgieevheekueevheehkeefveegiefg
 heefgfejjeehffefgedujedugeenucevlhhushhtvghrufhiiigvpedunecurfgrrhgrmh
 epmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughkpdhnsggprhgtphht
 thhopeduvddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepqhgvmhhuqdguvghvvg
 hlsehnohhnghhnuhdrohhrghdprhgtphhtthhopehpvghtvghrrdhmrgihuggvlhhlsehl
 ihhnrghrohdrohhrghdprhgtphhtthhopehkrdhjvghnshgvnhesshgrmhhsuhhnghdrtg
 homhdprhgtphhtthhopehfohhsshesuggvfhhmrggtrhhordhithdprhgtphhtthhopehk
 sghushgthheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepihhtshesihhrrhgvlhgvvh
 grnhhtrdgukhdprhgtphhtthhopehsthgvfhgrnhhhrgesrhgvughhrghtrdgtohhmpdhr
 tghpthhtohepfhgrmhesvghuphhhohhnrdhnvghtpdhrtghpthhtohepphhhihhlmhguse
 hlihhnrghrohdrohhrgh
X-ME-Proxy: <xmx:vTDAZ8eVnIZ86TFyb3XeTW46iUFQrb52dPTXRhhOVpyZWBQu_iQNCA>
 <xmx:vTDAZxNU9OAxVKuK-1p-RmpqFibf3IIqWGzksOhQKpnrYBt1wI7EAg>
 <xmx:vTDAZ2l6-8eUMrkDlcNvzAP6J5irifHz1osuwi7owHDgRnjmhPVBFA>
 <xmx:vTDAZzsGd29xHrvIn-5tQ5WPDxsm9QN3Dq-1cBJWacyFUjYKrPBAww>
 <xmx:vTDAZ1kLrdTWLYutfDWVvmtHsKTUb5EVc_LmnV3ORQyWmxzIc5-Gmnrs>
Feedback-ID: idc91472f:Fastmail
From: Klaus Jensen <its@irrelevant.dk>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
 Klaus Jensen <k.jensen@samsung.com>,
 Jesper Wendel Devantier <foss@defmacro.it>,
 Keith Busch <kbusch@kernel.org>, Klaus Jensen <its@irrelevant.dk>,
 Stefan Hajnoczi <stefanha@redhat.com>, Fam Zheng <fam@euphon.net>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <philmd@linaro.org>,
 Kevin Wolf <kwolf@redhat.com>, Hanna Reitz <hreitz@redhat.com>,
 qemu-block@nongnu.org
Subject: [PULL 06/10] hw/nvme: be compliant wrt. dsm processing limits
Date: Thu, 27 Feb 2025 10:30:13 +0100
Message-ID: <20250227093018.11262-7-its@irrelevant.dk>
X-Mailer: git-send-email 2.47.2
In-Reply-To: <20250227093018.11262-1-its@irrelevant.dk>
References: <20250227093018.11262-1-its@irrelevant.dk>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=103.168.172.152; envelope-from=its@irrelevant.dk;
 helo=fhigh-a1-smtp.messagingengine.com
X-Spam_score_int: -27
X-Spam_score: -2.8
X-Spam_bar: --
X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org
X-ZohoMail-DKIM: pass (identity @irrelevant.dk)
X-ZM-MESSAGEID: 1740648758647019100
Content-Type: text/plain; charset="utf-8"

From: Klaus Jensen <k.jensen@samsung.com>

The specification states that,

> The controller shall set all three processing limit fields (i.e., the
> DMRL, DMRSL and DMSL fields) to non-zero values or shall clear all
> three processing limit fields to 0h.

So, set the DMRL and DMSL fields in addition to DMRSL.

Reviewed-by: Jesper Wendel Devantier <foss@defmacro.it>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c       | 24 +++++++++++++++---------
 include/block/nvme.h |  2 ++
 2 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 2b73f601608f..86e1c48fab82 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -5639,7 +5639,9 @@ static uint16_t nvme_identify_ctrl_csi(NvmeCtrl *n, N=
vmeRequest *req)
     switch (c->csi) {
     case NVME_CSI_NVM:
         id_nvm->vsl =3D n->params.vsl;
+        id_nvm->dmrl =3D NVME_ID_CTRL_NVM_DMRL_MAX;
         id_nvm->dmrsl =3D cpu_to_le32(n->dmrsl);
+        id_nvm->dmsl =3D NVME_ID_CTRL_NVM_DMRL_MAX * n->dmrsl;
         break;
=20
     case NVME_CSI_ZONED:
@@ -6696,18 +6698,23 @@ static uint16_t nvme_aer(NvmeCtrl *n, NvmeRequest *=
req)
     return NVME_NO_COMPLETE;
 }
=20
-static void nvme_update_dmrsl(NvmeCtrl *n)
+static void nvme_update_dsm_limits(NvmeCtrl *n, NvmeNamespace *ns)
 {
-    int nsid;
+    if (ns) {
+        n->dmrsl =3D
+            MIN_NON_ZERO(n->dmrsl, BDRV_REQUEST_MAX_BYTES / nvme_l2b(ns, 1=
));
=20
-    for (nsid =3D 1; nsid <=3D NVME_MAX_NAMESPACES; nsid++) {
-        NvmeNamespace *ns =3D nvme_ns(n, nsid);
+        return;
+    }
+
+    for (uint32_t nsid =3D 1; nsid <=3D NVME_MAX_NAMESPACES; nsid++) {
+        ns =3D nvme_ns(n, nsid);
         if (!ns) {
             continue;
         }
=20
-        n->dmrsl =3D MIN_NON_ZERO(n->dmrsl,
-                                BDRV_REQUEST_MAX_BYTES / nvme_l2b(ns, 1));
+        n->dmrsl =3D
+            MIN_NON_ZERO(n->dmrsl, BDRV_REQUEST_MAX_BYTES / nvme_l2b(ns, 1=
));
     }
 }
=20
@@ -6795,7 +6802,7 @@ static uint16_t nvme_ns_attachment(NvmeCtrl *n, NvmeR=
equest *req)
             ctrl->namespaces[nsid] =3D NULL;
             ns->attached--;
=20
-            nvme_update_dmrsl(ctrl);
+            nvme_update_dsm_limits(ctrl, NULL);
=20
             break;
=20
@@ -8902,8 +8909,7 @@ void nvme_attach_ns(NvmeCtrl *n, NvmeNamespace *ns)
     n->namespaces[nsid] =3D ns;
     ns->attached++;
=20
-    n->dmrsl =3D MIN_NON_ZERO(n->dmrsl,
-                            BDRV_REQUEST_MAX_BYTES / nvme_l2b(ns, 1));
+    nvme_update_dsm_limits(n, ns);
 }
=20
 static void nvme_realize(PCIDevice *pci_dev, Error **errp)
diff --git a/include/block/nvme.h b/include/block/nvme.h
index aecfc9ce66b4..763b2b2f0ec7 100644
--- a/include/block/nvme.h
+++ b/include/block/nvme.h
@@ -1207,6 +1207,8 @@ typedef struct NvmeIdCtrlZoned {
     uint8_t     rsvd1[4095];
 } NvmeIdCtrlZoned;
=20
+#define NVME_ID_CTRL_NVM_DMRL_MAX 255
+
 typedef struct NvmeIdCtrlNvm {
     uint8_t     vsl;
     uint8_t     wzsl;
--=20
2.47.2
From nobody Fri Apr  4 10:58:09 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
ARC-Seal: i=1; a=rsa-sha256; t=1740648753; cv=none;
	d=zohomail.com; s=zohoarc;
	b=dx+1DWEJxW0Dcj+sbTnlPX+iXhYK0sQGS+H+gLtKYsDk4XG8D2A3fx0qvmxGSPhms8iYiPps7UvdHR6geZXeGhCuVnrfnpZ61CSXy1kjzCs6Sl3BpqRbKjSmX6essJj+2itCTVhOKeW5+jO51Nx40Wu2A/XY0Eh3eeyAfUYJR8Q=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1740648753;
 h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To;
	bh=GvTnraR+2MP/8ph9LPge6clrDgvwgCdnBj6bJcKTw18=;
	b=iRaMtV0sMWRCZP4BAEaL9G/LtgY0nVf2KTXh4GeSpRDPv0lAHPxTgb0wDKDiuUHlaFSmO5x1ioE22vcd6wpz/zQopEg5fbW3+KzlrxQNTqG88TfrTf3vgqueOAE7gCgFNEQ0yfd4fm3eGTIi9eX1N2mdB9VBZasoVnmjwMV5jAs=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1740648752849265.8472808174064;
 Thu, 27 Feb 2025 01:32:32 -0800 (PST)
Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces@nongnu.org>)
	id 1tnaFF-0001S6-F5; Thu, 27 Feb 2025 04:31:53 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaEF-00088l-VU; Thu, 27 Feb 2025 04:30:55 -0500
Received: from fout-a6-smtp.messagingengine.com ([103.168.172.149])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaEA-0008Ii-6D; Thu, 27 Feb 2025 04:30:50 -0500
Received: from phl-compute-13.internal (phl-compute-13.phl.internal
 [10.202.2.53])
 by mailfout.phl.internal (Postfix) with ESMTP id D26201382F74;
 Thu, 27 Feb 2025 04:30:39 -0500 (EST)
Received: from phl-mailfrontend-01 ([10.202.2.162])
 by phl-compute-13.internal (MEProxy); Thu, 27 Feb 2025 04:30:39 -0500
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu,
 27 Feb 2025 04:30:37 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk;
 h=cc:cc:content-transfer-encoding:content-type:date:date:from
 :from:in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to; s=fm3; t=1740648639; x=
 1740735039; bh=GvTnraR+2MP/8ph9LPge6clrDgvwgCdnBj6bJcKTw18=; b=J
 vXyFrQyhzI+OeLa2HPLDyQamZOcrJZQQZYHVHpIHruD9j4EejzSw3Lt59Hg8rSHA
 vHB8sLb23dZErCJIxYlVjGlIlOZHZdBo2lg5OxGZ/8Hk6DJW9O9/C242Mliuu+DH
 Dc8IseBtmX7D2F/36AbihCHEzR7s6k6yWo6aJIGUojajqyQ3914sBD2YfiCW5rPy
 TbLV3c9bp4SS6VBEQ8qWlsuPOmpLlkzb8W3HpdR14qIiNl/hndJjATX2uJhCSGZI
 RG9LDKkmYqlKCPxMCWSMX3axu3z3lFnGbVsauAbDOO3ii9/o8mq/oJPQ2Svi19Ni
 8BhRzZQ4v05klUgT4YESA==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:date:date:feedback-id:feedback-id:from:from
 :in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender
 :x-me-sender:x-sasl-enc; s=fm1; t=1740648639; x=1740735039; bh=G
 vTnraR+2MP/8ph9LPge6clrDgvwgCdnBj6bJcKTw18=; b=Ftv8sHfDrHvhSPLQI
 uf5EZfSiZhruxxaTDL+U6YDUZ8meWJPzC1fGeHj0OpPMJfCPpgmJvA21riXvcBZj
 EMgVU42GQuw5Rc0+GZUNF0GTp0/gFFmzKrskuQgT+7h1XRtjRrYCh0Eb1SXdwYZG
 WYQJcND7oumIXbJsM6dAaSEB+fLeJC6Drs7Bx1Pt5FG6xhhjEjtAdZXV5HuCvYXb
 0mvS86sDHSPIrMxBvsKzdTJ7DilgXpnwpmRtVE8c+vQQwnV13THgS8WGJdeApoOV
 1XaSOyQRDyCN9XnCSPttLdEp3+yMI5cB72kyDNGy5F7W0qVM5dGmdjr7YuI6WX7E
 Gsjzg==
X-ME-Sender: <xms:vzDAZwHN7hHP38gbevCQLCImWW850OQjpG6J6OMl8fUZ0rHtTMEVFA>
 <xme:vzDAZ5VLvlER-EUbWP_4yDf4tXpVo2ng1OYZN6eoqOPjYlfq6J12zxjD35taVFw-m
 xxZKw3SQjnup1ZC3hg>
X-ME-Received: 
 <xmr:vzDAZ6JkqqCT8WgvJfy7Q9Fyqv-2dOud0SxmMw7vhfJZFLPLtEor3-9n4IzSqx73ImNXwmKDvadzw1Da9zFo2e9T>
X-ME-Proxy-Cause: 
 gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdekjedutdcutefuodetggdotefrod
 ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpggftfghnshhusghstghrihgsvgdp
 uffrtefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivg
 hnthhsucdlqddutddtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddt
 necuhfhrohhmpefmlhgruhhsucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnth
 drughkqeenucggtffrrghtthgvrhhnpeejgfeilefgieevheekueevheehkeefveegiefg
 heefgfejjeehffefgedujedugeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh
 epmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughkpdhnsggprhgtphht
 thhopeduvddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepqhgvmhhuqdguvghvvg
 hlsehnohhnghhnuhdrohhrghdprhgtphhtthhopehpvghtvghrrdhmrgihuggvlhhlsehl
 ihhnrghrohdrohhrghdprhgtphhtthhopehkrdhjvghnshgvnhesshgrmhhsuhhnghdrtg
 homhdprhgtphhtthhopehfohhsshesuggvfhhmrggtrhhordhithdprhgtphhtthhopehk
 sghushgthheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepihhtshesihhrrhgvlhgvvh
 grnhhtrdgukhdprhgtphhtthhopehsthgvfhgrnhhhrgesrhgvughhrghtrdgtohhmpdhr
 tghpthhtohepfhgrmhesvghuphhhohhnrdhnvghtpdhrtghpthhtohepphhhihhlmhguse
 hlihhnrghrohdrohhrgh
X-ME-Proxy: <xmx:vzDAZyHRMQU9oYSoFuHoDEMtYVCW2x2UY6QHzuyPqSDXvVVJo8R0Sw>
 <xmx:vzDAZ2V1yZyhNsmP-Ugz4vXUyAfmXAVV8tFIVYa22JCItP53Xqxf7Q>
 <xmx:vzDAZ1NWQhHyrgq3Pt3Y6O7ydQq9iVv2Dst1y_ViJpHFgEUrzqRnKw>
 <xmx:vzDAZ93k7vNa2z8luPqhX7rpiQrNOqo1OcLMZ-dOVe-DRYpmOBy49g>
 <xmx:vzDAZ3vWQQjFUHy_eE8JpChEZLDnxJ9NNaHQn3Ah30lDyDKNd9_JvZFX>
Feedback-ID: idc91472f:Fastmail
From: Klaus Jensen <its@irrelevant.dk>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
 Klaus Jensen <k.jensen@samsung.com>,
 Jesper Wendel Devantier <foss@defmacro.it>,
 Keith Busch <kbusch@kernel.org>, Klaus Jensen <its@irrelevant.dk>,
 Stefan Hajnoczi <stefanha@redhat.com>, Fam Zheng <fam@euphon.net>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <philmd@linaro.org>,
 Kevin Wolf <kwolf@redhat.com>, Hanna Reitz <hreitz@redhat.com>,
 qemu-block@nongnu.org
Subject: [PULL 07/10] hw/nvme: rework csi handling
Date: Thu, 27 Feb 2025 10:30:14 +0100
Message-ID: <20250227093018.11262-8-its@irrelevant.dk>
X-Mailer: git-send-email 2.47.2
In-Reply-To: <20250227093018.11262-1-its@irrelevant.dk>
References: <20250227093018.11262-1-its@irrelevant.dk>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=103.168.172.149; envelope-from=its@irrelevant.dk;
 helo=fout-a6-smtp.messagingengine.com
X-Spam_score_int: -27
X-Spam_score: -2.8
X-Spam_bar: --
X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org
X-ZohoMail-DKIM: pass (identity @irrelevant.dk)
X-ZM-MESSAGEID: 1740648753971019000
Content-Type: text/plain; charset="utf-8"

From: Klaus Jensen <k.jensen@samsung.com>

The controller incorrectly allows a zoned namespace to be attached even
if CS.CSS is configured to only support the NVM command set for I/O
queues.

Rework handling of namespace command sets in general by attaching
supported namespaces when the controller is started instead of, like
now, statically when realized.

Reviewed-by: Jesper Wendel Devantier <foss@defmacro.it>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c       | 213 ++++++++++++++++++++++++-------------------
 hw/nvme/ns.c         |  14 ---
 hw/nvme/nvme.h       |   5 +-
 include/block/nvme.h |  10 +-
 4 files changed, 131 insertions(+), 111 deletions(-)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 86e1c48fab82..21496c6b6b81 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -277,15 +277,14 @@ static const uint32_t nvme_cse_acs_default[256] =3D {
     [NVME_ADM_CMD_SET_FEATURES]     =3D NVME_CMD_EFF_CSUPP,
     [NVME_ADM_CMD_GET_FEATURES]     =3D NVME_CMD_EFF_CSUPP,
     [NVME_ADM_CMD_ASYNC_EV_REQ]     =3D NVME_CMD_EFF_CSUPP,
-    [NVME_ADM_CMD_NS_ATTACHMENT]    =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
NIC,
+    [NVME_ADM_CMD_NS_ATTACHMENT]    =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
NIC |
+                                      NVME_CMD_EFF_CCC,
     [NVME_ADM_CMD_FORMAT_NVM]       =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
LBCC,
     [NVME_ADM_CMD_DIRECTIVE_RECV]   =3D NVME_CMD_EFF_CSUPP,
     [NVME_ADM_CMD_DIRECTIVE_SEND]   =3D NVME_CMD_EFF_CSUPP,
 };
=20
-static const uint32_t nvme_cse_iocs_none[256];
-
-static const uint32_t nvme_cse_iocs_nvm[256] =3D {
+static const uint32_t nvme_cse_iocs_nvm_default[256] =3D {
     [NVME_CMD_FLUSH]                =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
LBCC,
     [NVME_CMD_WRITE_ZEROES]         =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
LBCC,
     [NVME_CMD_WRITE]                =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
LBCC,
@@ -298,7 +297,7 @@ static const uint32_t nvme_cse_iocs_nvm[256] =3D {
     [NVME_CMD_IO_MGMT_SEND]         =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
LBCC,
 };
=20
-static const uint32_t nvme_cse_iocs_zoned[256] =3D {
+static const uint32_t nvme_cse_iocs_zoned_default[256] =3D {
     [NVME_CMD_FLUSH]                =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
LBCC,
     [NVME_CMD_WRITE_ZEROES]         =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
LBCC,
     [NVME_CMD_WRITE]                =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
LBCC,
@@ -307,6 +306,9 @@ static const uint32_t nvme_cse_iocs_zoned[256] =3D {
     [NVME_CMD_VERIFY]               =3D NVME_CMD_EFF_CSUPP,
     [NVME_CMD_COPY]                 =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
LBCC,
     [NVME_CMD_COMPARE]              =3D NVME_CMD_EFF_CSUPP,
+    [NVME_CMD_IO_MGMT_RECV]         =3D NVME_CMD_EFF_CSUPP,
+    [NVME_CMD_IO_MGMT_SEND]         =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
LBCC,
+
     [NVME_CMD_ZONE_APPEND]          =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
LBCC,
     [NVME_CMD_ZONE_MGMT_SEND]       =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_=
LBCC,
     [NVME_CMD_ZONE_MGMT_RECV]       =3D NVME_CMD_EFF_CSUPP,
@@ -4603,6 +4605,61 @@ static uint16_t nvme_io_mgmt_send(NvmeCtrl *n, NvmeR=
equest *req)
     };
 }
=20
+static uint16_t __nvme_io_cmd_nvm(NvmeCtrl *n, NvmeRequest *req)
+{
+    switch (req->cmd.opcode) {
+    case NVME_CMD_WRITE:
+        return nvme_write(n, req);
+    case NVME_CMD_READ:
+        return nvme_read(n, req);
+    case NVME_CMD_COMPARE:
+        return nvme_compare(n, req);
+    case NVME_CMD_WRITE_ZEROES:
+        return nvme_write_zeroes(n, req);
+    case NVME_CMD_DSM:
+        return nvme_dsm(n, req);
+    case NVME_CMD_VERIFY:
+        return nvme_verify(n, req);
+    case NVME_CMD_COPY:
+        return nvme_copy(n, req);
+    case NVME_CMD_IO_MGMT_RECV:
+        return nvme_io_mgmt_recv(n, req);
+    case NVME_CMD_IO_MGMT_SEND:
+        return nvme_io_mgmt_send(n, req);
+    }
+
+    g_assert_not_reached();
+}
+
+static uint16_t nvme_io_cmd_nvm(NvmeCtrl *n, NvmeRequest *req)
+{
+    if (!(n->cse.iocs.nvm[req->cmd.opcode] & NVME_CMD_EFF_CSUPP)) {
+        trace_pci_nvme_err_invalid_opc(req->cmd.opcode);
+        return NVME_INVALID_OPCODE | NVME_DNR;
+    }
+
+    return __nvme_io_cmd_nvm(n, req);
+}
+
+static uint16_t nvme_io_cmd_zoned(NvmeCtrl *n, NvmeRequest *req)
+{
+    if (!(n->cse.iocs.zoned[req->cmd.opcode] & NVME_CMD_EFF_CSUPP)) {
+        trace_pci_nvme_err_invalid_opc(req->cmd.opcode);
+        return NVME_INVALID_OPCODE | NVME_DNR;
+    }
+
+    switch (req->cmd.opcode) {
+    case NVME_CMD_ZONE_APPEND:
+        return nvme_zone_append(n, req);
+    case NVME_CMD_ZONE_MGMT_SEND:
+        return nvme_zone_mgmt_send(n, req);
+    case NVME_CMD_ZONE_MGMT_RECV:
+        return nvme_zone_mgmt_recv(n, req);
+    }
+
+    return __nvme_io_cmd_nvm(n, req);
+}
+
 static uint16_t nvme_io_cmd(NvmeCtrl *n, NvmeRequest *req)
 {
     NvmeNamespace *ns;
@@ -4644,11 +4701,6 @@ static uint16_t nvme_io_cmd(NvmeCtrl *n, NvmeRequest=
 *req)
         return NVME_INVALID_FIELD | NVME_DNR;
     }
=20
-    if (!(ns->iocs[req->cmd.opcode] & NVME_CMD_EFF_CSUPP)) {
-        trace_pci_nvme_err_invalid_opc(req->cmd.opcode);
-        return NVME_INVALID_OPCODE | NVME_DNR;
-    }
-
     if (ns->status) {
         return ns->status;
     }
@@ -4659,36 +4711,14 @@ static uint16_t nvme_io_cmd(NvmeCtrl *n, NvmeReques=
t *req)
=20
     req->ns =3D ns;
=20
-    switch (req->cmd.opcode) {
-    case NVME_CMD_WRITE_ZEROES:
-        return nvme_write_zeroes(n, req);
-    case NVME_CMD_ZONE_APPEND:
-        return nvme_zone_append(n, req);
-    case NVME_CMD_WRITE:
-        return nvme_write(n, req);
-    case NVME_CMD_READ:
-        return nvme_read(n, req);
-    case NVME_CMD_COMPARE:
-        return nvme_compare(n, req);
-    case NVME_CMD_DSM:
-        return nvme_dsm(n, req);
-    case NVME_CMD_VERIFY:
-        return nvme_verify(n, req);
-    case NVME_CMD_COPY:
-        return nvme_copy(n, req);
-    case NVME_CMD_ZONE_MGMT_SEND:
-        return nvme_zone_mgmt_send(n, req);
-    case NVME_CMD_ZONE_MGMT_RECV:
-        return nvme_zone_mgmt_recv(n, req);
-    case NVME_CMD_IO_MGMT_RECV:
-        return nvme_io_mgmt_recv(n, req);
-    case NVME_CMD_IO_MGMT_SEND:
-        return nvme_io_mgmt_send(n, req);
-    default:
-        g_assert_not_reached();
+    switch (ns->csi) {
+    case NVME_CSI_NVM:
+        return nvme_io_cmd_nvm(n, req);
+    case NVME_CSI_ZONED:
+        return nvme_io_cmd_zoned(n, req);
     }
=20
-    return NVME_INVALID_OPCODE | NVME_DNR;
+    g_assert_not_reached();
 }
=20
 static void nvme_cq_notifier(EventNotifier *e)
@@ -5147,7 +5177,7 @@ static uint16_t nvme_cmd_effects(NvmeCtrl *n, uint8_t=
 csi, uint32_t buf_len,
                                  uint64_t off, NvmeRequest *req)
 {
     NvmeEffectsLog log =3D {};
-    const uint32_t *src_iocs =3D NULL;
+    const uint32_t *iocs =3D NULL;
     uint32_t trans_len;
=20
     if (off >=3D sizeof(log)) {
@@ -5157,25 +5187,26 @@ static uint16_t nvme_cmd_effects(NvmeCtrl *n, uint8=
_t csi, uint32_t buf_len,
=20
     switch (NVME_CC_CSS(ldl_le_p(&n->bar.cc))) {
     case NVME_CC_CSS_NVM:
-        src_iocs =3D nvme_cse_iocs_nvm;
-        /* fall through */
-    case NVME_CC_CSS_ADMIN_ONLY:
+        iocs =3D n->cse.iocs.nvm;
         break;
-    case NVME_CC_CSS_CSI:
+
+    case NVME_CC_CSS_ALL:
         switch (csi) {
         case NVME_CSI_NVM:
-            src_iocs =3D nvme_cse_iocs_nvm;
+            iocs =3D n->cse.iocs.nvm;
             break;
         case NVME_CSI_ZONED:
-            src_iocs =3D nvme_cse_iocs_zoned;
+            iocs =3D n->cse.iocs.zoned;
             break;
         }
+
+        break;
     }
=20
     memcpy(log.acs, n->cse.acs, sizeof(log.acs));
=20
-    if (src_iocs) {
-        memcpy(log.iocs, src_iocs, sizeof(log.iocs));
+    if (iocs) {
+        memcpy(log.iocs, iocs, sizeof(log.iocs));
     }
=20
     trans_len =3D MIN(sizeof(log) - off, buf_len);
@@ -6718,25 +6749,29 @@ static void nvme_update_dsm_limits(NvmeCtrl *n, Nvm=
eNamespace *ns)
     }
 }
=20
-static void nvme_select_iocs_ns(NvmeCtrl *n, NvmeNamespace *ns)
+static bool nvme_csi_supported(NvmeCtrl *n, uint8_t csi)
 {
-    uint32_t cc =3D ldl_le_p(&n->bar.cc);
+    uint32_t cc;
=20
-    ns->iocs =3D nvme_cse_iocs_none;
-    switch (ns->csi) {
+    switch (csi) {
     case NVME_CSI_NVM:
-        if (NVME_CC_CSS(cc) !=3D NVME_CC_CSS_ADMIN_ONLY) {
-            ns->iocs =3D nvme_cse_iocs_nvm;
-        }
-        break;
+        return true;
+
     case NVME_CSI_ZONED:
-        if (NVME_CC_CSS(cc) =3D=3D NVME_CC_CSS_CSI) {
-            ns->iocs =3D nvme_cse_iocs_zoned;
-        } else if (NVME_CC_CSS(cc) =3D=3D NVME_CC_CSS_NVM) {
-            ns->iocs =3D nvme_cse_iocs_nvm;
-        }
-        break;
+        cc =3D ldl_le_p(&n->bar.cc);
+
+        return NVME_CC_CSS(cc) =3D=3D NVME_CC_CSS_ALL;
     }
+
+    g_assert_not_reached();
+}
+
+static void nvme_detach_ns(NvmeCtrl *n, NvmeNamespace *ns)
+{
+    assert(ns->attached > 0);
+
+    n->namespaces[ns->params.nsid] =3D NULL;
+    ns->attached--;
 }
=20
 static uint16_t nvme_ns_attachment(NvmeCtrl *n, NvmeRequest *req)
@@ -6781,7 +6816,7 @@ static uint16_t nvme_ns_attachment(NvmeCtrl *n, NvmeR=
equest *req)
=20
         switch (sel) {
         case NVME_NS_ATTACHMENT_ATTACH:
-            if (nvme_ns(ctrl, nsid)) {
+            if (nvme_ns(n, nsid)) {
                 return NVME_NS_ALREADY_ATTACHED | NVME_DNR;
             }
=20
@@ -6789,19 +6824,17 @@ static uint16_t nvme_ns_attachment(NvmeCtrl *n, Nvm=
eRequest *req)
                 return NVME_NS_PRIVATE | NVME_DNR;
             }
=20
+            if (!nvme_csi_supported(n, ns->csi)) {
+                return NVME_IOCS_NOT_SUPPORTED | NVME_DNR;
+            }
+
             nvme_attach_ns(ctrl, ns);
-            nvme_select_iocs_ns(ctrl, ns);
+            nvme_update_dsm_limits(ctrl, ns);
=20
             break;
=20
         case NVME_NS_ATTACHMENT_DETACH:
-            if (!nvme_ns(ctrl, nsid)) {
-                return NVME_NS_NOT_ATTACHED | NVME_DNR;
-            }
-
-            ctrl->namespaces[nsid] =3D NULL;
-            ns->attached--;
-
+            nvme_detach_ns(ctrl, ns);
             nvme_update_dsm_limits(ctrl, NULL);
=20
             break;
@@ -7652,21 +7685,6 @@ static void nvme_ctrl_shutdown(NvmeCtrl *n)
     }
 }
=20
-static void nvme_select_iocs(NvmeCtrl *n)
-{
-    NvmeNamespace *ns;
-    int i;
-
-    for (i =3D 1; i <=3D NVME_MAX_NAMESPACES; i++) {
-        ns =3D nvme_ns(n, i);
-        if (!ns) {
-            continue;
-        }
-
-        nvme_select_iocs_ns(n, ns);
-    }
-}
-
 static int nvme_start_ctrl(NvmeCtrl *n)
 {
     uint64_t cap =3D ldq_le_p(&n->bar.cap);
@@ -7733,7 +7751,18 @@ static int nvme_start_ctrl(NvmeCtrl *n)
=20
     nvme_set_timestamp(n, 0ULL);
=20
-    nvme_select_iocs(n);
+    /* verify that the command sets of attached namespaces are supported */
+    for (int i =3D 1; i <=3D NVME_MAX_NAMESPACES; i++) {
+        NvmeNamespace *ns =3D nvme_subsys_ns(n->subsys, i);
+
+        if (ns && nvme_csi_supported(n, ns->csi) && !ns->params.detached) {
+            if (!ns->attached || ns->params.shared) {
+                nvme_attach_ns(n, ns);
+            }
+        }
+    }
+
+    nvme_update_dsm_limits(n, NULL);
=20
     return 0;
 }
@@ -8748,6 +8777,9 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *pc=
i_dev)
     uint16_t oacs;
=20
     memcpy(n->cse.acs, nvme_cse_acs_default, sizeof(n->cse.acs));
+    memcpy(n->cse.iocs.nvm, nvme_cse_iocs_nvm_default, sizeof(n->cse.iocs.=
nvm));
+    memcpy(n->cse.iocs.zoned, nvme_cse_iocs_zoned_default,
+           sizeof(n->cse.iocs.zoned));
=20
     id->vid =3D cpu_to_le16(pci_get_word(pci_conf + PCI_VENDOR_ID));
     id->ssvid =3D cpu_to_le16(pci_get_word(pci_conf + PCI_SUBSYSTEM_VENDOR=
_ID));
@@ -8859,9 +8891,8 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *pc=
i_dev)
     NVME_CAP_SET_MQES(cap, n->params.mqes);
     NVME_CAP_SET_CQR(cap, 1);
     NVME_CAP_SET_TO(cap, 0xf);
-    NVME_CAP_SET_CSS(cap, NVME_CAP_CSS_NVM);
-    NVME_CAP_SET_CSS(cap, NVME_CAP_CSS_CSI_SUPP);
-    NVME_CAP_SET_CSS(cap, NVME_CAP_CSS_ADMIN_ONLY);
+    NVME_CAP_SET_CSS(cap, NVME_CAP_CSS_NCSS);
+    NVME_CAP_SET_CSS(cap, NVME_CAP_CSS_IOCSS);
     NVME_CAP_SET_MPSMAX(cap, 4);
     NVME_CAP_SET_CMBS(cap, n->params.cmb_size_mb ? 1 : 0);
     NVME_CAP_SET_PMRS(cap, n->pmr.dev ? 1 : 0);
@@ -8908,8 +8939,6 @@ void nvme_attach_ns(NvmeCtrl *n, NvmeNamespace *ns)
=20
     n->namespaces[nsid] =3D ns;
     ns->attached++;
-
-    nvme_update_dsm_limits(n, ns);
 }
=20
 static void nvme_realize(PCIDevice *pci_dev, Error **errp)
@@ -8965,7 +8994,7 @@ static void nvme_realize(PCIDevice *pci_dev, Error **=
errp)
             return;
         }
=20
-        nvme_attach_ns(n, ns);
+        n->subsys->namespaces[ns->params.nsid] =3D ns;
     }
 }
=20
diff --git a/hw/nvme/ns.c b/hw/nvme/ns.c
index 94cabc6a5b8d..98c1e75a5d29 100644
--- a/hw/nvme/ns.c
+++ b/hw/nvme/ns.c
@@ -763,20 +763,6 @@ static void nvme_ns_realize(DeviceState *dev, Error **=
errp)
=20
     ns->id_ns.endgid =3D cpu_to_le16(0x1);
     ns->id_ns_ind.endgrpid =3D cpu_to_le16(0x1);
-
-    if (ns->params.detached) {
-        return;
-    }
-
-    if (ns->params.shared) {
-        for (i =3D 0; i < ARRAY_SIZE(subsys->ctrls); i++) {
-            NvmeCtrl *ctrl =3D subsys->ctrls[i];
-
-            if (ctrl && ctrl !=3D SUBSYS_SLOT_RSVD) {
-                nvme_attach_ns(ctrl, ns);
-            }
-        }
-    }
 }
=20
 static const Property nvme_ns_props[] =3D {
diff --git a/hw/nvme/nvme.h b/hw/nvme/nvme.h
index b8d063a027a9..6f782ba18826 100644
--- a/hw/nvme/nvme.h
+++ b/hw/nvme/nvme.h
@@ -237,7 +237,6 @@ typedef struct NvmeNamespace {
     NvmeLBAF     lbaf;
     unsigned int nlbaf;
     size_t       lbasz;
-    const uint32_t *iocs;
     uint8_t      csi;
     uint16_t     status;
     int          attached;
@@ -587,6 +586,10 @@ typedef struct NvmeCtrl {
=20
     struct {
         uint32_t acs[256];
+        struct {
+            uint32_t nvm[256];
+            uint32_t zoned[256];
+        } iocs;
     } cse;
=20
     struct {
diff --git a/include/block/nvme.h b/include/block/nvme.h
index 763b2b2f0ec7..366739f79edf 100644
--- a/include/block/nvme.h
+++ b/include/block/nvme.h
@@ -142,9 +142,9 @@ enum NvmeCapMask {
     ((cap) |=3D (uint64_t)((val) & CAP_CMBS_MASK)   << CAP_CMBS_SHIFT)
=20
 enum NvmeCapCss {
-    NVME_CAP_CSS_NVM        =3D 1 << 0,
-    NVME_CAP_CSS_CSI_SUPP   =3D 1 << 6,
-    NVME_CAP_CSS_ADMIN_ONLY =3D 1 << 7,
+    NVME_CAP_CSS_NCSS    =3D 1 << 0,
+    NVME_CAP_CSS_IOCSS   =3D 1 << 6,
+    NVME_CAP_CSS_NOIOCSS =3D 1 << 7,
 };
=20
 enum NvmeCcShift {
@@ -177,7 +177,7 @@ enum NvmeCcMask {
=20
 enum NvmeCcCss {
     NVME_CC_CSS_NVM        =3D 0x0,
-    NVME_CC_CSS_CSI        =3D 0x6,
+    NVME_CC_CSS_ALL        =3D 0x6,
     NVME_CC_CSS_ADMIN_ONLY =3D 0x7,
 };
=20
@@ -938,6 +938,8 @@ enum NvmeStatusCodes {
     NVME_INVALID_SEC_CTRL_STATE =3D 0x0120,
     NVME_INVALID_NUM_RESOURCES  =3D 0x0121,
     NVME_INVALID_RESOURCE_ID    =3D 0x0122,
+    NVME_IOCS_NOT_SUPPORTED     =3D 0x0129,
+    NVME_IOCS_NOT_ENABLED       =3D 0x012a,
     NVME_IOCS_COMBINATION_REJECTED =3D 0x012b,
     NVME_INVALID_IOCS           =3D 0x012c,
     NVME_CONFLICTING_ATTRS      =3D 0x0180,
--=20
2.47.2
From nobody Fri Apr  4 10:58:09 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
ARC-Seal: i=1; a=rsa-sha256; t=1740648784; cv=none;
	d=zohomail.com; s=zohoarc;
	b=g+dWGIeUXU8+qWQfCGY9wr8bbVTKoagkMubV/+adFzXLH2BF5Aw1JEYE2UxGl14dMxMTKFDqCxBxNioOQW0Zq+WyD0y8XodMbWsyUIBNVk0NmeJJjl887sxxUVPyF2ry4W26UhT0246640pxz3MNKWpIVVSScDWkeqGoassATcQ=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1740648784;
 h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To;
	bh=zu2GVWEr7Tf8ty5a+Qx0WF5I6xMcGVmg/nb+edrkqjA=;
	b=n6sfv29TJmKjYRZV4/QtcAbrkyFKHzw2Le3+BZ6soNgxs/AbYmD5xVtbCBD7I1B6BM3ZlsVm5GzHV7hZd44ipI8b5SseChxOVbwLlul1FOsNALgW0cxg7tAY4rRaprxXI9nYlJVgyeYHjqcG009VTrgSYdg16Zr/BA/7D7j8ZDg=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1740648784785711.4096639260232;
 Thu, 27 Feb 2025 01:33:04 -0800 (PST)
Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces@nongnu.org>)
	id 1tnaEp-0000Wd-K9; Thu, 27 Feb 2025 04:31:30 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaEF-00088m-Vc; Thu, 27 Feb 2025 04:30:55 -0500
Received: from fout-a6-smtp.messagingengine.com ([103.168.172.149])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaEA-0008It-7W; Thu, 27 Feb 2025 04:30:50 -0500
Received: from phl-compute-06.internal (phl-compute-06.phl.internal
 [10.202.2.46])
 by mailfout.phl.internal (Postfix) with ESMTP id 6C4271382F7F;
 Thu, 27 Feb 2025 04:30:41 -0500 (EST)
Received: from phl-mailfrontend-01 ([10.202.2.162])
 by phl-compute-06.internal (MEProxy); Thu, 27 Feb 2025 04:30:41 -0500
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu,
 27 Feb 2025 04:30:40 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk;
 h=cc:cc:content-transfer-encoding:content-type:date:date:from
 :from:in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to; s=fm3; t=1740648641; x=
 1740735041; bh=zu2GVWEr7Tf8ty5a+Qx0WF5I6xMcGVmg/nb+edrkqjA=; b=N
 o53tOZNczLSAEEk7cexZU7TiERMwk4BX+zTC3HEkEKJcpazNSjklsBr4vQJwcMp3
 dkiv/rJBup12uEW9CiG3CLKL4W0q+hxQ58K67koKGZpAkGej0X90LsYglkU0CNJo
 kQ2zB49QhrhYqbkbb4ctFxrzdPIo5QXMFAd+ej66imU2bLFdZWThsEDbXUlwxDVK
 uEPKDxRqhmbhN2PR9HkLnj50IgTBqCYz6YlgyKLUvObpkJZceG9+04hECSbsxPsX
 /ImgGBcyE/lC6AijGYkxGmpyWnVLtaMR6QKdAgwnfU5DQuS0Uj6TuVKiDKcZMGHm
 BelWaqe4jk3FIyAZNn82w==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:date:date:feedback-id:feedback-id:from:from
 :in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender
 :x-me-sender:x-sasl-enc; s=fm1; t=1740648641; x=1740735041; bh=z
 u2GVWEr7Tf8ty5a+Qx0WF5I6xMcGVmg/nb+edrkqjA=; b=dJnNSzeIumhgeF8cM
 h2Pr3lVWUYvNi3RcA8BxL71QORy6yrJezYFVL+pzG/yfG4TYOMXlyoBySO8uZv0S
 NHzFku1B59HthH0ohVDQIhS0Zj9pMSKbDOH6L5etaVEJ4x4iYhQZuGfDJXVgjutS
 OLiJvKyocS2Asqi/qlPyZj8akv34xV2Irfkznco36dfMsqvTdADCfRtyKc7ZhqA/
 dD9mM9/c+AYVGap+LhxzTKYLDAOklOEXUVKQQbTvBgUZRP1ZFdZ5qdZZJDfOMFAj
 xeIAfq8bWC1IJOelkp0SC60gwUQWbJp2pWaOx54CQO+xOFmxAm9n326egfKLS9Jk
 DWVQA==
X-ME-Sender: <xms:wTDAZ5ATT442KcKefODcDYCtmdnqAlICjzGfMNwndGC8k8wKJgNTpg>
 <xme:wTDAZ3jQ9NNIDV3WSx0TR7aXhlkgfAYNlP1Qpdiu3Z50HIX8RrfZEP50WVDFMKK6u
 47kmFU03_k3igjVhXw>
X-ME-Received: 
 <xmr:wTDAZ0nriGiifGuQhprTrn0vpgv6dikNVe2pbwv2_lpRl0607GAY2msS3KvHCfT1Uw-NhK7zoTOy91QFOs9a-14R>
X-ME-Proxy-Cause: 
 gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdekjeduudcutefuodetggdotefrod
 ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpggftfghnshhusghstghrihgsvgdp
 uffrtefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivg
 hnthhsucdlqddutddtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddt
 necuhfhrohhmpefmlhgruhhsucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnth
 drughkqeenucggtffrrghtthgvrhhnpeejgfeilefgieevheekueevheehkeefveegiefg
 heefgfejjeehffefgedujedugeenucevlhhushhtvghrufhiiigvpedunecurfgrrhgrmh
 epmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughkpdhnsggprhgtphht
 thhopeejpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehqvghmuhdquggvvhgvlh
 esnhhonhhgnhhurdhorhhgpdhrtghpthhtohepphgvthgvrhdrmhgrhiguvghllheslhhi
 nhgrrhhordhorhhgpdhrtghpthhtohepkhdrjhgvnhhsvghnsehsrghmshhunhhgrdgtoh
 hmpdhrtghpthhtohepfhhoshhsseguvghfmhgrtghrohdrihhtpdhrtghpthhtohepkhgs
 uhhstghhsehkvghrnhgvlhdrohhrghdprhgtphhtthhopehithhssehirhhrvghlvghvrg
 hnthdrughkpdhrtghpthhtohepqhgvmhhuqdgslhhotghksehnohhnghhnuhdrohhrgh
X-ME-Proxy: <xmx:wTDAZzww3_8bDnVkBZzEhsw6MpvVtFhEc4mYXCjq4pdfSBGu4dv7wQ>
 <xmx:wTDAZ-Q18TLoAAmRWmr723k8WWIfLAqBp30ty5hRLmSSnrfcuFq1Ig>
 <xmx:wTDAZ2ZmNU7X6TxX-tct8cVnEozV3PU9dw7LFBNnTWQTHH0gJmDkRQ>
 <xmx:wTDAZ_TOYZN1dbd08ZiaNmXbd15V4FrPnpCNdhD0FAiSj6sH5u1b1A>
 <xmx:wTDAZ7RokyMzTNpnsEz3Y2JJV33E68AzPSujF0JtdomPkWFTkNVWj5od>
Feedback-ID: idc91472f:Fastmail
From: Klaus Jensen <its@irrelevant.dk>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
 Klaus Jensen <k.jensen@samsung.com>,
 Jesper Wendel Devantier <foss@defmacro.it>,
 Keith Busch <kbusch@kernel.org>, Klaus Jensen <its@irrelevant.dk>,
 qemu-block@nongnu.org
Subject: [PULL 08/10] hw/nvme: only set command abort requested when cancelled
 due to Abort
Date: Thu, 27 Feb 2025 10:30:15 +0100
Message-ID: <20250227093018.11262-9-its@irrelevant.dk>
X-Mailer: git-send-email 2.47.2
In-Reply-To: <20250227093018.11262-1-its@irrelevant.dk>
References: <20250227093018.11262-1-its@irrelevant.dk>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=103.168.172.149; envelope-from=its@irrelevant.dk;
 helo=fout-a6-smtp.messagingengine.com
X-Spam_score_int: -27
X-Spam_score: -2.8
X-Spam_bar: --
X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org
X-ZohoMail-DKIM: pass (identity @irrelevant.dk)
X-ZM-MESSAGEID: 1740648786523019100
Content-Type: text/plain; charset="utf-8"

From: Klaus Jensen <k.jensen@samsung.com>

The Command Abort Requested status code should only be set if the
command was explicitly cancelled due to an Abort command. Or, in the
case the cancel was due to Submission Queue deletion, set the status
code to Command Aborted due to SQ Deletion.

Reviewed-by: Jesper Wendel Devantier <foss@defmacro.it>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 21496c6b6b81..07cd63298526 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -1783,10 +1783,6 @@ static void nvme_aio_err(NvmeRequest *req, int ret)
         break;
     }
=20
-    if (ret =3D=3D -ECANCELED) {
-        status =3D NVME_CMD_ABORT_REQ;
-    }
-
     trace_pci_nvme_err_aio(nvme_cid(req), strerror(-ret), status);
=20
     error_setg_errno(&local_err, -ret, "aio failed");
@@ -4827,6 +4823,7 @@ static uint16_t nvme_del_sq(NvmeCtrl *n, NvmeRequest =
*req)
     while (!QTAILQ_EMPTY(&sq->out_req_list)) {
         r =3D QTAILQ_FIRST(&sq->out_req_list);
         assert(r->aiocb);
+        r->status =3D NVME_CMD_ABORT_SQ_DEL;
         blk_aio_cancel(r->aiocb);
     }
=20
@@ -6137,6 +6134,7 @@ static uint16_t nvme_abort(NvmeCtrl *n, NvmeRequest *=
req)
     QTAILQ_FOREACH_SAFE(r, &sq->out_req_list, entry, next) {
         if (r->cqe.cid =3D=3D cid) {
             if (r->aiocb) {
+                r->status =3D NVME_CMD_ABORT_REQ;
                 blk_aio_cancel_async(r->aiocb);
             }
             break;
--=20
2.47.2
From nobody Fri Apr  4 10:58:09 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
ARC-Seal: i=1; a=rsa-sha256; t=1740648796; cv=none;
	d=zohomail.com; s=zohoarc;
	b=cVqw+A6WlUpMbB7n9lw+C2Wcu86mK7HAG4vDsmfy90tnr+Ll+U6QWTPXobJjmK2uCuiS8xTbuR9LSnwiAsMZPIL20KH4Q9fSEo8QHJZJEuToaNLrsR++PTp2YvcmUAcFoTRPhJfkXJvKrDqKDtM4+LP9ar43aS93I+8EXoYo6MQ=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1740648796;
 h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To;
	bh=Ytpy2MAeryNuZDqCBhYnozRv17jn2pwOzpfP3w683+c=;
	b=kSpTvhlDAGFmege5u9vumJzGCiGOA6C+H20THDci5TaRTMmvU/J88Co91dPRmGtmcysXqWdwuU9ZwM7bDLz0swYCYr3/Ej+Bg16+DuIY6n7WOf55OWs3KFZO7cVYAjyShAtYHyOdqP9H3H+TIeRJZ4UxtG8YSJHG7UvxJuvRiU8=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1740648796458536.056721337665;
 Thu, 27 Feb 2025 01:33:16 -0800 (PST)
Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces@nongnu.org>)
	id 1tnaFG-0001SN-HD; Thu, 27 Feb 2025 04:31:54 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaEG-00088q-6G; Thu, 27 Feb 2025 04:30:55 -0500
Received: from fout-a6-smtp.messagingengine.com ([103.168.172.149])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaED-0008J4-2O; Thu, 27 Feb 2025 04:30:51 -0500
Received: from phl-compute-10.internal (phl-compute-10.phl.internal
 [10.202.2.50])
 by mailfout.phl.internal (Postfix) with ESMTP id D69F91382F86;
 Thu, 27 Feb 2025 04:30:43 -0500 (EST)
Received: from phl-mailfrontend-01 ([10.202.2.162])
 by phl-compute-10.internal (MEProxy); Thu, 27 Feb 2025 04:30:43 -0500
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu,
 27 Feb 2025 04:30:41 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk;
 h=cc:cc:content-transfer-encoding:content-type:date:date:from
 :from:in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to; s=fm3; t=1740648643; x=
 1740735043; bh=Ytpy2MAeryNuZDqCBhYnozRv17jn2pwOzpfP3w683+c=; b=d
 iU+gVmAkwVTpWL8tdL/yfcxbuCTPaW0m2pqkhX7gsQBpJydl0+mJi57coeQA0lzn
 CsfnmEtaXm1qOEX66CrP/Fxtu/nenkRg4RwS6ugiRtDKSoNh5cJFp12vZ+sEkbJu
 yaZ0HhZutKeJH3cfaoJ+kAgQQvTzKInRpzSPhTDErtjWKZwPGfx3Egux7ySBo6EF
 T0mySm/TNvAb/1QpBhQB3n6fX8di85ADO0yGsNNVYY4ZvijxjYOko5IvWC9mOD2H
 0zbzLpcocJEK0Z6GL1epjlzrNnMfgoearrOCe35TUbqqZIDtiZ9txpC/cRrZJb8Z
 /X0mImcXHmi4ZPHQfzx+w==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:date:date:feedback-id:feedback-id:from:from
 :in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender
 :x-me-sender:x-sasl-enc; s=fm1; t=1740648643; x=1740735043; bh=Y
 tpy2MAeryNuZDqCBhYnozRv17jn2pwOzpfP3w683+c=; b=qqI1g/YwdEj3/3Thr
 k48kCzxmG7HGb+KgkPmvwXFKQad58yIpLKKeqWntqCBPEycevHnGOzsJbppf8hZX
 V8XK4vzrSPjJVTjjlRZmiiiqRx3mvIOFmMDvpldBOnqeD9RRH7n51QmQkSbV+jcI
 IgyPE0w8w5/GlE8YIaoGvOX7PdavnD9Jj6k4GXx7LPexRpqRvedK1MAwUYpDVAtv
 O2B8EhSVmLbRU4RZlu+Uzpi25OSKiZctWUSMGpqt3DQ61WQo5VSq3e4G8KhzbvlF
 SQmrByzVd8hWr54ssD4xXnSvYPtX5txaJoie+2GkugOhXci34H5ogKIcD1y2Np6F
 Q2yzQ==
X-ME-Sender: <xms:wzDAZ3rD9aG8smKqk6pnGkZQV_-aRsMO9mVJpm2Od8A-wHqHJ_GCHg>
 <xme:wzDAZxrzsQv7hwyrSrRAHouXGTqgKfN9bv_bR5Y_LCtMMn6JH8pocN1YLGJ-ou-rU
 Y1dQ1odBr_H0TvOBE8>
X-ME-Received: 
 <xmr:wzDAZ0M2hnrcDr-VZY3JtOkBfw-Zz1-Dat13hQF0nH5voEXbRdKQkJZuxDDkjPo66_KInuJonMO-FpLf-e5bwT4q>
X-ME-Proxy-Cause: 
 gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdekjedutdcutefuodetggdotefrod
 ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpggftfghnshhusghstghrihgsvgdp
 uffrtefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivg
 hnthhsucdlqddutddtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddt
 necuhfhrohhmpefmlhgruhhsucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnth
 drughkqeenucggtffrrghtthgvrhhnpeejgfeilefgieevheekueevheehkeefveegiefg
 heefgfejjeehffefgedujedugeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh
 epmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughkpdhnsggprhgtphht
 thhopeduvddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepqhgvmhhuqdguvghvvg
 hlsehnohhnghhnuhdrohhrghdprhgtphhtthhopehpvghtvghrrdhmrgihuggvlhhlsehl
 ihhnrghrohdrohhrghdprhgtphhtthhopehkrdhjvghnshgvnhesshgrmhhsuhhnghdrtg
 homhdprhgtphhtthhopehfohhsshesuggvfhhmrggtrhhordhithdprhgtphhtthhopehk
 sghushgthheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepihhtshesihhrrhgvlhgvvh
 grnhhtrdgukhdprhgtphhtthhopehsthgvfhgrnhhhrgesrhgvughhrghtrdgtohhmpdhr
 tghpthhtohepfhgrmhesvghuphhhohhnrdhnvghtpdhrtghpthhtohepphhhihhlmhguse
 hlihhnrghrohdrohhrgh
X-ME-Proxy: <xmx:wzDAZ664jCQlh7FS805SoilypiRKchacUWD5OsILu--6U5r3_YkQBQ>
 <xmx:wzDAZ266gl4zhfmJKFQ4S-fo77_LWBuaUTrc_8xxzJp6lPqdGY7yPw>
 <xmx:wzDAZyjRdnNP0SUQPrBXlY9isLim68IXLt49OyJWJ1ye5LbRwEh3RQ>
 <xmx:wzDAZ46P_txz-0DnQbevaVXICTmETDemncd7YrfhD6foXSL3Egskxg>
 <xmx:wzDAZ2yPxQw7FPqyWqxA0o9H9dMhxpByZZJceBkGk48rfWKDvg41dcwY>
Feedback-ID: idc91472f:Fastmail
From: Klaus Jensen <its@irrelevant.dk>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
 Klaus Jensen <k.jensen@samsung.com>,
 Jesper Wendel Devantier <foss@defmacro.it>,
 Keith Busch <kbusch@kernel.org>, Klaus Jensen <its@irrelevant.dk>,
 Stefan Hajnoczi <stefanha@redhat.com>, Fam Zheng <fam@euphon.net>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <philmd@linaro.org>,
 Kevin Wolf <kwolf@redhat.com>, Hanna Reitz <hreitz@redhat.com>,
 qemu-block@nongnu.org
Subject: [PULL 09/10] hw/nvme: set error status code explicitly for misc
 commands
Date: Thu, 27 Feb 2025 10:30:16 +0100
Message-ID: <20250227093018.11262-10-its@irrelevant.dk>
X-Mailer: git-send-email 2.47.2
In-Reply-To: <20250227093018.11262-1-its@irrelevant.dk>
References: <20250227093018.11262-1-its@irrelevant.dk>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=103.168.172.149; envelope-from=its@irrelevant.dk;
 helo=fout-a6-smtp.messagingengine.com
X-Spam_score_int: -27
X-Spam_score: -2.8
X-Spam_bar: --
X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org
X-ZohoMail-DKIM: pass (identity @irrelevant.dk)
X-ZM-MESSAGEID: 1740648798564019100
Content-Type: text/plain; charset="utf-8"

From: Klaus Jensen <k.jensen@samsung.com>

The nvme_aio_err() does not handle Verify, Compare, Copy and other misc
commands and defaults to setting the error status code to Internal
Device Error. For some of these commands, we know better, so set it
explicitly.

For the commands using the nvme_misc_cb() callback (Copy, Flush, ...),
if no status code has explicitly been set by the lower handlers, default
to Internal Device Error as previously.

Reviewed-by: Jesper Wendel Devantier <foss@defmacro.it>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c       | 28 ++++++++++++++++++++++------
 include/block/nvme.h |  1 +
 2 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 07cd63298526..b7222fd9ac02 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -1771,7 +1771,6 @@ static void nvme_aio_err(NvmeRequest *req, int ret)
     case NVME_CMD_READ:
         status =3D NVME_UNRECOVERED_READ;
         break;
-    case NVME_CMD_FLUSH:
     case NVME_CMD_WRITE:
     case NVME_CMD_WRITE_ZEROES:
     case NVME_CMD_ZONE_APPEND:
@@ -2157,11 +2156,16 @@ static inline bool nvme_is_write(NvmeRequest *req)
 static void nvme_misc_cb(void *opaque, int ret)
 {
     NvmeRequest *req =3D opaque;
+    uint16_t cid =3D nvme_cid(req);
=20
-    trace_pci_nvme_misc_cb(nvme_cid(req));
+    trace_pci_nvme_misc_cb(cid);
=20
     if (ret) {
-        nvme_aio_err(req, ret);
+        if (!req->status) {
+            req->status =3D NVME_INTERNAL_DEV_ERROR;
+        }
+
+        trace_pci_nvme_err_aio(cid, strerror(-ret), req->status);
     }
=20
     nvme_enqueue_req_completion(nvme_cq(req), req);
@@ -2264,7 +2268,10 @@ static void nvme_verify_cb(void *opaque, int ret)
=20
     if (ret) {
         block_acct_failed(stats, acct);
-        nvme_aio_err(req, ret);
+        req->status =3D NVME_UNRECOVERED_READ;
+
+        trace_pci_nvme_err_aio(nvme_cid(req), strerror(-ret), req->status);
+
         goto out;
     }
=20
@@ -2363,7 +2370,10 @@ static void nvme_compare_mdata_cb(void *opaque, int =
ret)
=20
     if (ret) {
         block_acct_failed(stats, acct);
-        nvme_aio_err(req, ret);
+        req->status =3D NVME_UNRECOVERED_READ;
+
+        trace_pci_nvme_err_aio(nvme_cid(req), strerror(-ret), req->status);
+
         goto out;
     }
=20
@@ -2445,7 +2455,10 @@ static void nvme_compare_data_cb(void *opaque, int r=
et)
=20
     if (ret) {
         block_acct_failed(stats, acct);
-        nvme_aio_err(req, ret);
+        req->status =3D NVME_UNRECOVERED_READ;
+
+        trace_pci_nvme_err_aio(nvme_cid(req), strerror(-ret), req->status);
+
         goto out;
     }
=20
@@ -2924,6 +2937,7 @@ static void nvme_copy_out_completed_cb(void *opaque, =
int ret)
=20
     if (ret < 0) {
         iocb->ret =3D ret;
+        req->status =3D NVME_WRITE_FAULT;
         goto out;
     } else if (iocb->ret < 0) {
         goto out;
@@ -2988,6 +3002,7 @@ static void nvme_copy_in_completed_cb(void *opaque, i=
nt ret)
=20
     if (ret < 0) {
         iocb->ret =3D ret;
+        req->status =3D NVME_UNRECOVERED_READ;
         goto out;
     } else if (iocb->ret < 0) {
         goto out;
@@ -3510,6 +3525,7 @@ static void nvme_flush_ns_cb(void *opaque, int ret)
=20
     if (ret < 0) {
         iocb->ret =3D ret;
+        iocb->req->status =3D NVME_WRITE_FAULT;
         goto out;
     } else if (iocb->ret < 0) {
         goto out;
diff --git a/include/block/nvme.h b/include/block/nvme.h
index 366739f79edf..358e516e38b0 100644
--- a/include/block/nvme.h
+++ b/include/block/nvme.h
@@ -906,6 +906,7 @@ enum NvmeStatusCodes {
     NVME_SGL_DESCR_TYPE_INVALID =3D 0x0011,
     NVME_INVALID_USE_OF_CMB     =3D 0x0012,
     NVME_INVALID_PRP_OFFSET     =3D 0x0013,
+    NVME_COMMAND_INTERRUPTED    =3D 0x0021,
     NVME_FDP_DISABLED           =3D 0x0029,
     NVME_INVALID_PHID_LIST      =3D 0x002a,
     NVME_LBA_RANGE              =3D 0x0080,
--=20
2.47.2
From nobody Fri Apr  4 10:58:09 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
ARC-Seal: i=1; a=rsa-sha256; t=1740648808; cv=none;
	d=zohomail.com; s=zohoarc;
	b=b6zuPmwwvCTsIDFYhQ0TAczrgomJoG06sP3gFm0B/0YRLJuZuO5FdfvDruzcbG84FOnmgwpYWhS12aaQj2yu5CdW39MYuejY5gws+pqGGFUz9+YXc/N8Fk+Qk30HcVxbvIVL0b0G7n29CjuOr7GfmKSorQwa9kYZF9XNugcYyg8=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1740648808;
 h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To;
	bh=Ek139Gu4a814lUKETN8ffYGAAziBjZAe8RnGBT11S9U=;
	b=mp0jHwYpKou5C2nBvi69ZmZ89B8EXS92R2+5uFIWW44Mkr/zMoHklsWkRCzeZ1MCgLOdpBJ+L6wFe2FX6dHFdhJjUOqTsFWQVDtBKKKjw2NR4f1/b/KdEchqJPbzs2wk5aZMT2OMgKTqY6+aqtENziqiKaW0EEtiLpE361w6SR8=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1740648808130117.39567985028577;
 Thu, 27 Feb 2025 01:33:28 -0800 (PST)
Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces@nongnu.org>)
	id 1tnaEx-0000o5-NJ; Thu, 27 Feb 2025 04:31:39 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaEG-00088s-Bo; Thu, 27 Feb 2025 04:30:55 -0500
Received: from fout-a6-smtp.messagingengine.com ([103.168.172.149])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <its@irrelevant.dk>)
 id 1tnaED-0008JC-2K; Thu, 27 Feb 2025 04:30:52 -0500
Received: from phl-compute-06.internal (phl-compute-06.phl.internal
 [10.202.2.46])
 by mailfout.phl.internal (Postfix) with ESMTP id 92EE61382F81;
 Thu, 27 Feb 2025 04:30:45 -0500 (EST)
Received: from phl-mailfrontend-01 ([10.202.2.162])
 by phl-compute-06.internal (MEProxy); Thu, 27 Feb 2025 04:30:45 -0500
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu,
 27 Feb 2025 04:30:44 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk;
 h=cc:cc:content-transfer-encoding:content-type:date:date:from
 :from:in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to; s=fm3; t=1740648645; x=
 1740735045; bh=Ek139Gu4a814lUKETN8ffYGAAziBjZAe8RnGBT11S9U=; b=G
 fVJvOGt+iaDrFn8MzzN5UDNeUZS9fFp83eRweFGolG1DMiv9YkjCPR1vorlyZ0Bi
 D7Aa1dgfNsZuUY1XcXJwKaH7H+4uYQ8yTF8hMuR6y3+EhXNSx4yYpaiZmrRl1T/D
 smLuqlExs3LgT6xD1qSQ0AiIZa9/fiYELsi9NRP1aiHwKSe6jhUacmDu+y0XESES
 +BwLiwSjVkZihMribkuPYZeYw+0Lw+SqiCKGy0Z6YmIiyk2H4EDNZnOnTvCNFb1P
 pXvmGsDnN7JguNYPmFyq/Y2FOwIW+O4eXOK918DvGEoKVcL2SRnfpnjsIK4IGMVC
 uZV8eUn4xiq+D9JcoUBUw==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:date:date:feedback-id:feedback-id:from:from
 :in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender
 :x-me-sender:x-sasl-enc; s=fm1; t=1740648645; x=1740735045; bh=E
 k139Gu4a814lUKETN8ffYGAAziBjZAe8RnGBT11S9U=; b=HxNfXZOY6422hdno0
 SiAInBPWlv4rMcMMo8DgZXdzv8DvH3f1rHw+CemKZZ43yUzpXTI6JBSJ4a+JepGW
 2GoXU/8e+G9ewqG5XyqQWV8Ge1Lspty6GW8aHzZ7qHhqt1ZAlptUjllpzfvkNVdo
 QCPK1yzJTTsNQLWi2pWK+hvKSWb9h9UtG9BhdgK6ejYEeycfNCPdkX2/rjI1nJQx
 WBnACrGjRaNvMPGNdy5X8CgRv7M4LwCkTRNVaLoWZSkF3270jlOod5YW3IozUKh3
 egmKWLc578W+fk5isMfznyBhDmDBIYgbl0pBT0YJ2JqWazApAlRZ7jz4pjnUphkQ
 Sd9Bg==
X-ME-Sender: <xms:xTDAZxyIegYiV0VS_KTdZ6FAoLBxeoSpvUFtOU8vuuur2HvWcrowZg>
 <xme:xTDAZxQ4O-K9M5EYgsTT1ZO3ALb-QUFccFZ9fqwOpdLsXgfPLSzANZ1FJlYlTeer2
 qJQKwZSCbCcbOVSdT0>
X-ME-Received: 
 <xmr:xTDAZ7UwaYmY3Ccj4esHT_XIL6q78KzbahBpnIn96KlFWw0U4chTj-hZwCYQEOnbEDQsIYTssxp93QpdAEhSaTnt>
X-ME-Proxy-Cause: 
 gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdekjeduudcutefuodetggdotefrod
 ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpggftfghnshhusghstghrihgsvgdp
 uffrtefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivg
 hnthhsucdlqddutddtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddt
 necuhfhrohhmpefmlhgruhhsucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnth
 drughkqeenucggtffrrghtthgvrhhnpeejgfeilefgieevheekueevheehkeefveegiefg
 heefgfejjeehffefgedujedugeenucevlhhushhtvghrufhiiigvpedunecurfgrrhgrmh
 epmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughkpdhnsggprhgtphht
 thhopeejpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehqvghmuhdquggvvhgvlh
 esnhhonhhgnhhurdhorhhgpdhrtghpthhtohepphgvthgvrhdrmhgrhiguvghllheslhhi
 nhgrrhhordhorhhgpdhrtghpthhtohepkhdrjhgvnhhsvghnsehsrghmshhunhhgrdgtoh
 hmpdhrtghpthhtohepfhhoshhsseguvghfmhgrtghrohdrihhtpdhrtghpthhtohepkhgs
 uhhstghhsehkvghrnhgvlhdrohhrghdprhgtphhtthhopehithhssehirhhrvghlvghvrg
 hnthdrughkpdhrtghpthhtohepqhgvmhhuqdgslhhotghksehnohhnghhnuhdrohhrgh
X-ME-Proxy: <xmx:xTDAZzjHSyVt69p3YbfHsQg8Ul_fLr6iog3eR0IEeVvg2Wwd-ekDAA>
 <xmx:xTDAZzDnI2qvK1_K5eMpkkBcGh1jPBHd6UzGNsZsjtQ1iJ1jMu-hBQ>
 <xmx:xTDAZ8IrJbQ3qZYZuv45ZymqahfA6fOic-AWWAPgXz_mDtY9la_pzA>
 <xmx:xTDAZyB_mR6oTwm2Lystjv09gDLMTCeQjGx4LgZw06goCN2vahs-tw>
 <xmx:xTDAZ1Dv8sISDrDZc7P_KjNVUgHvx4EjfEI4LeOzP2P2ZveHtfmINi-6>
Feedback-ID: idc91472f:Fastmail
From: Klaus Jensen <its@irrelevant.dk>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
 Klaus Jensen <k.jensen@samsung.com>,
 Jesper Wendel Devantier <foss@defmacro.it>,
 Keith Busch <kbusch@kernel.org>, Klaus Jensen <its@irrelevant.dk>,
 qemu-block@nongnu.org
Subject: [PULL 10/10] hw/nvme: remove nvme_aio_err()
Date: Thu, 27 Feb 2025 10:30:17 +0100
Message-ID: <20250227093018.11262-11-its@irrelevant.dk>
X-Mailer: git-send-email 2.47.2
In-Reply-To: <20250227093018.11262-1-its@irrelevant.dk>
References: <20250227093018.11262-1-its@irrelevant.dk>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=103.168.172.149; envelope-from=its@irrelevant.dk;
 helo=fout-a6-smtp.messagingengine.com
X-Spam_score_int: -27
X-Spam_score: -2.8
X-Spam_bar: --
X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org
X-ZohoMail-DKIM: pass (identity @irrelevant.dk)
X-ZM-MESSAGEID: 1740648809919019000
Content-Type: text/plain; charset="utf-8"

From: Klaus Jensen <k.jensen@samsung.com>

nvme_rw_complete_cb() is the only remaining user of nvme_aio_err(), so
open code the status code setting instead.

Reviewed-by: Jesper Wendel Devantier <foss@defmacro.it>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c | 60 +++++++++++++++++++-------------------------------
 1 file changed, 23 insertions(+), 37 deletions(-)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index b7222fd9ac02..e62c6a358828 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -1762,42 +1762,6 @@ static uint16_t nvme_check_dulbe(NvmeNamespace *ns, =
uint64_t slba,
     return NVME_SUCCESS;
 }
=20
-static void nvme_aio_err(NvmeRequest *req, int ret)
-{
-    uint16_t status =3D NVME_SUCCESS;
-    Error *local_err =3D NULL;
-
-    switch (req->cmd.opcode) {
-    case NVME_CMD_READ:
-        status =3D NVME_UNRECOVERED_READ;
-        break;
-    case NVME_CMD_WRITE:
-    case NVME_CMD_WRITE_ZEROES:
-    case NVME_CMD_ZONE_APPEND:
-    case NVME_CMD_COPY:
-        status =3D NVME_WRITE_FAULT;
-        break;
-    default:
-        status =3D NVME_INTERNAL_DEV_ERROR;
-        break;
-    }
-
-    trace_pci_nvme_err_aio(nvme_cid(req), strerror(-ret), status);
-
-    error_setg_errno(&local_err, -ret, "aio failed");
-    error_report_err(local_err);
-
-    /*
-     * Set the command status code to the first encountered error but allo=
w a
-     * subsequent Internal Device Error to trump it.
-     */
-    if (req->status && status !=3D NVME_INTERNAL_DEV_ERROR) {
-        return;
-    }
-
-    req->status =3D status;
-}
-
 static inline uint32_t nvme_zone_idx(NvmeNamespace *ns, uint64_t slba)
 {
     return ns->zone_size_log2 > 0 ? slba >> ns->zone_size_log2 :
@@ -2182,8 +2146,30 @@ void nvme_rw_complete_cb(void *opaque, int ret)
     trace_pci_nvme_rw_complete_cb(nvme_cid(req), blk_name(blk));
=20
     if (ret) {
+        Error *err =3D NULL;
+
         block_acct_failed(stats, acct);
-        nvme_aio_err(req, ret);
+
+        switch (req->cmd.opcode) {
+        case NVME_CMD_READ:
+            req->status =3D NVME_UNRECOVERED_READ;
+            break;
+
+        case NVME_CMD_WRITE:
+        case NVME_CMD_WRITE_ZEROES:
+        case NVME_CMD_ZONE_APPEND:
+            req->status =3D NVME_WRITE_FAULT;
+            break;
+
+        default:
+            req->status =3D NVME_INTERNAL_DEV_ERROR;
+            break;
+        }
+
+        trace_pci_nvme_err_aio(nvme_cid(req), strerror(-ret), req->status);
+
+        error_setg_errno(&err, -ret, "aio failed");
+        error_report_err(err);
     } else {
         block_acct_done(stats, acct);
     }
--=20
2.47.2