]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/Library/MtrrLib/MtrrLib.c
UefiCpuPkg/MtrrLib: Fix MtrrDebugPrintAllMtrrsWorker to avoid hang
[mirror_edk2.git] / UefiCpuPkg / Library / MtrrLib / MtrrLib.c
index 2fd1d0153ee6d9f5accfecd99c3271101ab1d69e..cb22558103cd5db28b69c31ffa18ec287c5a6f04 100644 (file)
@@ -2776,6 +2776,7 @@ MtrrDebugPrintAllMtrrsWorker (
     UINTN             RangeCount;\r
     UINT64            MtrrValidBitsMask;\r
     UINT64            MtrrValidAddressMask;\r
+    UINT32            VariableMtrrCount;\r
     MTRR_MEMORY_RANGE Ranges[\r
       ARRAY_SIZE (mMtrrLibFixedMtrrTable) * sizeof (UINT64) + 2 * ARRAY_SIZE (Mtrrs->Variables.Mtrr) + 1\r
       ];\r
@@ -2785,6 +2786,8 @@ MtrrDebugPrintAllMtrrsWorker (
       return;\r
     }\r
 \r
+    VariableMtrrCount = GetVariableMtrrCountWorker ();\r
+\r
     if (MtrrSetting != NULL) {\r
       Mtrrs = MtrrSetting;\r
     } else {\r
@@ -2802,7 +2805,7 @@ MtrrDebugPrintAllMtrrsWorker (
       DEBUG((DEBUG_CACHE, "Fixed MTRR[%02d]   : %016lx\n", Index, Mtrrs->Fixed.Mtrr[Index]));\r
     }\r
 \r
-    for (Index = 0; Index < ARRAY_SIZE (Mtrrs->Variables.Mtrr); Index++) {\r
+    for (Index = 0; Index < VariableMtrrCount; Index++) {\r
       if (((MSR_IA32_MTRR_PHYSMASK_REGISTER *)&Mtrrs->Variables.Mtrr[Index].Mask)->Bits.V == 0) {\r
         //\r
         // If mask is not valid, then do not display range\r
@@ -2829,11 +2832,11 @@ MtrrDebugPrintAllMtrrsWorker (
     RangeCount = 1;\r
 \r
     MtrrLibGetRawVariableRanges (\r
-      &Mtrrs->Variables, ARRAY_SIZE (Mtrrs->Variables.Mtrr),\r
+      &Mtrrs->Variables, VariableMtrrCount,\r
       MtrrValidBitsMask, MtrrValidAddressMask, RawVariableRanges\r
       );\r
     MtrrLibApplyVariableMtrrs (\r
-      RawVariableRanges, ARRAY_SIZE (RawVariableRanges),\r
+      RawVariableRanges, VariableMtrrCount,\r
       Ranges, ARRAY_SIZE (Ranges), &RangeCount\r
       );\r
 \r