diff --git a/MdeModulePkg/Core/Dxe/Gcd/Gcd.c b/MdeModulePkg/Core/Dxe/Gcd/Gcd.c index 99364508cd..6ea89fbc8b 100644 --- a/MdeModulePkg/Core/Dxe/Gcd/Gcd.c +++ b/MdeModulePkg/Core/Dxe/Gcd/Gcd.c @@ -989,6 +989,20 @@ CoreConvertSpace ( // case GCD_SET_CAPABILITIES_MEMORY_OPERATION: Entry->Capabilities = Capabilities; + + // Only SystemMemory and MoreReliable memory is in gMemoryMap + // so only attempt to update the attributes there if this is + // a relevant GCD type + if ((Entry->GcdMemoryType == EfiGcdMemoryTypeSystemMemory) || + (Entry->GcdMemoryType == EfiGcdMemoryTypeMoreReliable)) + { + CoreUpdateMemoryAttributes ( + BaseAddress, + RShiftU64 (Length, EFI_PAGE_SHIFT), + Capabilities & (~EFI_MEMORY_RUNTIME) + ); + } + break; } @@ -1700,17 +1714,10 @@ CoreSetMemorySpaceCapabilities ( IN UINT64 Capabilities ) { - EFI_STATUS Status; - DEBUG ((DEBUG_GCD, "GCD:CoreSetMemorySpaceCapabilities(Base=%016lx,Length=%016lx)\n", BaseAddress, Length)); DEBUG ((DEBUG_GCD, " Capabilities = %016lx\n", Capabilities)); - Status = CoreConvertSpace (GCD_SET_CAPABILITIES_MEMORY_OPERATION, (EFI_GCD_MEMORY_TYPE)0, (EFI_GCD_IO_TYPE)0, BaseAddress, Length, Capabilities, 0); - if (!EFI_ERROR (Status)) { - CoreUpdateMemoryAttributes (BaseAddress, RShiftU64 (Length, EFI_PAGE_SHIFT), Capabilities & (~EFI_MEMORY_RUNTIME)); - } - - return Status; + return CoreConvertSpace (GCD_SET_CAPABILITIES_MEMORY_OPERATION, (EFI_GCD_MEMORY_TYPE)0, (EFI_GCD_IO_TYPE)0, BaseAddress, Length, Capabilities, 0); } /**