x86: Use __pa_symbol instead of __pa on C visible symbols
When I made an attempt at separating __pa_symbol and __pa I found that there were a number of cases where __pa was used on an obvious symbol. I also caught one non-obvious case as _brk_start and _brk_end are based on the address of __brk_base which is a C visible symbol. In mark_rodata_ro I was able to reduce the overhead of kernel symbol to virtual memory translation by using a combination of __va(__pa_symbol()) instead of page_address(virt_to_page()). Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Link: http://lkml.kernel.org/r/20121116215640.8521.80483.stgit@ahduyck-cp1.jf.intel.com Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
This commit is contained in:

committed by
H. Peter Anvin

parent
05a476b6e3
commit
fc8d782677
@@ -62,9 +62,9 @@ void __init setup_real_mode(void)
|
||||
__va(real_mode_header->trampoline_header);
|
||||
|
||||
#ifdef CONFIG_X86_32
|
||||
trampoline_header->start = __pa(startup_32_smp);
|
||||
trampoline_header->start = __pa_symbol(startup_32_smp);
|
||||
trampoline_header->gdt_limit = __BOOT_DS + 7;
|
||||
trampoline_header->gdt_base = __pa(boot_gdt);
|
||||
trampoline_header->gdt_base = __pa_symbol(boot_gdt);
|
||||
#else
|
||||
/*
|
||||
* Some AMD processors will #GP(0) if EFER.LMA is set in WRMSR
|
||||
@@ -78,8 +78,8 @@ void __init setup_real_mode(void)
|
||||
*trampoline_cr4_features = read_cr4();
|
||||
|
||||
trampoline_pgd = (u64 *) __va(real_mode_header->trampoline_pgd);
|
||||
trampoline_pgd[0] = __pa(level3_ident_pgt) + _KERNPG_TABLE;
|
||||
trampoline_pgd[511] = __pa(level3_kernel_pgt) + _KERNPG_TABLE;
|
||||
trampoline_pgd[0] = __pa_symbol(level3_ident_pgt) + _KERNPG_TABLE;
|
||||
trampoline_pgd[511] = __pa_symbol(level3_kernel_pgt) + _KERNPG_TABLE;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user