Bug 14466

Summary: EFI boot on x86 fails in .32
Product: Platform Specific/Hardware Reporter: Rafael J. Wysocki (rjw)
Component: i386Assignee: platform_i386
Severity: normal CC: feng.tang, tglx
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 2.6.32-rc5 Tree: Mainline
Regression: Yes
Bug Depends on:    
Bug Blocks: 14230    

Description Rafael J. Wysocki 2009-10-25 23:19:02 UTC
Subject    : [REGRESSION] EFI boot on x86 fails in .32
Submitter  : Matthew Garrett <mjg59@srcf.ucam.org>
Date       : 2009-10-20 0:34
References : http://marc.info/?l=linux-kernel&m=125599887314290&w=4
Handled-By : Feng Tang <feng.tang@intel.com>

This entry is being used for tracking a regression from 2.6.31.  Please don't
close it until the problem is fixed in the mainline.
Comment 1 Rafael J. Wysocki 2009-10-25 23:21:23 UTC
commit 7bd867dfb4e0357e06a3211ab2bd0e714110def3
Author: Feng Tang <feng.tang@intel.com>
Date:   Thu Sep 10 10:48:56 2009 +0800

    x86: Move get/set_wallclock to x86_platform_ops

    Signed-off-by: Feng Tang <feng.tang@intel.com>
    LKML-Reference: <new-submission>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

First-Bad-Commit : 7bd867dfb4e0357e06a3211ab2bd0e714110def3
Comment 2 Feng Tang 2009-11-04 02:39:37 UTC
Following commit in 2.6.32-rc6 fixes the bug.


commit 772be899bc022ef2b911c3611b487d417e3269c3
Author: Feng Tang <feng.tang@intel.com>
Date:   Tue Oct 20 12:54:02 2009 +0800

    x86: Make EFI RTC function depend on 32bit again
    The EFI RTC functions are only available on 32 bit. commit 7bd867df
    (x86: Move get/set_wallclock to x86_platform_ops) removed the 32bit
    dependency which leads to boot crashes on 64bit EFI systems.
    Add the dependency back.
    Solves: http://bugzilla.kernel.org/show_bug.cgi?id=14466
    Tested-by: Matthew Garrett <mjg59@srcf.ucam.org>
    Signed-off-by: Feng Tang <feng.tang@intel.com>
    LKML-Reference: <20091020125402.028d66d5@feng-desktop>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

diff --git a/arch/x86/kernel/efi.c b/arch/x86/kernel/efi.c
index ad5bd98..cdcfb12 100644
--- a/arch/x86/kernel/efi.c
+++ b/arch/x86/kernel/efi.c
@@ -454,8 +454,10 @@ void __init efi_init(void)
        if (add_efi_memmap)
+#ifdef CONFIG_X86_32
        x86_platform.get_wallclock = efi_get_time;
        x86_platform.set_wallclock = efi_set_rtc_mmss;
        /* Setup for EFI runtime service */
        reboot_type = BOOT_EFI;