[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4] EFI: always map EfiRuntimeServices{Code,Data}
> On 12 Jan 2022, at 08:45, Jan Beulich <jbeulich@xxxxxxxx> wrote: > > From: Sergey Temerkhanov <s.temerkhanov@xxxxxxxxx> > > This helps overcome problems observed with some UEFI implementations > which don't set the Attributes field in memery descriptors properly. > > Signed-off-by: Sergey Temerkhanov <s.temerkhanov@xxxxxxxxx> > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Hi, I’ve tested this patch on an arm machine with UEFI boot and it works fine. Reviewed-by: Luca Fancellu <luca.fancellu@xxxxxxx> Tested-by: Luca Fancellu <luca.fancellu@xxxxxxx> Cheers, Luca > --- > v4: Drop EFI_MEMORY_CACHEABILITY_MASK. Fold with pre-existing if() (into > switch()). Style. > --- > I guess "map_bs" would also want honoring in efi_exit_boot(), but that's > yet another patch then I suppose. > > --- a/xen/common/efi/boot.c > +++ b/xen/common/efi/boot.c > @@ -1094,7 +1094,13 @@ static void __init efi_exit_boot(EFI_HAN > { > EFI_MEMORY_DESCRIPTOR *desc = efi_memmap + i; > > - if ( desc->Attribute & EFI_MEMORY_RUNTIME ) > + /* > + * Runtime services regions are always mapped here. > + * Attributes may be adjusted in efi_init_memory(). > + */ > + if ( (desc->Attribute & EFI_MEMORY_RUNTIME) || > + desc->Type == EfiRuntimeServicesCode || > + desc->Type == EfiRuntimeServicesData ) > desc->VirtualStart = desc->PhysicalStart; > else > desc->VirtualStart = INVALID_VIRTUAL_ADDRESS; > @@ -1545,13 +1551,36 @@ void __init efi_init_memory(void) > ROUNDUP(desc->PhysicalStart + len, PAGE_SIZE)); > } > > - if ( !efi_enabled(EFI_RS) || > - (!(desc->Attribute & EFI_MEMORY_RUNTIME) && > - (!map_bs || > - (desc->Type != EfiBootServicesCode && > - desc->Type != EfiBootServicesData))) ) > + if ( !efi_enabled(EFI_RS) ) > continue; > > + if ( !(desc->Attribute & EFI_MEMORY_RUNTIME) ) > + { > + switch ( desc->Type ) > + { > + default: > + continue; > + > + /* > + * Adjust runtime services regions. Keep in sync with > + * efi_exit_boot(). > + */ > + case EfiRuntimeServicesCode: > + case EfiRuntimeServicesData: > + printk(XENLOG_WARNING > + "Setting RUNTIME attribute for %013" PRIx64 "-%013" > PRIx64 "\n", > + desc->PhysicalStart, desc->PhysicalStart + len - 1); > + desc->Attribute |= EFI_MEMORY_RUNTIME; > + break; > + > + case EfiBootServicesCode: > + case EfiBootServicesData: > + if ( !map_bs ) > + continue; > + break; > + } > + } > + > desc->VirtualStart = INVALID_VIRTUAL_ADDRESS; > > smfn = PFN_DOWN(desc->PhysicalStart); > >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |