]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelSiliconPkg/IntelVTdDxe/PciInfo.c
IntelSiliconPkg/IntelVTdDxe: Improve performance.
[mirror_edk2.git] / IntelSiliconPkg / IntelVTdDxe / PciInfo.c
index d5f096fadd5dca5e514eeb9610bd9465a6e54c92..27e253d42809d4a96e22acdc4de985a50dd91b08 100644 (file)
@@ -77,6 +77,7 @@ RegisterPciDevice (
   UINTN                   Index;\r
   BOOLEAN                 *NewIsRealPciDevice;\r
   VTD_SOURCE_ID           *NewPciDescriptors;\r
+  UINTN                   *NewAccessCount;\r
 \r
   PciDeviceInfo = &mVtdUnitInformation[VtdIndex].PciDeviceInfo;\r
 \r
@@ -112,6 +113,12 @@ RegisterPciDevice (
         FreePool (NewIsRealPciDevice);\r
         return EFI_OUT_OF_RESOURCES;\r
       }\r
+      NewAccessCount = AllocateZeroPool (sizeof(*NewAccessCount) * (PciDeviceInfo->PciDescriptorMaxNumber + MAX_PCI_DESCRIPTORS));\r
+      if (NewAccessCount == NULL) {\r
+        FreePool (NewIsRealPciDevice);\r
+        FreePool (NewPciDescriptors);\r
+        return EFI_OUT_OF_RESOURCES;\r
+      }\r
       PciDeviceInfo->PciDescriptorMaxNumber += MAX_PCI_DESCRIPTORS;\r
       if (PciDeviceInfo->IsRealPciDevice != NULL) {\r
         CopyMem (NewIsRealPciDevice, PciDeviceInfo->IsRealPciDevice, sizeof(*NewIsRealPciDevice) * PciDeviceInfo->PciDescriptorNumber);\r
@@ -123,6 +130,11 @@ RegisterPciDevice (
         FreePool (PciDeviceInfo->PciDescriptors);\r
       }\r
       PciDeviceInfo->PciDescriptors = NewPciDescriptors;\r
+      if (PciDeviceInfo->AccessCount != NULL) {\r
+        CopyMem (NewAccessCount, PciDeviceInfo->AccessCount, sizeof(*NewAccessCount) * PciDeviceInfo->PciDescriptorNumber);\r
+        FreePool (PciDeviceInfo->AccessCount);\r
+      }\r
+      PciDeviceInfo->AccessCount = NewAccessCount;\r
     }\r
 \r
     ASSERT (PciDeviceInfo->PciDescriptorNumber < PciDeviceInfo->PciDescriptorMaxNumber);\r