[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen stable-4.4] x86/EFI: adjust EFI_MEMORY_WP handling for spec version 2.5
commit ea019a808b22c7f2c87bfd636aa8275f4cf8b431 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Mon Jul 13 14:04:04 2015 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Mon Jul 13 14:04:04 2015 +0200 x86/EFI: adjust EFI_MEMORY_WP handling for spec version 2.5 That flag now means cachability rather than protection, and a new flag EFI_MEMORY_RO got added in its place. Along with EFI_MEMORY_RO also add the two other new EFI_MEMORY_* definitions, even if we don't need them right away. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> master commit: 860313f0411d2dcc6b2fd78bfb834b39d05373a6 master date: 2015-06-10 12:05:21 +0200 --- xen/arch/x86/efi/boot.c | 10 +++++++++- xen/include/efi/efidef.h | 6 +++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/efi/boot.c b/xen/arch/x86/efi/boot.c index 8178aea..011e443 100644 --- a/xen/arch/x86/efi/boot.c +++ b/xen/arch/x86/efi/boot.c @@ -29,6 +29,8 @@ /* Using SetVirtualAddressMap() is incompatible with kexec: */ #undef USE_SET_VIRTUAL_ADDRESS_MAP +#define EFI_REVISION(major, minor) (((major) << 16) | (minor)) + #define SHIM_LOCK_PROTOCOL_GUID \ { 0x605dab50, 0xe046, 0x4300, {0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23} } @@ -59,6 +61,7 @@ struct file { }; static EFI_BOOT_SERVICES *__initdata efi_bs; +static UINT32 __initdata efi_bs_revision; static EFI_HANDLE __initdata efi_ih; static SIMPLE_TEXT_OUTPUT_INTERFACE *__initdata StdOut; @@ -795,6 +798,7 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) efi_ih = ImageHandle; efi_bs = SystemTable->BootServices; + efi_bs_revision = efi_bs->Hdr.Revision; efi_rs = SystemTable->RuntimeServices; efi_ct = SystemTable->ConfigurationTable; efi_num_ct = SystemTable->NumberOfTableEntries; @@ -1650,6 +1654,9 @@ void __init efi_init_memory(void) prot |= _PAGE_PAT | MAP_SMALL_PAGES; else if ( desc->Attribute & (EFI_MEMORY_UC | EFI_MEMORY_UCE) ) prot |= _PAGE_PWT | _PAGE_PCD | MAP_SMALL_PAGES; + else if ( efi_bs_revision >= EFI_REVISION(2, 5) && + (desc->Attribute & EFI_MEMORY_WP) ) + prot |= _PAGE_PAT | _PAGE_PWT | MAP_SMALL_PAGES; else { printk(XENLOG_ERR "Unknown cachability for MFNs %#lx-%#lx%s\n", @@ -1659,7 +1666,8 @@ void __init efi_init_memory(void) prot |= _PAGE_PWT | _PAGE_PCD | MAP_SMALL_PAGES; } - if ( desc->Attribute & EFI_MEMORY_WP ) + if ( desc->Attribute & (efi_bs_revision < EFI_REVISION(2, 5) + ? EFI_MEMORY_WP : EFI_MEMORY_RO) ) prot &= ~_PAGE_RW; if ( (desc->Attribute & EFI_MEMORY_XP) && cpu_has_nx ) prot |= _PAGE_NX_BIT; diff --git a/xen/include/efi/efidef.h b/xen/include/efi/efidef.h index 07fdf0d..86a7e11 100644 --- a/xen/include/efi/efidef.h +++ b/xen/include/efi/efidef.h @@ -156,11 +156,15 @@ typedef enum { #define EFI_MEMORY_WT 0x0000000000000004 #define EFI_MEMORY_WB 0x0000000000000008 #define EFI_MEMORY_UCE 0x0000000000000010 +#define EFI_MEMORY_WP 0x0000000000001000 // physical memory protection on range -#define EFI_MEMORY_WP 0x0000000000001000 #define EFI_MEMORY_RP 0x0000000000002000 #define EFI_MEMORY_XP 0x0000000000004000 +#define EFI_MEMORY_RO 0x0000000000020000 + +#define EFI_MEMORY_NV 0x0000000000008000 +#define EFI_MEMORY_MORE_RELIABLE 0x0000000000010000 // range requires a runtime mapping #define EFI_MEMORY_RUNTIME 0x8000000000000000 -- generated by git-patchbot for /home/xen/git/xen.git#stable-4.4 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |