x86-64/efi: Use EFI to deal with platform wall clock
Other than ix86, x86-64 on EFI so far didn't set the {g,s}et_wallclock accessors to the EFI routines, thus incorrectly using raw RTC accesses instead. Simply removing the #ifdef around the respective code isn't enough, however: While so far early get-time calls were done in physical mode, this doesn't work properly for x86-64, as virtual addresses would still need to be set up for all runtime regions (which wasn't the case on the system I have access to), so instead the patch moves the call to efi_enter_virtual_mode() ahead (which in turn allows to drop all code related to calling efi-get-time in physical mode). Additionally the earlier calling of efi_set_executable() requires the CPA code to cope, i.e. during early boot it must be avoided to call cpa_flush_array(), as the first thing this function does is a BUG_ON(irqs_disabled()). Also make the two EFI functions in question here static - they're not being referenced elsewhere. Signed-off-by: Jan Beulich <jbeulich@suse.com> Tested-by: Matt Fleming <matt.fleming@intel.com> Acked-by: Matthew Garrett <mjg@redhat.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/4FBFBF5F020000780008637F@nat28.tlf.novell.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
@@ -460,6 +460,10 @@ static void __init mm_init(void)
|
||||
percpu_init_late();
|
||||
pgtable_cache_init();
|
||||
vmalloc_init();
|
||||
#ifdef CONFIG_X86
|
||||
if (efi_enabled)
|
||||
efi_enter_virtual_mode();
|
||||
#endif
|
||||
}
|
||||
|
||||
asmlinkage void __init start_kernel(void)
|
||||
@@ -601,10 +605,6 @@ asmlinkage void __init start_kernel(void)
|
||||
calibrate_delay();
|
||||
pidmap_init();
|
||||
anon_vma_init();
|
||||
#ifdef CONFIG_X86
|
||||
if (efi_enabled)
|
||||
efi_enter_virtual_mode();
|
||||
#endif
|
||||
thread_info_cache_init();
|
||||
cred_init();
|
||||
fork_init(totalram_pages);
|
||||
|
Reference in New Issue
Block a user