Messages in this thread Patch in this message | | | Date | Sun, 5 Oct 2008 11:04:35 -0700 | From | "Yinghai Lu" <> | Subject | Re: [RFC PATCH] x86: make 64bit efi to use ioremap_cache for efi_ioremap |
| |
On Sun, Oct 5, 2008 at 1:56 AM, huang ying <huang.ying.caritas@gmail.com> wrote: > On Sun, Oct 5, 2008 at 1:44 AM, Yinghai Lu <yinghai@kernel.org> wrote: >> On Sat, Oct 4, 2008 at 2:35 AM, huang ying <huang.ying.caritas@gmail.com> wrote: > [...] >>> 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. >> >> so need to make efi range all under direct-mapping like E820-RAM? > > Some EFI runtime range is just some RAM area used by EFI runtime > services, they can be direct-mapped. Some EFI runtime range may be IO > MEM range used by EFI runtime services, it is possible that these IO > MEM range can not be direct-mapped. So I implement efi_ioremap() to > deal with them. >
i'm confused.
so --- 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);
md->virt_addr = (u64) (unsigned long) va; should be ok.
then how about use ioremap directly to replace fixed mapping in 64bit with efi_ioremap? YH
| |