]> www.infradead.org Git - qemu-nvme.git/commitdiff
hw/nvme: Abort copy command when format is one while pif nvme-fixes
authorFrancis Pravin Antony Michael Raj <francis.michael@solidigm.com>
Wed, 2 Nov 2022 08:06:00 +0000 (09:06 +0100)
committerKlaus Jensen <k.jensen@samsung.com>
Wed, 2 Nov 2022 08:23:05 +0000 (09:23 +0100)
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>
hw/nvme/ctrl.c

index 73c870a4299688251f4cec99bdf1b014fc74042d..9a9857ccf85fd9c505663f1abf7d600bf9da6316 100644 (file)
@@ -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;
     }