eb86ba78e5
- Fix stable issues found in upstream: hmp-Fix-loadvm-to-resume-the-VM-on-succe.patch hw-block-nvme-align-with-existing-style.patch hw-nvme-fix-missing-check-for-PMR-capabi.patch hw-nvme-fix-pin-based-interrupt-behavior.patch linux-user-aarch64-Enable-hwcap-for-RND-.patch qemu-config-load-modules-when-instantiat.patch qemu-config-parse-configuration-files-to.patch qemu-config-use-qemu_opts_from_qdict.patch runstate-Initialize-Error-to-NULL.patch target-i386-Exit-tb-after-wrmsr.patch tcg-Allocate-sufficient-storage-in-temp_.patch tcg-sparc-Fix-temp_allocate_frame-vs-spa.patch vhost-vdpa-don-t-initialize-backend_feat.patch vl-allow-not-specifying-size-in-m-when-u.patch vl-Fix-an-assert-failure-in-error-path.patch vl-plug-object-back-into-readconfig.patch vl-plumb-keyval-based-options-into-readc.patch x86-acpi-use-offset-instead-of-pointer-w.patch - Update qemu-supportconfig plugin - Fix an update-alternative warning when removing qemu-skiboot package bsc#1178678 OBS-URL: https://build.opensuse.org/request/show/903710 OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=660
256 lines
11 KiB
Diff
256 lines
11 KiB
Diff
From: Gollu Appalanaidu <anaidu.gollu@samsung.com>
|
|
Date: Fri, 16 Apr 2021 09:22:28 +0530
|
|
Subject: hw/block/nvme: align with existing style
|
|
|
|
Git-commit: 312c3531bba416e589f106db8c8241fc6e7e6332
|
|
|
|
While QEMU coding style prefers lowercase hexadecimals in constants, the
|
|
NVMe subsystem uses the format from the NVMe specifications in comments,
|
|
i.e. 'h' suffix instead of '0x' prefix.
|
|
|
|
Fix this up across the code base.
|
|
|
|
Signed-off-by: Gollu Appalanaidu <anaidu.gollu@samsung.com>
|
|
[k.jensen: updated message; added conversion in a couple of missing comments]
|
|
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
|
|
Signed-off-by: Jose R. Ziviani <jziviani@suse.de>
|
|
---
|
|
hw/block/nvme-ns.c | 2 +-
|
|
hw/block/nvme.c | 67 +++++++++++++++++++++++++-------------------
|
|
include/block/nvme.h | 10 +++----
|
|
3 files changed, 44 insertions(+), 35 deletions(-)
|
|
|
|
diff --git a/hw/block/nvme-ns.c b/hw/block/nvme-ns.c
|
|
index 7bb618f18209d93bc0ddac6474e4..a0895614d9c36590c6969a6c3a58 100644
|
|
--- a/hw/block/nvme-ns.c
|
|
+++ b/hw/block/nvme-ns.c
|
|
@@ -303,7 +303,7 @@ static void nvme_ns_init_zoned(NvmeNamespace *ns)
|
|
|
|
id_ns_z = g_malloc0(sizeof(NvmeIdNsZoned));
|
|
|
|
- /* MAR/MOR are zeroes-based, 0xffffffff means no limit */
|
|
+ /* MAR/MOR are zeroes-based, FFFFFFFFFh means no limit */
|
|
id_ns_z->mar = cpu_to_le32(ns->params.max_active_zones - 1);
|
|
id_ns_z->mor = cpu_to_le32(ns->params.max_open_zones - 1);
|
|
id_ns_z->zoc = 0;
|
|
diff --git a/hw/block/nvme.c b/hw/block/nvme.c
|
|
index ba90053b63ed4884deb98d62b6d6..58185c8a17bfa3b84643733bc558 100644
|
|
--- a/hw/block/nvme.c
|
|
+++ b/hw/block/nvme.c
|
|
@@ -12,10 +12,19 @@
|
|
* Reference Specs: http://www.nvmexpress.org, 1.4, 1.3, 1.2, 1.1, 1.0e
|
|
*
|
|
* https://nvmexpress.org/developers/nvme-specification/
|
|
- */
|
|
-
|
|
-/**
|
|
- * Usage: add options:
|
|
+ *
|
|
+ *
|
|
+ * Notes on coding style
|
|
+ * ---------------------
|
|
+ * While QEMU coding style prefers lowercase hexadecimals in constants, the
|
|
+ * NVMe subsystem use thes format from the NVMe specifications in the comments
|
|
+ * (i.e. 'h' suffix instead of '0x' prefix).
|
|
+ *
|
|
+ * Usage
|
|
+ * -----
|
|
+ * See docs/system/nvme.rst for extensive documentation.
|
|
+ *
|
|
+ * Add options:
|
|
* -drive file=<file>,if=none,id=<drive_id>
|
|
* -device nvme-subsys,id=<subsys_id>,nqn=<nqn_id>
|
|
* -device nvme,serial=<serial>,id=<bus_name>, \
|
|
@@ -3618,18 +3627,18 @@ static uint16_t nvme_io_cmd(NvmeCtrl *n, NvmeRequest *req)
|
|
|
|
/*
|
|
* In the base NVM command set, Flush may apply to all namespaces
|
|
- * (indicated by NSID being set to 0xFFFFFFFF). But if that feature is used
|
|
+ * (indicated by NSID being set to FFFFFFFFh). But if that feature is used
|
|
* along with TP 4056 (Namespace Types), it may be pretty screwed up.
|
|
*
|
|
- * If NSID is indeed set to 0xFFFFFFFF, we simply cannot associate the
|
|
+ * If NSID is indeed set to FFFFFFFFh, we simply cannot associate the
|
|
* opcode with a specific command since we cannot determine a unique I/O
|
|
- * command set. Opcode 0x0 could have any other meaning than something
|
|
+ * command set. Opcode 0h could have any other meaning than something
|
|
* equivalent to flushing and say it DOES have completely different
|
|
- * semantics in some other command set - does an NSID of 0xFFFFFFFF then
|
|
+ * semantics in some other command set - does an NSID of FFFFFFFFh then
|
|
* mean "for all namespaces, apply whatever command set specific command
|
|
- * that uses the 0x0 opcode?" Or does it mean "for all namespaces, apply
|
|
- * whatever command that uses the 0x0 opcode if, and only if, it allows
|
|
- * NSID to be 0xFFFFFFFF"?
|
|
+ * that uses the 0h opcode?" Or does it mean "for all namespaces, apply
|
|
+ * whatever command that uses the 0h opcode if, and only if, it allows NSID
|
|
+ * to be FFFFFFFFh"?
|
|
*
|
|
* Anyway (and luckily), for now, we do not care about this since the
|
|
* device only supports namespace types that includes the NVM Flush command
|
|
@@ -3945,7 +3954,7 @@ static uint16_t nvme_changed_nslist(NvmeCtrl *n, uint8_t rae, uint32_t buf_len,
|
|
NVME_CHANGED_NSID_SIZE) {
|
|
/*
|
|
* If more than 1024 namespaces, the first entry in the log page should
|
|
- * be set to 0xffffffff and the others to 0 as spec.
|
|
+ * be set to FFFFFFFFh and the others to 0 as spec.
|
|
*/
|
|
if (i == ARRAY_SIZE(nslist)) {
|
|
memset(nslist, 0x0, sizeof(nslist));
|
|
@@ -4343,7 +4352,7 @@ static uint16_t nvme_identify_nslist(NvmeCtrl *n, NvmeRequest *req,
|
|
trace_pci_nvme_identify_nslist(min_nsid);
|
|
|
|
/*
|
|
- * Both 0xffffffff (NVME_NSID_BROADCAST) and 0xfffffffe are invalid values
|
|
+ * Both FFFFFFFFh (NVME_NSID_BROADCAST) and FFFFFFFFEh are invalid values
|
|
* since the Active Namespace ID List should return namespaces with ids
|
|
* *higher* than the NSID specified in the command. This is also specified
|
|
* in the spec (NVM Express v1.3d, Section 5.15.4).
|
|
@@ -4390,7 +4399,7 @@ static uint16_t nvme_identify_nslist_csi(NvmeCtrl *n, NvmeRequest *req,
|
|
trace_pci_nvme_identify_nslist_csi(min_nsid, c->csi);
|
|
|
|
/*
|
|
- * Same as in nvme_identify_nslist(), 0xffffffff/0xfffffffe are invalid.
|
|
+ * Same as in nvme_identify_nslist(), FFFFFFFFh/FFFFFFFFEh are invalid.
|
|
*/
|
|
if (min_nsid >= NVME_NSID_BROADCAST - 1) {
|
|
return NVME_INVALID_NSID | NVME_DNR;
|
|
@@ -4457,7 +4466,7 @@ static uint16_t nvme_identify_ns_descr_list(NvmeCtrl *n, NvmeRequest *req)
|
|
|
|
/*
|
|
* Because the NGUID and EUI64 fields are 0 in the Identify Namespace data
|
|
- * structure, a Namespace UUID (nidt = 0x3) must be reported in the
|
|
+ * structure, a Namespace UUID (nidt = 3h) must be reported in the
|
|
* Namespace Identification Descriptor. Add the namespace UUID here.
|
|
*/
|
|
ns_descrs->uuid.hdr.nidt = NVME_NIDT_UUID;
|
|
@@ -4606,7 +4615,7 @@ static uint16_t nvme_get_feature(NvmeCtrl *n, NvmeRequest *req)
|
|
/*
|
|
* The Reservation Notification Mask and Reservation Persistence
|
|
* features require a status code of Invalid Field in Command when
|
|
- * NSID is 0xFFFFFFFF. Since the device does not support those
|
|
+ * NSID is FFFFFFFFh. Since the device does not support those
|
|
* features we can always return Invalid Namespace or Format as we
|
|
* should do for all other features.
|
|
*/
|
|
@@ -4858,15 +4867,15 @@ static uint16_t nvme_set_feature(NvmeCtrl *n, NvmeRequest *req)
|
|
}
|
|
|
|
/*
|
|
- * NVMe v1.3, Section 5.21.1.7: 0xffff is not an allowed value for NCQR
|
|
+ * NVMe v1.3, Section 5.21.1.7: FFFFh is not an allowed value for NCQR
|
|
* and NSQR.
|
|
*/
|
|
if ((dw11 & 0xffff) == 0xffff || ((dw11 >> 16) & 0xffff) == 0xffff) {
|
|
return NVME_INVALID_FIELD | NVME_DNR;
|
|
}
|
|
|
|
- trace_pci_nvme_setfeat_numq((dw11 & 0xFFFF) + 1,
|
|
- ((dw11 >> 16) & 0xFFFF) + 1,
|
|
+ trace_pci_nvme_setfeat_numq((dw11 & 0xffff) + 1,
|
|
+ ((dw11 >> 16) & 0xffff) + 1,
|
|
n->params.max_ioqpairs,
|
|
n->params.max_ioqpairs);
|
|
req->cqe.result = cpu_to_le32((n->params.max_ioqpairs - 1) |
|
|
@@ -5504,7 +5513,7 @@ static void nvme_write_bar(NvmeCtrl *n, hwaddr offset, uint64_t data,
|
|
n->bar.cc = data;
|
|
}
|
|
break;
|
|
- case 0x1C: /* CSTS */
|
|
+ case 0x1c: /* CSTS */
|
|
if (data & (1 << 4)) {
|
|
NVME_GUEST_ERR(pci_nvme_ub_mmiowr_ssreset_w1c_unsupported,
|
|
"attempted to W1C CSTS.NSSRO"
|
|
@@ -5516,7 +5525,7 @@ static void nvme_write_bar(NvmeCtrl *n, hwaddr offset, uint64_t data,
|
|
}
|
|
break;
|
|
case 0x20: /* NSSR */
|
|
- if (data == 0x4E564D65) {
|
|
+ if (data == 0x4e564d65) {
|
|
trace_pci_nvme_ub_mmiowr_ssreset_unsupported();
|
|
} else {
|
|
/* The spec says that writes of other values have no effect */
|
|
@@ -5586,11 +5595,11 @@ static void nvme_write_bar(NvmeCtrl *n, hwaddr offset, uint64_t data,
|
|
n->bar.cmbmsc = (n->bar.cmbmsc & 0xffffffff) | (data << 32);
|
|
return;
|
|
|
|
- case 0xE00: /* PMRCAP */
|
|
+ case 0xe00: /* PMRCAP */
|
|
NVME_GUEST_ERR(pci_nvme_ub_mmiowr_pmrcap_readonly,
|
|
"invalid write to PMRCAP register, ignored");
|
|
return;
|
|
- case 0xE04: /* PMRCTL */
|
|
+ case 0xe04: /* PMRCTL */
|
|
n->bar.pmrctl = data;
|
|
if (NVME_PMRCTL_EN(data)) {
|
|
memory_region_set_enabled(&n->pmr.dev->mr, true);
|
|
@@ -5601,19 +5610,19 @@ static void nvme_write_bar(NvmeCtrl *n, hwaddr offset, uint64_t data,
|
|
n->pmr.cmse = false;
|
|
}
|
|
return;
|
|
- case 0xE08: /* PMRSTS */
|
|
+ case 0xe08: /* PMRSTS */
|
|
NVME_GUEST_ERR(pci_nvme_ub_mmiowr_pmrsts_readonly,
|
|
"invalid write to PMRSTS register, ignored");
|
|
return;
|
|
- case 0xE0C: /* PMREBS */
|
|
+ case 0xe0C: /* PMREBS */
|
|
NVME_GUEST_ERR(pci_nvme_ub_mmiowr_pmrebs_readonly,
|
|
"invalid write to PMREBS register, ignored");
|
|
return;
|
|
- case 0xE10: /* PMRSWTP */
|
|
+ case 0xe10: /* PMRSWTP */
|
|
NVME_GUEST_ERR(pci_nvme_ub_mmiowr_pmrswtp_readonly,
|
|
"invalid write to PMRSWTP register, ignored");
|
|
return;
|
|
- case 0xE14: /* PMRMSCL */
|
|
+ case 0xe14: /* PMRMSCL */
|
|
if (!NVME_CAP_PMRS(n->bar.cap)) {
|
|
return;
|
|
}
|
|
@@ -5633,7 +5642,7 @@ static void nvme_write_bar(NvmeCtrl *n, hwaddr offset, uint64_t data,
|
|
}
|
|
|
|
return;
|
|
- case 0xE18: /* PMRMSCU */
|
|
+ case 0xe18: /* PMRMSCU */
|
|
if (!NVME_CAP_PMRS(n->bar.cap)) {
|
|
return;
|
|
}
|
|
@@ -5675,7 +5684,7 @@ static uint64_t nvme_mmio_read(void *opaque, hwaddr addr, unsigned size)
|
|
* from PMRSTS should ensure prior writes
|
|
* made it to persistent media
|
|
*/
|
|
- if (addr == 0xE08 &&
|
|
+ if (addr == 0xe08 &&
|
|
(NVME_PMRCAP_PMRWBM(n->bar.pmrcap) & 0x02)) {
|
|
memory_region_msync(&n->pmr.dev->mr, 0, n->pmr.dev->size);
|
|
}
|
|
diff --git a/include/block/nvme.h b/include/block/nvme.h
|
|
index 4ac926fbc687fbbd40215b5c91ad..0739e0d6651d4c98e39e24ea2028 100644
|
|
--- a/include/block/nvme.h
|
|
+++ b/include/block/nvme.h
|
|
@@ -848,8 +848,8 @@ enum NvmeStatusCodes {
|
|
NVME_FW_REQ_SUSYSTEM_RESET = 0x0110,
|
|
NVME_NS_ALREADY_ATTACHED = 0x0118,
|
|
NVME_NS_PRIVATE = 0x0119,
|
|
- NVME_NS_NOT_ATTACHED = 0x011A,
|
|
- NVME_NS_CTRL_LIST_INVALID = 0x011C,
|
|
+ NVME_NS_NOT_ATTACHED = 0x011a,
|
|
+ NVME_NS_CTRL_LIST_INVALID = 0x011c,
|
|
NVME_CONFLICTING_ATTRS = 0x0180,
|
|
NVME_INVALID_PROT_INFO = 0x0181,
|
|
NVME_WRITE_TO_RO = 0x0182,
|
|
@@ -1409,9 +1409,9 @@ typedef enum NvmeZoneState {
|
|
NVME_ZONE_STATE_IMPLICITLY_OPEN = 0x02,
|
|
NVME_ZONE_STATE_EXPLICITLY_OPEN = 0x03,
|
|
NVME_ZONE_STATE_CLOSED = 0x04,
|
|
- NVME_ZONE_STATE_READ_ONLY = 0x0D,
|
|
- NVME_ZONE_STATE_FULL = 0x0E,
|
|
- NVME_ZONE_STATE_OFFLINE = 0x0F,
|
|
+ NVME_ZONE_STATE_READ_ONLY = 0x0d,
|
|
+ NVME_ZONE_STATE_FULL = 0x0e,
|
|
+ NVME_ZONE_STATE_OFFLINE = 0x0f,
|
|
} NvmeZoneState;
|
|
|
|
static inline void _nvme_check_size(void)
|