* [PULL 0/3] nvme queue
@ 2024-11-04 18:13 Klaus Jensen
2024-11-04 18:13 ` [PULL 1/3] hw/nvme: i/o cmd set independent namespace data structure Klaus Jensen
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Klaus Jensen @ 2024-11-04 18:13 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Klaus Jensen
From: Klaus Jensen <k.jensen@samsung.com>
Hi,
The following changes since commit daaf51001a13da007d7dde72e1ed3b06bc490791:
Merge tag 'seabios-hppa-v17-pull-request' of https://github.com/hdeller/qemu-hppa into staging (2024-11-04 16:01:23 +0000)
are available in the Git repository at:
https://gitlab.com/birkelund/qemu.git tags/pull-nvme-20241104
for you to fetch changes up to 8f472a0e7a3c86a890e12e883a69abc65945419e:
hw/nvme: remove dead code (2024-11-04 19:09:45 +0100)
----------------------------------------------------------------
nvme queue
----------------------------------------------------------------
Arun Kumar (2):
hw/nvme: i/o cmd set independent namespace data structure
hw/nvme: remove dead code
Ayush Mishra (1):
hw/nvme: add NPDAL/NPDGL
hw/nvme/ctrl.c | 31 +++++++++++++++++++++++++++++++
hw/nvme/dif.c | 5 -----
hw/nvme/ns.c | 11 +++++++++--
hw/nvme/nvme.h | 1 +
hw/nvme/trace-events | 1 +
include/block/nvme.h | 40 +++++++++++++++++++++++++++++++++++++---
6 files changed, 79 insertions(+), 10 deletions(-)
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PULL 1/3] hw/nvme: i/o cmd set independent namespace data structure
2024-11-04 18:13 [PULL 0/3] nvme queue Klaus Jensen
@ 2024-11-04 18:13 ` Klaus Jensen
2024-11-04 18:13 ` [PULL 2/3] hw/nvme: add NPDAL/NPDGL Klaus Jensen
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Klaus Jensen @ 2024-11-04 18:13 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, Arun Kumar, Klaus Jensen, Keith Busch,
Klaus Jensen, Jesper Devantier, Stefan Hajnoczi, Fam Zheng,
Philippe Mathieu-Daudé, Kevin Wolf, Hanna Reitz, qemu-block
From: Arun Kumar <arun.kka@samsung.com>
Add support for the I/O Command Set Independent Namespace Data
Structure (CNS 8h and 1fh).
Signed-off-by: Arun Kumar <arun.kka@samsung.com>
Reviewed-by: Klaus Jensen <k.jensen@samsung.com>
Link: https://lore.kernel.org/r/20240925004407.3521406-1-arun.kka@samsung.com
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
hw/nvme/ctrl.c | 31 +++++++++++++++++++++++++++++++
hw/nvme/ns.c | 6 +++++-
hw/nvme/nvme.h | 1 +
hw/nvme/trace-events | 1 +
include/block/nvme.h | 23 +++++++++++++++++++++--
5 files changed, 59 insertions(+), 3 deletions(-)
diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index f4e89203c1a6..8e4612e03567 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -5692,6 +5692,33 @@ static uint16_t nvme_identify_sec_ctrl_list(NvmeCtrl *n, NvmeRequest *req)
return nvme_c2h(n, (uint8_t *)&list, sizeof(list), req);
}
+static uint16_t nvme_identify_ns_ind(NvmeCtrl *n, NvmeRequest *req, bool alloc)
+{
+ NvmeNamespace *ns;
+ NvmeIdentify *c = (NvmeIdentify *)&req->cmd;
+ uint32_t nsid = le32_to_cpu(c->nsid);
+
+ trace_pci_nvme_identify_ns_ind(nsid);
+
+ if (!nvme_nsid_valid(n, nsid) || nsid == NVME_NSID_BROADCAST) {
+ return NVME_INVALID_NSID | NVME_DNR;
+ }
+
+ ns = nvme_ns(n, nsid);
+ if (unlikely(!ns)) {
+ if (alloc) {
+ ns = nvme_subsys_ns(n->subsys, nsid);
+ if (!ns) {
+ return nvme_rpt_empty_id_struct(n, req);
+ }
+ } else {
+ return nvme_rpt_empty_id_struct(n, req);
+ }
+ }
+
+ return nvme_c2h(n, (uint8_t *)&ns->id_ns_ind, sizeof(NvmeIdNsInd), req);
+}
+
static uint16_t nvme_identify_ns_csi(NvmeCtrl *n, NvmeRequest *req,
bool active)
{
@@ -5946,6 +5973,10 @@ static uint16_t nvme_identify(NvmeCtrl *n, NvmeRequest *req)
return nvme_identify_sec_ctrl_list(n, req);
case NVME_ID_CNS_CS_NS:
return nvme_identify_ns_csi(n, req, true);
+ case NVME_ID_CNS_CS_IND_NS:
+ return nvme_identify_ns_ind(n, req, false);
+ case NVME_ID_CNS_CS_IND_NS_ALLOCATED:
+ return nvme_identify_ns_ind(n, req, true);
case NVME_ID_CNS_CS_NS_PRESENT:
return nvme_identify_ns_csi(n, req, false);
case NVME_ID_CNS_CTRL:
diff --git a/hw/nvme/ns.c b/hw/nvme/ns.c
index ea8db175dbd1..6dbdcb49bfc1 100644
--- a/hw/nvme/ns.c
+++ b/hw/nvme/ns.c
@@ -62,6 +62,7 @@ static int nvme_ns_init(NvmeNamespace *ns, Error **errp)
static uint64_t ns_count;
NvmeIdNs *id_ns = &ns->id_ns;
NvmeIdNsNvm *id_ns_nvm = &ns->id_ns_nvm;
+ NvmeIdNsInd *id_ns_ind = &ns->id_ns_ind;
uint8_t ds;
uint16_t ms;
int i;
@@ -75,7 +76,9 @@ static int nvme_ns_init(NvmeNamespace *ns, Error **errp)
id_ns->nsfeat |= (0x4 | 0x10);
if (ns->params.shared) {
- id_ns->nmic |= NVME_NMIC_NS_SHARED;
+ id_ns->nmic |= NVME_ID_NS_IND_NMIC_SHRNS;
+ id_ns_ind->nmic = NVME_ID_NS_IND_NMIC_SHRNS;
+ id_ns_ind->nstat = NVME_ID_NS_IND_NSTAT_NRDY;
}
/* Substitute a missing EUI-64 by an autogenerated one */
@@ -770,6 +773,7 @@ static void nvme_ns_realize(DeviceState *dev, Error **errp)
subsys->namespaces[nsid] = ns;
ns->id_ns.endgid = cpu_to_le16(0x1);
+ ns->id_ns_ind.endgrpid = cpu_to_le16(0x1);
if (ns->params.detached) {
return;
diff --git a/hw/nvme/nvme.h b/hw/nvme/nvme.h
index 7566b316d12d..724220691057 100644
--- a/hw/nvme/nvme.h
+++ b/hw/nvme/nvme.h
@@ -233,6 +233,7 @@ typedef struct NvmeNamespace {
int64_t moff;
NvmeIdNs id_ns;
NvmeIdNsNvm id_ns_nvm;
+ NvmeIdNsInd id_ns_ind;
NvmeLBAF lbaf;
unsigned int nlbaf;
size_t lbasz;
diff --git a/hw/nvme/trace-events b/hw/nvme/trace-events
index 3a67680c6ad1..6be0bfa1c1fc 100644
--- a/hw/nvme/trace-events
+++ b/hw/nvme/trace-events
@@ -56,6 +56,7 @@ pci_nvme_identify(uint16_t cid, uint8_t cns, uint16_t ctrlid, uint8_t csi) "cid
pci_nvme_identify_ctrl(void) "identify controller"
pci_nvme_identify_ctrl_csi(uint8_t csi) "identify controller, csi=0x%"PRIx8""
pci_nvme_identify_ns(uint32_t ns) "nsid %"PRIu32""
+pci_nvme_identify_ns_ind(uint32_t nsid) "nsid %"PRIu32""
pci_nvme_identify_ctrl_list(uint8_t cns, uint16_t cntid) "cns 0x%"PRIx8" cntid %"PRIu16""
pci_nvme_identify_pri_ctrl_cap(uint16_t cntlid) "identify primary controller capabilities cntlid=%"PRIu16""
pci_nvme_identify_sec_ctrl_list(uint16_t cntlid, uint8_t numcntl) "identify secondary controller list cntlid=%"PRIu16" numcntl=%"PRIu8""
diff --git a/include/block/nvme.h b/include/block/nvme.h
index a37be0d0da8e..39955a63455f 100644
--- a/include/block/nvme.h
+++ b/include/block/nvme.h
@@ -1077,6 +1077,7 @@ enum NvmeIdCns {
NVME_ID_CNS_CS_NS = 0x05,
NVME_ID_CNS_CS_CTRL = 0x06,
NVME_ID_CNS_CS_NS_ACTIVE_LIST = 0x07,
+ NVME_ID_CNS_CS_IND_NS = 0x08,
NVME_ID_CNS_NS_PRESENT_LIST = 0x10,
NVME_ID_CNS_NS_PRESENT = 0x11,
NVME_ID_CNS_NS_ATTACHED_CTRL_LIST = 0x12,
@@ -1087,6 +1088,7 @@ enum NvmeIdCns {
NVME_ID_CNS_CS_NS_PRESENT_LIST = 0x1a,
NVME_ID_CNS_CS_NS_PRESENT = 0x1b,
NVME_ID_CNS_IO_COMMAND_SET = 0x1c,
+ NVME_ID_CNS_CS_IND_NS_ALLOCATED = 0x1f,
};
typedef struct QEMU_PACKED NvmeIdCtrl {
@@ -1419,6 +1421,20 @@ typedef struct QEMU_PACKED NvmeIdNsNvm {
uint8_t rsvd268[3828];
} NvmeIdNsNvm;
+typedef struct QEMU_PACKED NvmeIdNsInd {
+ uint8_t nsfeat;
+ uint8_t nmic;
+ uint8_t rescap;
+ uint8_t fpi;
+ uint32_t anagrpid;
+ uint8_t nsattr;
+ uint8_t rsvd9;
+ uint16_t nvmsetid;
+ uint16_t endgrpid;
+ uint8_t nstat;
+ uint8_t rsvd15[4081];
+} NvmeIdNsInd;
+
typedef struct QEMU_PACKED NvmeIdNsDescr {
uint8_t nidt;
uint8_t nidl;
@@ -1439,8 +1455,10 @@ enum NvmeNsIdentifierType {
NVME_NIDT_CSI = 0x04,
};
-enum NvmeIdNsNmic {
- NVME_NMIC_NS_SHARED = 1 << 0,
+enum NvmeIdNsIndependent {
+ NVME_ID_NS_IND_NMIC_SHRNS = 1 << 0,
+ NVME_ID_NS_IND_NMIC_DISNS = 1 << 1,
+ NVME_ID_NS_IND_NSTAT_NRDY = 1 << 0,
};
enum NvmeCsi {
@@ -1873,6 +1891,7 @@ static inline void _nvme_check_size(void)
QEMU_BUILD_BUG_ON(sizeof(NvmeLBAF) != 4);
QEMU_BUILD_BUG_ON(sizeof(NvmeLBAFE) != 16);
QEMU_BUILD_BUG_ON(sizeof(NvmeIdNs) != 4096);
+ QEMU_BUILD_BUG_ON(sizeof(NvmeIdNsInd) != 4096);
QEMU_BUILD_BUG_ON(sizeof(NvmeIdNsNvm) != 4096);
QEMU_BUILD_BUG_ON(sizeof(NvmeIdNsZoned) != 4096);
QEMU_BUILD_BUG_ON(sizeof(NvmeSglDescriptor) != 16);
--
2.45.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PULL 2/3] hw/nvme: add NPDAL/NPDGL
2024-11-04 18:13 [PULL 0/3] nvme queue Klaus Jensen
2024-11-04 18:13 ` [PULL 1/3] hw/nvme: i/o cmd set independent namespace data structure Klaus Jensen
@ 2024-11-04 18:13 ` Klaus Jensen
2024-11-04 18:13 ` [PULL 3/3] hw/nvme: remove dead code Klaus Jensen
2024-11-05 15:46 ` [PULL 0/3] nvme queue Peter Maydell
3 siblings, 0 replies; 5+ messages in thread
From: Klaus Jensen @ 2024-11-04 18:13 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, Ayush Mishra, Klaus Jensen, Keith Busch,
Klaus Jensen, Jesper Devantier, Stefan Hajnoczi, Fam Zheng,
Philippe Mathieu-Daudé, Kevin Wolf, Hanna Reitz, qemu-block
From: Ayush Mishra <ayush.m55@samsung.com>
Add the NPDGL and NPDAL fields to support large alignment and
granularities.
Signed-off-by: Ayush Mishra <ayush.m55@samsung.com>
Reviewed-by: Klaus Jensen <k.jensen@samsung.com>
Link: https://lore.kernel.org/r/20241001012833.3551820-1-ayush.m55@samsung.com
[k.jensen: renamed the enum values]
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
hw/nvme/ns.c | 5 ++++-
include/block/nvme.h | 17 ++++++++++++++++-
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/hw/nvme/ns.c b/hw/nvme/ns.c
index 6dbdcb49bfc1..526e15aa8018 100644
--- a/hw/nvme/ns.c
+++ b/hw/nvme/ns.c
@@ -30,6 +30,7 @@
void nvme_ns_init_format(NvmeNamespace *ns)
{
NvmeIdNs *id_ns = &ns->id_ns;
+ NvmeIdNsNvm *id_ns_nvm = &ns->id_ns_nvm;
BlockDriverInfo bdi;
int npdg, ret;
int64_t nlbas;
@@ -55,6 +56,8 @@ void nvme_ns_init_format(NvmeNamespace *ns)
}
id_ns->npda = id_ns->npdg = npdg - 1;
+ id_ns_nvm->npdal = npdg;
+ id_ns_nvm->npdgl = npdg;
}
static int nvme_ns_init(NvmeNamespace *ns, Error **errp)
@@ -73,7 +76,7 @@ static int nvme_ns_init(NvmeNamespace *ns, Error **errp)
ns->id_ns.dlfeat = 0x1;
/* support DULBE and I/O optimization fields */
- id_ns->nsfeat |= (0x4 | 0x10);
+ id_ns->nsfeat |= (NVME_ID_NS_NSFEAT_DAE | NVME_ID_NS_NSFEAT_OPTPERF_ALL);
if (ns->params.shared) {
id_ns->nmic |= NVME_ID_NS_IND_NMIC_SHRNS;
diff --git a/include/block/nvme.h b/include/block/nvme.h
index 39955a63455f..f4d108841bf5 100644
--- a/include/block/nvme.h
+++ b/include/block/nvme.h
@@ -1418,7 +1418,12 @@ typedef struct QEMU_PACKED NvmeIdNsNvm {
uint8_t pic;
uint8_t rsvd9[3];
uint32_t elbaf[NVME_MAX_NLBAF];
- uint8_t rsvd268[3828];
+ uint32_t npdgl;
+ uint32_t nprg;
+ uint32_t npra;
+ uint32_t nors;
+ uint32_t npdal;
+ uint8_t rsvd288[3808];
} NvmeIdNsNvm;
typedef struct QEMU_PACKED NvmeIdNsInd {
@@ -1536,6 +1541,16 @@ enum NvmeIdNsMc {
NVME_ID_NS_MC_SEPARATE = 1 << 1,
};
+enum NvmeIdNsNsfeat {
+ NVME_ID_NS_NSFEAT_THINP = 1 << 0,
+ NVME_ID_NS_NSFEAT_NSABPNS = 1 << 1,
+ NVME_ID_NS_NSFEAT_DAE = 1 << 2,
+ NVME_ID_NS_NSFEAT_UIDREUSE = 1 << 3,
+ NVME_ID_NS_NSFEAT_OPTPERF_ALL = 3 << 4,
+ NVME_ID_NS_NSFEAT_MAM = 1 << 6,
+ NVME_ID_NS_NSFEAT_OPTRPERF = 1 << 7,
+};
+
#define NVME_ID_NS_DPS_TYPE(dps) (dps & NVME_ID_NS_DPS_TYPE_MASK)
enum NvmePIFormat {
--
2.45.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PULL 3/3] hw/nvme: remove dead code
2024-11-04 18:13 [PULL 0/3] nvme queue Klaus Jensen
2024-11-04 18:13 ` [PULL 1/3] hw/nvme: i/o cmd set independent namespace data structure Klaus Jensen
2024-11-04 18:13 ` [PULL 2/3] hw/nvme: add NPDAL/NPDGL Klaus Jensen
@ 2024-11-04 18:13 ` Klaus Jensen
2024-11-05 15:46 ` [PULL 0/3] nvme queue Peter Maydell
3 siblings, 0 replies; 5+ messages in thread
From: Klaus Jensen @ 2024-11-04 18:13 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, Arun Kumar, Klaus Jensen, Keith Busch,
Klaus Jensen, Jesper Devantier, qemu-block
From: Arun Kumar <arun.kka@samsung.com>
Remove dead code which always returns success, since PRCHK will have a
value of zero.
Signed-off-by: Arun Kumar <arun.kka@samsung.com>
Reviewed-by: Klaus Jensen <k.jensen@samsung.com>
Link: https://lore.kernel.org/r/20241022222105.3609223-1-arun.kka@samsung.com
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
hw/nvme/dif.c | 5 -----
1 file changed, 5 deletions(-)
diff --git a/hw/nvme/dif.c b/hw/nvme/dif.c
index 01b19c33734e..28051284984d 100644
--- a/hw/nvme/dif.c
+++ b/hw/nvme/dif.c
@@ -575,11 +575,6 @@ uint16_t nvme_dif_rw(NvmeCtrl *n, NvmeRequest *req)
uint8_t *mbuf, *end;
int16_t pil = ns->lbaf.ms - nvme_pi_tuple_size(ns);
- status = nvme_check_prinfo(ns, prinfo, slba, reftag);
- if (status) {
- goto err;
- }
-
flags = 0;
ctx->mdata.bounce = g_malloc0(mlen);
--
2.45.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PULL 0/3] nvme queue
2024-11-04 18:13 [PULL 0/3] nvme queue Klaus Jensen
` (2 preceding siblings ...)
2024-11-04 18:13 ` [PULL 3/3] hw/nvme: remove dead code Klaus Jensen
@ 2024-11-05 15:46 ` Peter Maydell
3 siblings, 0 replies; 5+ messages in thread
From: Peter Maydell @ 2024-11-05 15:46 UTC (permalink / raw)
To: Klaus Jensen; +Cc: qemu-devel, Klaus Jensen
On Mon, 4 Nov 2024 at 18:13, Klaus Jensen <its@irrelevant.dk> wrote:
>
> From: Klaus Jensen <k.jensen@samsung.com>
>
> Hi,
>
> The following changes since commit daaf51001a13da007d7dde72e1ed3b06bc490791:
>
> Merge tag 'seabios-hppa-v17-pull-request' of https://github.com/hdeller/qemu-hppa into staging (2024-11-04 16:01:23 +0000)
>
> are available in the Git repository at:
>
> https://gitlab.com/birkelund/qemu.git tags/pull-nvme-20241104
>
> for you to fetch changes up to 8f472a0e7a3c86a890e12e883a69abc65945419e:
>
> hw/nvme: remove dead code (2024-11-04 19:09:45 +0100)
>
> ----------------------------------------------------------------
> nvme queue
>
> ----------------------------------------------------------------
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/9.2
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-11-05 15:47 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-04 18:13 [PULL 0/3] nvme queue Klaus Jensen
2024-11-04 18:13 ` [PULL 1/3] hw/nvme: i/o cmd set independent namespace data structure Klaus Jensen
2024-11-04 18:13 ` [PULL 2/3] hw/nvme: add NPDAL/NPDGL Klaus Jensen
2024-11-04 18:13 ` [PULL 3/3] hw/nvme: remove dead code Klaus Jensen
2024-11-05 15:46 ` [PULL 0/3] nvme queue Peter Maydell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).