diff options
author | Dave Young <dyoung@redhat.com> | 2013-12-20 14:02:14 +0400 |
---|---|---|
committer | Matt Fleming <matt.fleming@intel.com> | 2013-12-21 19:09:51 +0400 |
commit | 3b2664964bc886ae9d5127c8d3708b1acc0626d2 (patch) | |
tree | fd6e3d90de57bf7229bdfa1376e04e8cd55acbab /arch/x86/platform/efi | |
parent | 2da6e57cce14a1c3b0692d6f877b72e185110e2e (diff) | |
download | linux-3b2664964bc886ae9d5127c8d3708b1acc0626d2.tar.xz |
x86/efi: Add a wrapper function efi_map_region_fixed()
Kexec kernel will use saved runtime virtual mapping, so add a new
function efi_map_region_fixed() for directly mapping a md to md->virt.
The md is passed in from 1st kernel, the virtual addr is saved in
md->virt_addr.
Signed-off-by: Dave Young <dyoung@redhat.com>
Acked-by: Borislav Petkov <bp@suse.de>
Tested-by: Toshi Kani <toshi.kani@hp.com>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Diffstat (limited to 'arch/x86/platform/efi')
-rw-r--r-- | arch/x86/platform/efi/efi_32.c | 2 | ||||
-rw-r--r-- | arch/x86/platform/efi/efi_64.c | 10 |
2 files changed, 12 insertions, 0 deletions
diff --git a/arch/x86/platform/efi/efi_32.c b/arch/x86/platform/efi/efi_32.c index e94557cf5487..7b3ec6ed99af 100644 --- a/arch/x86/platform/efi/efi_32.c +++ b/arch/x86/platform/efi/efi_32.c @@ -47,6 +47,8 @@ void __init efi_map_region(efi_memory_desc_t *md) old_map_region(md); } +void __init efi_map_region_fixed(efi_memory_desc_t *md) {} + void efi_call_phys_prelog(void) { struct desc_ptr gdt_descr; diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c index c5a6491d95da..ff08cb19630b 100644 --- a/arch/x86/platform/efi/efi_64.c +++ b/arch/x86/platform/efi/efi_64.c @@ -199,6 +199,16 @@ void __init efi_map_region(efi_memory_desc_t *md) md->virt_addr = efi_va; } +/* + * kexec kernel will use efi_map_region_fixed to map efi runtime memory ranges. + * md->virt_addr is the original virtual address which had been mapped in kexec + * 1st kernel. + */ +void __init efi_map_region_fixed(efi_memory_desc_t *md) +{ + __map_region(md, md->virt_addr); +} + void __iomem *__init efi_ioremap(unsigned long phys_addr, unsigned long size, u32 type, u64 attribute) { |