[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 04/14] hw/block/nvme: reject io commands if only admin command
From: |
Klaus Jensen |
Subject: |
[PATCH v2 04/14] hw/block/nvme: reject io commands if only admin command set selected |
Date: |
Wed, 30 Sep 2020 01:19:07 +0200 |
From: Klaus Jensen <k.jensen@samsung.com>
If the host sets CC.CSS to 111b, all commands submitted to I/O queues
should be completed with status Invalid Command Opcode.
Note that this is technically a v1.4 feature, but it does not hurt to
implement before we finally bump the reported version implemented.
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
include/block/nvme.h | 5 +++++
hw/block/nvme.c | 4 ++++
2 files changed, 9 insertions(+)
diff --git a/include/block/nvme.h b/include/block/nvme.h
index 58647bcdad0b..7a30cf285ae0 100644
--- a/include/block/nvme.h
+++ b/include/block/nvme.h
@@ -110,6 +110,11 @@ enum NvmeCcMask {
#define NVME_CC_IOSQES(cc) ((cc >> CC_IOSQES_SHIFT) & CC_IOSQES_MASK)
#define NVME_CC_IOCQES(cc) ((cc >> CC_IOCQES_SHIFT) & CC_IOCQES_MASK)
+enum NvmeCcCss {
+ NVME_CC_CSS_NVM = 0x0,
+ NVME_CC_CSS_ADMIN_ONLY = 0x7,
+};
+
enum NvmeCstsShift {
CSTS_RDY_SHIFT = 0,
CSTS_CFS_SHIFT = 1,
diff --git a/hw/block/nvme.c b/hw/block/nvme.c
index 758f58c88026..27af2f0b38d5 100644
--- a/hw/block/nvme.c
+++ b/hw/block/nvme.c
@@ -1065,6 +1065,10 @@ static uint16_t nvme_io_cmd(NvmeCtrl *n, NvmeRequest
*req)
trace_pci_nvme_io_cmd(nvme_cid(req), nsid, nvme_sqid(req),
req->cmd.opcode, nvme_io_opc_str(req->cmd.opcode));
+ if (NVME_CC_CSS(n->bar.cc) == NVME_CC_CSS_ADMIN_ONLY) {
+ return NVME_INVALID_OPCODE | NVME_DNR;
+ }
+
if (!nvme_nsid_valid(n, nsid)) {
return NVME_INVALID_NSID | NVME_DNR;
}
--
2.28.0
- [PATCH v2 00/14] hw/block/nvme: zoned namespace command set, Klaus Jensen, 2020/09/29
- [PATCH v2 01/14] hw/block/nvme: add nsid to get/setfeat trace events, Klaus Jensen, 2020/09/29
- [PATCH v2 02/14] hw/block/nvme: add trace event for requests with non-zero status code, Klaus Jensen, 2020/09/29
- [PATCH v2 04/14] hw/block/nvme: reject io commands if only admin command set selected,
Klaus Jensen <=
- [PATCH v2 05/14] hw/block/nvme: consolidate read, write and write zeroes, Klaus Jensen, 2020/09/29
- [PATCH v2 03/14] hw/block/nvme: make lba data size configurable, Klaus Jensen, 2020/09/29
- [PATCH v2 06/14] hw/block/nvme: add support for dulbe and block utilization tracking, Klaus Jensen, 2020/09/29
- [PATCH v2 07/14] hw/block/nvme: add commands supported and effects log page, Klaus Jensen, 2020/09/29
- [PATCH v2 08/14] hw/block/nvme: support namespace types, Klaus Jensen, 2020/09/29
- [PATCH v2 09/14] hw/block/nvme: add basic read/write for zoned namespaces, Klaus Jensen, 2020/09/29
- [PATCH v2 10/14] hw/block/nvme: add the zone management receive command, Klaus Jensen, 2020/09/29
- [PATCH v2 13/14] hw/block/nvme: track and enforce zone resources, Klaus Jensen, 2020/09/29
- [PATCH v2 12/14] hw/block/nvme: add the zone append command, Klaus Jensen, 2020/09/29
- [PATCH v2 14/14] hw/block/nvme: allow open to close transitions by controller, Klaus Jensen, 2020/09/29