]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressPassthru.c
MdeModulePkg/NvmExpressDxe: Fix wrong queue size for async IO queues
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / NvmExpressDxe / NvmExpressPassthru.c
index 8e721379466a03fe81c2ff736133ec529916be41..e9357b1239c72335a68df5bc8ff062eab962d61d 100644 (file)
@@ -452,6 +452,7 @@ NvmExpressPassThru (
   NVME_SQ                        *Sq;\r
   NVME_CQ                        *Cq;\r
   UINT16                         QueueId;\r
+  UINT16                         QueueSize;\r
   UINT32                         Bytes;\r
   UINT16                         Offset;\r
   EFI_EVENT                      TimerEvent;\r
@@ -540,6 +541,7 @@ NvmExpressPassThru (
   Prp         = NULL;\r
   TimerEvent  = NULL;\r
   Status      = EFI_SUCCESS;\r
+  QueueSize   = MIN (NVME_ASYNC_CSQ_SIZE, Private->Cap.Mqes) + 1;\r
 \r
   if (Packet->QueueType == NVME_ADMIN_QUEUE) {\r
     QueueId = 0;\r
@@ -552,7 +554,7 @@ NvmExpressPassThru (
       //\r
       // Submission queue full check.\r
       //\r
-      if ((Private->SqTdbl[QueueId].Sqt + 1) % (NVME_ASYNC_CSQ_SIZE + 1) ==\r
+      if ((Private->SqTdbl[QueueId].Sqt + 1) % QueueSize ==\r
           Private->AsyncSqHead) {\r
         return EFI_NOT_READY;\r
       }\r
@@ -701,7 +703,7 @@ NvmExpressPassThru (
   //\r
   if ((Event != NULL) && (QueueId != 0)) {\r
     Private->SqTdbl[QueueId].Sqt =\r
-      (Private->SqTdbl[QueueId].Sqt + 1) % (NVME_ASYNC_CSQ_SIZE + 1);\r
+      (Private->SqTdbl[QueueId].Sqt + 1) % QueueSize;\r
   } else {\r
     Private->SqTdbl[QueueId].Sqt ^= 1;\r
   }\r