summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrancis Pravin Antony Michael Raj2022-11-02 09:06:00 +0100
committerKlaus Jensen2022-11-02 09:23:05 +0100
commit632cb6cf07122b330d8ef419ec2f4aab561a9fba (patch)
treea0631b60054e3127b0bf43a177a37763ab5fd015
parenthw/nvme: reenable cqe batching (diff)
downloadqemu-632cb6cf07122b330d8ef419ec2f4aab561a9fba.tar.gz
qemu-632cb6cf07122b330d8ef419ec2f4aab561a9fba.tar.xz
qemu-632cb6cf07122b330d8ef419ec2f4aab561a9fba.zip
hw/nvme: Abort copy command when format is one while pif
As per the NVMe Command Set specification Section 3.2.2, if i) The namespace is formatted to use 16b Guard Protection Information (i.e., pif = 0) and ii) The Descriptor Format is not cleared to 0h Then the copy command should be aborted with the status code of Invalid Namespace or Format Fixes: 44219b6029fc ("hw/nvme: 64-bit pi support") Signed-off-by: Francis Pravin Antony Michael Raj <francis.michael@solidigm.com> Signed-off-by: Jonathan Derrick <jonathan.derrick@solidigm.com> Reviewed-by: Klaus Jensen <k.jensen@samsung.com> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
-rw-r--r--hw/nvme/ctrl.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 73c870a429..9a9857ccf8 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -3034,7 +3034,8 @@ static uint16_t nvme_copy(NvmeCtrl *n, NvmeRequest *req)
goto invalid;
}
- if (ns->pif && format != 0x1) {
+ if ((ns->pif == 0x0 && format != 0x0) ||
+ (ns->pif != 0x0 && format != 0x1)) {
status = NVME_INVALID_FORMAT | NVME_DNR;
goto invalid;
}