Re: [RFC PATCH] x86: make 64bit efi to use ioremap_cache for efi_ioremap

From: huang ying
Date: Sat Oct 04 2008 - 05:36:15 EST


Hi, Yinghai,

On Sat, Oct 4, 2008 at 2:23 PM, Yinghai Lu <yhlu.kernel@xxxxxxxxx> 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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/