aboutsummaryrefslogtreecommitdiffstats
path: root/init/main.c
diff options
context:
space:
mode:
authorJan Beulich <JBeulich@suse.com>2012-05-25 11:20:31 -0400
committerMatt Fleming <matt.fleming@intel.com>2012-10-30 06:39:20 -0400
commitbd52276fa1d420c3a504b76ffaaa1642cc79d4c4 (patch)
tree8efb267177d802dda32695c1ef4f6f2013cf61e5 /init/main.c
parentda5a108d05b4f350be33e62d2db125673823e7ff (diff)
x86-64/efi: Use EFI to deal with platform wall clock (again)
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. History: This commit was originally merged as bacef661acdb ("x86-64/efi: Use EFI to deal with platform wall clock") but it resulted in some ASUS machines no longer booting due to a firmware bug, and so was reverted in f026cfa82f62. A pre-emptive fix for the buggy ASUS firmware was merged in 03a1c254975e ("x86, efi: 1:1 pagetable mapping for virtual EFI calls") so now this patch can be reapplied. Signed-off-by: Jan Beulich <jbeulich@suse.com> Tested-by: Matt Fleming <matt.fleming@intel.com> Acked-by: Matthew Garrett <mjg@redhat.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Matt Fleming <matt.fleming@intel.com> [added commit history]
Diffstat (limited to 'init/main.c')
-rw-r--r--init/main.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/init/main.c b/init/main.c
index 9cf77ab138a6..ae70b647b4d9 100644
--- a/init/main.c
+++ b/init/main.c
@@ -461,6 +461,10 @@ static void __init mm_init(void)
461 percpu_init_late(); 461 percpu_init_late();
462 pgtable_cache_init(); 462 pgtable_cache_init();
463 vmalloc_init(); 463 vmalloc_init();
464#ifdef CONFIG_X86
465 if (efi_enabled)
466 efi_enter_virtual_mode();
467#endif
464} 468}
465 469
466asmlinkage void __init start_kernel(void) 470asmlinkage void __init start_kernel(void)
@@ -601,10 +605,6 @@ asmlinkage void __init start_kernel(void)
601 calibrate_delay(); 605 calibrate_delay();
602 pidmap_init(); 606 pidmap_init();
603 anon_vma_init(); 607 anon_vma_init();
604#ifdef CONFIG_X86
605 if (efi_enabled)
606 efi_enter_virtual_mode();
607#endif
608 thread_info_cache_init(); 608 thread_info_cache_init();
609 cred_init(); 609 cred_init();
610 fork_init(totalram_pages); 610 fork_init(totalram_pages);