From patchwork Sat Oct 4 06:22:48 2008 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yinghai Lu X-Patchwork-Id: 130497 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752674AbYJDGXh (ORCPT ); Sat, 4 Oct 2008 02:23:37 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751365AbYJDGX3 (ORCPT ); Sat, 4 Oct 2008 02:23:29 -0400 Received: from wf-out-1314.google.com ([209.85.200.170]:30049 "EHLO wf-out-1314.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751203AbYJDGX2 (ORCPT ); Sat, 4 Oct 2008 02:23:28 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; b=Jlv4sXvxG0KXEyEmI0gx/+dIlDKQoQAV2XjQpBHwp8BxIQdOnfF4gGT1+PrJrnlP4y Ermg800qgkx6X4lrp0IMTtVPWGFE6k5vg/A+9WWkbnSLidfhL4OQBeN3r4aF7Ow/WMkR +GdkyH+IbYUwvB6GXd1OQqBkEp48ZuV+HxB4w= From: Yinghai Lu To: Ingo Molnar , Thomas Gleixner , "H. Peter Anvin" , Andrew Morton , Huang Ying Cc: linux-kernel@vger.kernel.org, Yinghai Lu Subject: Date: Fri, 3 Oct 2008 23:22:48 -0700 Message-Id: <1223101368-8765-1-git-send-email-yhlu.kernel@gmail.com> X-Mailer: git-send-email 1.5.6 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4076 Lines: 118 Subject:[RFC PATCH] x86: make 64bit efi to use ioremap_cache for efi_ioremap Signed-off-by: Yinghai Lu --- arch/x86/kernel/efi.c | 5 +---- arch/x86/kernel/efi_64.c | 27 ++------------------------- include/asm-x86/efi.h | 8 ++------ include/asm-x86/fixmap_64.h | 3 --- 4 files changed, 5 insertions(+), 38 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ Index: linux-2.6/arch/x86/kernel/efi.c =================================================================== --- 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; Index: linux-2.6/arch/x86/kernel/efi_64.c =================================================================== --- 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); @@ -97,26 +97,3 @@ void __init efi_call_phys_epilog(void) early_runtime_code_mapping_set_exec(0); } -void __iomem *__init efi_ioremap(unsigned long phys_addr, unsigned long size) -{ - static unsigned pages_mapped __initdata; - unsigned i, pages; - unsigned long offset; - - pages = PFN_UP(phys_addr + size) - PFN_DOWN(phys_addr); - offset = phys_addr & ~PAGE_MASK; - phys_addr &= PAGE_MASK; - - if (pages_mapped + pages > MAX_EFI_IO_PAGES) - return NULL; - - for (i = 0; i < pages; i++) { - __set_fixmap(FIX_EFI_IO_MAP_FIRST_PAGE - pages_mapped, - phys_addr, PAGE_KERNEL); - phys_addr += PAGE_SIZE; - pages_mapped++; - } - - return (void __iomem *)__fix_to_virt(FIX_EFI_IO_MAP_FIRST_PAGE - \ - (pages_mapped - pages)) + offset; -} Index: linux-2.6/include/asm-x86/efi.h =================================================================== --- linux-2.6.orig/include/asm-x86/efi.h +++ linux-2.6/include/asm-x86/efi.h @@ -33,12 +33,8 @@ extern unsigned long asmlinkage efi_call #define efi_call_virt6(f, a1, a2, a3, a4, a5, a6) \ efi_call_virt(f, a1, a2, a3, a4, a5, a6) -#define efi_ioremap(addr, size) ioremap_cache(addr, size) - #else /* !CONFIG_X86_32 */ -#define MAX_EFI_IO_PAGES 100 - extern u64 efi_call0(void *fp); extern u64 efi_call1(void *fp, u64 arg1); extern u64 efi_call2(void *fp, u64 arg1, u64 arg2); @@ -86,10 +82,10 @@ extern u64 efi_call6(void *fp, u64 arg1, efi_call6((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \ (u64)(a3), (u64)(a4), (u64)(a5), (u64)(a6)) -extern void __iomem *efi_ioremap(unsigned long addr, unsigned long size); - #endif /* CONFIG_X86_32 */ +#define efi_ioremap(addr, size) ioremap_cache(addr, size) + extern void efi_reserve_early(void); extern void efi_call_phys_prelog(void); extern void efi_call_phys_epilog(void); Index: linux-2.6/include/asm-x86/fixmap_64.h =================================================================== --- linux-2.6.orig/include/asm-x86/fixmap_64.h +++ linux-2.6/include/asm-x86/fixmap_64.h @@ -43,9 +43,6 @@ enum fixed_addresses { FIX_APIC_BASE, /* local (CPU) APIC) -- required for SMP or not */ FIX_IO_APIC_BASE_0, FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS - 1, - FIX_EFI_IO_MAP_LAST_PAGE, - FIX_EFI_IO_MAP_FIRST_PAGE = FIX_EFI_IO_MAP_LAST_PAGE - + MAX_EFI_IO_PAGES - 1, #ifdef CONFIG_PARAVIRT FIX_PARAVIRT_BOOTMAP, #endif