aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorKlaus Jensen <k.jensen@samsung.com>2022-04-29 10:33:32 +0200
committerKlaus Jensen <k.jensen@samsung.com>2022-06-03 21:48:24 +0200
commita859eb9f8f64e116671048a43a07d87bc6527a55 (patch)
treec9418bf0eb09c343f86b0bd8bc7c7c37fae77c1f /hw
parent9235a72a5df0fae1ede89f02717b597ef91cf6ad (diff)
downloadqemu-a859eb9f8f64e116671048a43a07d87bc6527a55.zip
qemu-a859eb9f8f64e116671048a43a07d87bc6527a55.tar.gz
qemu-a859eb9f8f64e116671048a43a07d87bc6527a55.tar.bz2
hw/nvme: enforce common serial per subsystem
The Identify Controller Serial Number (SN) is the serial number for the NVM subsystem and must be the same across all controller in the NVM subsystem. Enforce this. Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Keith Busch <kbusch@kernel.org> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
Diffstat (limited to 'hw')
-rw-r--r--hw/nvme/nvme.h1
-rw-r--r--hw/nvme/subsys.c7
2 files changed, 8 insertions, 0 deletions
diff --git a/hw/nvme/nvme.h b/hw/nvme/nvme.h
index 6773819..e417716 100644
--- a/hw/nvme/nvme.h
+++ b/hw/nvme/nvme.h
@@ -48,6 +48,7 @@ typedef struct NvmeSubsystem {
DeviceState parent_obj;
NvmeBus bus;
uint8_t subnqn[256];
+ char *serial;
NvmeCtrl *ctrls[NVME_MAX_CONTROLLERS];
NvmeNamespace *namespaces[NVME_MAX_NAMESPACES + 1];
diff --git a/hw/nvme/subsys.c b/hw/nvme/subsys.c
index fb58d63..691a90d 100644
--- a/hw/nvme/subsys.c
+++ b/hw/nvme/subsys.c
@@ -27,6 +27,13 @@ int nvme_subsys_register_ctrl(NvmeCtrl *n, Error **errp)
return -1;
}
+ if (!subsys->serial) {
+ subsys->serial = g_strdup(n->params.serial);
+ } else if (strcmp(subsys->serial, n->params.serial)) {
+ error_setg(errp, "invalid controller serial");
+ return -1;
+ }
+
subsys->ctrls[cntlid] = n;
for (nsid = 1; nsid < ARRAY_SIZE(subsys->namespaces); nsid++) {