From: Jesse Allen <the3dfxdude@hotmail.com>
To: ross@datscreative.com.au
Cc: linux-kernel@vger.kernel.org
Subject: NForce2, Ross Dickson's timer patch on 2.6.1
Date: Mon, 12 Jan 2004 10:35:54 -0700 [thread overview]
Message-ID: <20040112173554.GA792@tesore.local> (raw)
[-- Attachment #1: Type: text/plain, Size: 1812 bytes --]
Hi Ross,
I have a version of your timer patch (io_apic.c) for kernel 2.6.1. It is
attached. I have been monitoring a problem with it. It seems that with the
patch, I gain 1 seconds time over 10 minutes (roughly). So I gain about 2-3
mintues a day. I haven't taken exact measurements, but I know it ends up about
20 minutes difference after a week. This is not good, which would require
resetting the time often.
I tried the 2.6.1 kernel without the timer patch. The timer is now back in PIC
mode, and interrupt 7 has the old noise. Synched the time with my watch. At
first, I noticed no gain in time over 10 minutes. However the next day, I found
it gained 1-2 seconds. Now it is about 7 seconds ahead a few days later now.
This is much better.
So I'm left to thinking, the patch does two things, maybe one thing right, and
one possibly very wrong:
1) It does place the timer in APIC mode.
2) But the timer seems to be fed extra interrupts, maybe the same that is found
on irq 7 without the patch (is this possible?)
I remember someone making a comment which might explain the issue:
http://marc.theaimsgroup.com/?l=linux-kernel&m=107098440019588&w=2
I don't think the patch was much different now than it was then. So I think
there is something wrong with setting up the timer this way. I don't know if
you worked something out with Maciej. I don't know much about interrupt
controller programming so... if maybe you can explain to me anything I'm
missing. For now I've dropped the patch.
Jesse
PS: I have run with disconnect on, and without your ack patch since I got that
surpise BIOS update. No lockups have occurred in the past month, since that. So the disconnect problem is a BIOS bug. (Shuttle has not responded)
PSS: CC me, I'm not subscribed right now.
[-- Attachment #2: nforce2-timer-rd-2.6.1.patch --]
[-- Type: text/plain, Size: 1988 bytes --]
--- linux/arch/i386/kernel/io_apic.c 2003-12-31 10:23:58.000000000 -0700
+++ linux-new/arch/i386/kernel/io_apic.c 2004-01-10 11:46:23.000000000 -0700
@@ -2194,9 +2194,53 @@
return;
}
clear_IO_APIC_pin(0, pin1);
- printk(KERN_ERR "..MP-BIOS bug: 8254 timer not connected to IO-APIC\n");
+ printk(KERN_ERR "..MP-BIOS bug: 8254 timer not connected to IO-APIC INTIN%d\n",pin1);
}
+#if defined(CONFIG_ACPI_BOOT) && defined(CONFIG_X86_UP_IOAPIC)
+ /* for nforce2 try vector 0 on pin0
+ * Note 8259a is already masked, also by default
+ * the io_apic_set_pci_routing call disables the 8259 irq 0
+ * so we must be connected directly to the 8254 timer if this works
+ * Note2: this violates the above comment re Subtle but works!
+ */
+ printk(KERN_INFO "..TIMER: Is timer irq0 connected to IO-APIC INTIN0? ...\n");
+ if (pin1 != -1) {
+ extern spinlock_t i8259A_lock;
+ unsigned long flags;
+ int tok, saved_timer_ack = timer_ack;
+ /*
+ * Ok, does IRQ0 through the IOAPIC work?
+ */
+ io_apic_set_pci_routing ( 0, 0, 0, 0, 0); /* connect pin */
+ unmask_IO_APIC_irq(0);
+ timer_ack = 0;
+
+ /*
+ * Ok, does IRQ0 through the IOAPIC work?
+ */
+ spin_lock_irqsave(&i8259A_lock, flags);
+ Dprintk("..TIMER 8259A ints disabled?, imr1:%02x, imr2:%02x\n", inb(0x21), inb(0xA1));
+ tok = timer_irq_works();
+ spin_unlock_irqrestore(&i8259A_lock, flags);
+ if (tok) {
+ if (nmi_watchdog == NMI_IO_APIC) {
+ disable_8259A_irq(0);
+ setup_nmi();
+ enable_8259A_irq(0);
+ check_nmi_watchdog();
+ }
+ printk(KERN_INFO "..TIMER: works OK on IO-APIC INTIN0 irq0\n" );
+ return;
+ }
+ /* failed */
+ timer_ack = saved_timer_ack;
+ clear_IO_APIC_pin(0, 0);
+ io_apic_set_pci_routing ( 0, pin1, 0, 0, 0);
+ printk(KERN_ERR "..MP-BIOS: 8254 timer not connected to IO-APIC INTIN0\n");
+ }
+#endif
+
printk(KERN_INFO "...trying to set up timer (IRQ0) through the 8259A ... ");
if (pin2 != -1) {
printk("\n..... (found pin %d) ...", pin2);
next reply other threads:[~2004-01-12 17:36 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-01-12 17:35 Jesse Allen [this message]
2004-01-12 19:08 ` NForce2, Ross Dickson's timer patch on 2.6.1 Daniel Drake
2004-01-12 19:15 ` Matt H.
-- strict thread matches above, loose matches on Subject: below --
2004-01-13 16:56 Ross Dickson
2004-01-16 0:22 ` Daniel Drake
2004-01-16 0:02 ` Prakash K. Cheemplavam
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040112173554.GA792@tesore.local \
--to=the3dfxdude@hotmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=ross@datscreative.com.au \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.