Distribution: Gentoo Hardware Environment: AMD64 3500+ (UP) running in 32-bit mode, chipset: ATI RX480 Problem Description: In the default configuration, i.e., without any kernel parameters, Linux uses ACPI to set up an APIC to do the interrupt routing. However, in this mode the system clock (using either tsc or pmtmr) runs exactly twice as fast as it should; this can be easily checked by comparing the system clock with the RTC. Looking at /proc/interrupts I can see that there are still 1000 timer interrupts per second, so it looks as if for each timer interrupt the system clock would be updated twice. This problem does not occur with 2.6.9. The problem does not occur with kernel parameters acpi=noirq (but then no APIC is used). Steps to reproduce: start the computer ;-)
Created attachment 4446 [details] dmesg
Created attachment 4447 [details] dmidecode
Created attachment 4448 [details] acpidmp
Quite interesting, could you please attach the /proc/interrupts output?
Here you are: CPU0 0: 775827 IO-APIC-edge timer 1: 1769 IO-APIC-edge i8042 8: 2 IO-APIC-edge rtc 12: 67 IO-APIC-edge i8042 14: 631 IO-APIC-edge ide2 15: 46795 IO-APIC-edge ide3 17: 1 IO-APIC-level ATI IXP 21: 47 IO-APIC-level acpi, HiSax 23: 539 IO-APIC-level ide0 NMI: 0 LOC: 387896 ERR: 1 MIS: 0 (ATI IXP above is the sound card, HiSax is an ISDN/BRI card) PS: Thank you for your interest :)
Ok, did you try unload acpi processor driver or load the driver with parameter nocst=1?
Is this a question or a suggestion? I did not since I have never heard of this before. I can try processor.nocst although it seems I have to apply a patch for this (http://sourceforge.net/mailarchive/forum.php?thread_id=6217873&forum_id=6102)?
Ok, just remove the processor driver, let's look at the result.
OK, so I started Linux with only a minimal set of modules loaded (serio, i8042, rtc), and it didn
FWIIW, this also happens with a 64 bit kernel (same sources).
Hmm, could you please indicate how do you compare the time? It appears I can't reproduce the issue in all systems at hand.
Well, I run
0: 775827 IO-APIC-edge timer LOC: 387896 Something is wrong here. Typically you should see LOC (mostly local APIC timer interrupts) match with external timer interrupt. In this case, external timer interrupt seems to be delivering double the number of interrupts. Are you sure you are only seeing 1000 interrupts per sec on IRQ0?
Apparently I was a bit imprecise with my statement about the 1000 interrupts per sec. So here is the output of
Looks like the LAPIC timer is right. How about with boot option 'noapic'?
With kernel parameters
Just a status update: happens also with 2.6.11 (vanilla).
You possibly can narrow down this problem by revert some patches between 2.6.9 and 2.6.10, since you said 2.6.9 is ok. This is very trival, but we have no idea otherwise, :(.
I have the same or similar problem, on similar hardware: Athlon64 on ATI chipset (Radeon Xpress 200; host bridge PCI ID 1002:5950). However, 2.6.9 is NOT good for me: the clock runs at double speed on 2.6.9, 2.6.11.6, as well as various Red Hat kernels (both 2.4 and 2.6). My BIOS has an option to disable the APIC. When the APIC is disabled in the BIOS, the clock works properly. When the APIC is enabled, I get double the number of timer interrupts per second as should be. Example: $ cat /proc/interrupts; sleep 10; cat /proc/interrupts 0: 1184082 IO-APIC-edge timer LOC: 591899 (5 seconds elapse, not 10) 0: 1194092 IO-APIC-edge timer LOC: 596903 which corresponds to 1000 local APIC timer interrupts/second, but 2000 'timer' ints/second. (which causes the clock to run twice as fast)
I have to apologize for causing confusion about the 2.6.9, but when I tried recently 2.6.9 again to follow David
*** This bug has been marked as a duplicate of 3927 ***