[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [PATCH 6/9] hw/block/nvme: reject io commands if only admin command
From: |
Dmitry Fomichev |
Subject: |
RE: [PATCH 6/9] hw/block/nvme: reject io commands if only admin command set selected |
Date: |
Wed, 30 Sep 2020 23:11:00 +0000 |
> -----Original Message-----
> From: Keith Busch <kbusch@kernel.org>
> Sent: Wednesday, September 30, 2020 6:04 PM
> To: qemu-block@nongnu.org; qemu-devel@nongnu.org; Klaus Jensen
> <k.jensen@samsung.com>
> Cc: Niklas Cassel <Niklas.Cassel@wdc.com>; Dmitry Fomichev
> <Dmitry.Fomichev@wdc.com>; Kevin Wolf <kwolf@redhat.com>; Philippe
> Mathieu-Daudé <philmd@redhat.com>; Keith Busch <kbusch@kernel.org>
> Subject: [PATCH 6/9] hw/block/nvme: reject io commands if only admin
> command set selected
>
> 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>
> Signed-off-by: Keith Busch <kbusch@kernel.org>
Reviewed-by: Dmitry Fomichev <dmitry.fomichev@wdc.com>
> ---
> hw/block/nvme.c | 4 ++++
> include/block/nvme.h | 5 +++++
> 2 files changed, 9 insertions(+)
>
> diff --git a/hw/block/nvme.c b/hw/block/nvme.c
> index ec7363ea40..80730e1c03 100644
> --- a/hw/block/nvme.c
> +++ b/hw/block/nvme.c
> @@ -1026,6 +1026,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;
> }
> diff --git a/include/block/nvme.h b/include/block/nvme.h
> index 521533fd2a..6de2d5aa75 100644
> --- a/include/block/nvme.h
> +++ b/include/block/nvme.h
> @@ -115,6 +115,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,
> --
> 2.24.1
- [PATCH 0/9] nvme qemu cleanups and fixes, Keith Busch, 2020/09/30
- [PATCH 1/9] hw/block/nvme: remove pointless rw indirection, Keith Busch, 2020/09/30
- [PATCH 3/9] hw/block/nvme: support per-namespace smart log, Keith Busch, 2020/09/30
- [PATCH 4/9] hw/block/nvme: validate command set selected, Keith Busch, 2020/09/30
- [PATCH 2/9] hw/block/nvme: fix log page offset check, Keith Busch, 2020/09/30
- [PATCH 6/9] hw/block/nvme: reject io commands if only admin command set selected, Keith Busch, 2020/09/30
- RE: [PATCH 6/9] hw/block/nvme: reject io commands if only admin command set selected,
Dmitry Fomichev <=
- [PATCH 5/9] hw/block/nvme: support for admin-only command set, Keith Busch, 2020/09/30
- [PATCH 7/9] hw/block/nvme: add nsid to get/setfeat trace events, Keith Busch, 2020/09/30
- [PATCH 8/9] hw/block/nvme: add trace event for requests with non-zero status code, Keith Busch, 2020/09/30
- [PATCH 9/9] hw/block/nvme: report actual LBA data shift in LBAF, Keith Busch, 2020/09/30