Messages in this thread | | | Date | Sat, 4 Oct 2008 17:35:56 +0800 | From | "huang ying" <> | Subject | Re: [RFC PATCH] x86: make 64bit efi to use ioremap_cache for efi_ioremap |
| |
Hi, Yinghai,
On Sat, Oct 4, 2008 at 2:23 PM, Yinghai Lu <yhlu.kernel@gmail.com> wrote: [...] > --- linux-2.6.orig/arch/x86/kernel/efi.c > +++ linux-2.6/arch/x86/kernel/efi.c > @@ -475,10 +475,7 @@ void __init efi_enter_virtual_mode(void) > size = md->num_pages << EFI_PAGE_SHIFT; > end = md->phys_addr + size; > > - if (PFN_UP(end) <= max_low_pfn_mapped) > - va = __va(md->phys_addr); > - else > - va = efi_ioremap(md->phys_addr, size); > + va = efi_ioremap(md->phys_addr, size);
Using __va and efi_ioremap() here is to make EFI support compatible with kexec. Because EFI provide only efi_enter_virtual_mode(), no efi_leave_virtual_mode(), we should make EFI runtime memory area mapped to same virtual memory area in original kernel and kexeced kernel, so that the EFI runtime services can be used in kexeced kernel.
[...] > --- linux-2.6.orig/arch/x86/kernel/efi_64.c > +++ linux-2.6/arch/x86/kernel/efi_64.c > @@ -46,8 +46,8 @@ static void __init early_mapping_set_exe > { > unsigned long num_pages; > > - start &= PMD_MASK; > - end = (end + PMD_SIZE - 1) & PMD_MASK; > + start &= PAGE_MASK; > + end = (end + PAGE_SIZE - 1) & PAGE_MASK; > num_pages = (end - start) >> PAGE_SHIFT; > if (executable) > set_memory_x((unsigned long)__va(start), num_pages);
early_mapping_set_exe() may be called before page allocator is available. Using PAGE_MASK may make set_memory_x() allocate new page, while using PMD_MASK will not.
Best Regards, Huang Ying
| |