Messages in this thread Patch in this message | | | Date | Wed, 30 Apr 2003 22:51:46 +0200 | From | Felix Kühling <> | Subject | [PATCH] PROBLEM: BIOS hangs after reboot with local APIC |
| |
Hello,
when I reboot my laptop the BIOS complains about a keyboard controller failure and timer interrupts not working. On the BIOS password screen the keyboard doesn't work. If I disable the BIOS password the system hangs a bit later on the POST screen. I tried all reboot methods via the kernel command line without success. I saw this problem with Debian Woody's precompiled 2.4.18 kernel, self compiled Debian 2.4.20 sources and Linux 2.4.21-rc1+ACPI patch. This problem only occurs if CONFIG_X86_LOCAL_APIC is enabled. With CONFIG_X86_LOCAL_APIC disabled it reboots just fine.
My guess is that it's a BIOS bug as I've never had this problem on other machines before. I found a workaround: disable the local APIC before rebooting. I don't really know how it works. Just calling disable_local_APIC wasn't enough, so I copied a bit more code from apic_pm_suspend (arch/i386/kernel/apic.c:465) to machine_restart (arch/i386/kernel/process.c:369). I'm pretty sure that this is not the proper way to do it but it works here. A patch against 2.4.21-rc1 can be found at the end of this email.
Best regards, Felix
System Information:
Linux 2.4.21-rc1 with acpi-20030424-2.4.21-rc1.diff.gz
Output from scripts/ver_linux: Linux trabant 2.4.21-rc1 #16 Wed Apr 30 20:07:14 CEST 2003 i686 mobile AMD Athlon(tm) XP 2000+ AuthenticAMD GNU/Linux
Gnu C gcc-3.2 (GCC) 3.2.3 20030309 (Debian prerelease) Gnu make 3.80 util-linux 2.11y mount 2.11y modutils 2.4.21 e2fsprogs 1.32 pcmcia-cs 3.1.33 PPP 2.4.2b3 Linux C Library 2.3.1 Dynamic linker (ldd) 2.3.1 Procps 3.1.6 Net-tools 1.60 Console-tools 0.2.3 Sh-utils 4.5.2 Modules Loaded soundcore input ohci1394 ieee1394 via-rhine mii ehci-hcd usb-uhci usbcore rtc
/proc/cpuinfo processor : 0 vendor_id : AuthenticAMD cpu family : 6 model : 8 model name : mobile AMD Athlon(tm) XP 2000+ stepping : 1 cpu MHz : 1658.556 cache size : 256 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnow bogomips : 3309.56
/proc/interrupts CPU0 0: 276279 XT-PIC timer 1: 641 XT-PIC keyboard 2: 0 XT-PIC cascade 5: 2 XT-PIC ohci1394 8: 4 XT-PIC rtc 9: 5 XT-PIC acpi 10: 877 XT-PIC usb-uhci, eth0 11: 0 XT-PIC PCI device 1524:1410 (ENE Technology Inc), usb-uhci, ehci-hcd 12: 536 XT-PIC PS/2 Mouse 14: 7100 XT-PIC ide0 15: 1 XT-PIC ide1 NMI: 0 LOC: 275894 ERR: 167
/proc/ioports 0000-001f : dma1 0020-003f : pic1 0040-005f : timer 0060-006f : keyboard 0070-007f : rtc 0080-008f : dma page reg 00a0-00bf : pic2 00c0-00df : dma2 00f0-00ff : fpu 0170-0177 : ide1 01f0-01f7 : ide0 0376-0376 : ide1 03c0-03df : vesafb 03f6-03f6 : ide0 0cf8-0cff : PCI conf1 1100-110f : VIA Technologies, Inc. VT82C586B PIPC Bus Master IDE 1100-1107 : ide0 1108-110f : ide1 1200-121f : VIA Technologies, Inc. USB 1200-121f : usb-uhci 1300-131f : VIA Technologies, Inc. USB (#2) 1300-131f : usb-uhci 4000-40ff : PCI CardBus #02 4400-44ff : PCI CardBus #02 c000-dfff : PCI Bus #01 e100-e1ff : VIA Technologies, Inc. VT8233 AC97 Audio Controller e200-e2ff : VIA Technologies, Inc. AC97 Modem Controller e300-e3ff : VIA Technologies, Inc. VT6102 [Rhine-II] e300-e3ff : via-rhine ff00-ff7f : VIA Technologies, Inc. IEEE 1394 Host Controller
/proc/iomem 00000000-0009fbff : System RAM 0009fc00-0009ffff : reserved 000a0000-000bffff : Video RAM area 000c0000-000c7fff : Video ROM 000e0000-000effff : Extension ROM 000f0000-000fffff : System ROM 00100000-0efeffff : System RAM 00100000-0024ed36 : Kernel code 0024ed37-002cf4bf : Kernel data 0eff0000-0effffbf : ACPI Tables 0effffc0-0effffff : ACPI Non-volatile Storage 10000000-10000fff : PCI device 1524:1410 (ENE Technology Inc) 10400000-107fffff : PCI CardBus #02 10800000-10bfffff : PCI CardBus #02 90000000-9fffffff : PCI Bus #01 90000000-97ffffff : S3 Inc. VT8751 [ProSavageDDR P4M266] VGA Controller 90000000-90eeffff : vesafb a0000000-a3ffffff : VIA Technologies, Inc. P/KN266 Host Bridge e0000000-efffffff : PCI Bus #01 e0000000-e007ffff : S3 Inc. VT8751 [ProSavageDDR P4M266] VGA Controller f0000000-f00000ff : VIA Technologies, Inc. USB 2.0 f0000000-f00000ff : ehci-hcd f0000100-f00001ff : VIA Technologies, Inc. VT6102 [Rhine-II] f0000100-f00001ff : via-rhine fedff800-fedfffff : VIA Technologies, Inc. IEEE 1394 Host Controller fedff800-fedfffff : ohci1394 fff80000-ffffffff : reserved
Relevant parts from dmesg: [...] Local APIC disabled by BIOS -- reenabling. Found and enabled local APIC! Initializing CPU#0 Detected 1658.556 MHz processor. [...] CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line) CPU: L2 Cache: 256K (64 bytes/line) Intel machine check architecture supported. Intel machine check reporting enabled on CPU#0. CPU: After generic, caps: 0383fbff c1cbfbff 00000000 00000000 CPU: Common caps: 0383fbff c1cbfbff 00000000 00000000 CPU: AMD mobile AMD Athlon(tm) XP 2000+ stepping 01 Enabling fast FPU save and restore... done. Enabling unmasked SIMD FPU exception support... done. Checking 'hlt' instruction... OK. [...] enabled ExtINT on CPU#0 ESR value before enabling vector: 00000000 ESR value after enabling vector: 00000000 Using local APIC timer interrupts. calibrating APIC timer ... ..... CPU clock speed is 1658.5779 MHz. ..... host bus clock speed is 265.3724 MHz. cpu: 0, clocks: 2653724, slice: 1326862 CPU0<T0:2653712,T1:1326848,D:2,S:1326862,C:2653724> [...]
Workaround: --- linux-2.4.21-rc1-acpi.orig/arch/i386/kernel/process.c 2003-04-30 21:13:20.000000000 +0200 +++ linux/arch/i386/kernel/process.c 2003-04-30 20:04:49.000000000 +0200 @@ -47,6 +47,9 @@ #ifdef CONFIG_MATH_EMULATION #include <asm/math_emu.h> #endif +#ifdef CONFIG_X86_LOCAL_APIC +#include <asm/apic.h> +#endif #include <linux/irq.h> @@ -400,6 +403,20 @@ */ smp_send_stop(); disable_IO_APIC(); +#else +#ifdef CONFIG_X86_LOCAL_APIC + { + unsigned int l, h; + unsigned long flags; + __save_flags(flags); + __cli(); + disable_local_APIC(); + rdmsr(MSR_IA32_APICBASE, l, h); + l &= ~MSR_IA32_APICBASE_ENABLE; + wrmsr(MSR_IA32_APICBASE, l, h); + __restore_flags(flags); + } +#endif #endif if(!reboot_thru_bios) { - 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/
| |