On Thu, 2008-02-14 at 17:12 +0100, Ingo Molnar wrote: > this is indeed a bug (we change the attributes for a larger area than > needed), but your fix is unclean. Find below a cleaner solution. > > Ying, if you agree with this fix could you please test and ACK it before > we push it to Linus? (this fix is also in the latest x86.git#mm)
I think the patch following may be better, because it is possible that the EFI_PAGE_SHIFT and PAGE_SHIFT are different. Best Regards, Huang Ying -------------------------> The EFI-runtime mapping code changed a larger memory area than it should have, due to a pages/bytes parameter mixup. noticed by Andi Kleen. This patch has been tested on Intel x86 platform with EFI 32/64. Signed-off-by: Huang Ying <[EMAIL PROTECTED]> --- arch/x86/kernel/efi.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) --- a/arch/x86/kernel/efi.c +++ b/arch/x86/kernel/efi.c @@ -386,12 +386,13 @@ static void __init runtime_code_page_mke /* Make EFI runtime service code area executable */ for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) { - md = p; + unsigned long num_pages; + md = p; if (md->type != EFI_RUNTIME_SERVICES_CODE) continue; - - set_memory_x(md->virt_addr, md->num_pages << EFI_PAGE_SHIFT); + num_pages = (md->num_pages << EFI_PAGE_SHIFT) >> PAGE_SHIFT; + set_memory_x(md->virt_addr, num_pages); } } @@ -434,7 +435,7 @@ void __init efi_enter_virtual_mode(void) } if (!(md->attribute & EFI_MEMORY_WB)) - set_memory_uc(md->virt_addr, size); + set_memory_uc(md->virt_addr, size >> PAGE_SHIFT); systab = (u64) (unsigned long) efi_phys.systab; if (md->phys_addr <= systab && systab < end) { -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/