LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* RE: [PATCH 1/4] x86_64 io_apic: Implement remove_pin_to_irq
@ 2007-01-08 21:46 Lu, Yinghai
2007-01-08 22:50 ` [PATCH] x86_64 ioapic: check_timer_pin Don't add_pin_to_irq if it is already there Eric W. Biederman
0 siblings, 1 reply; 3+ messages in thread
From: Lu, Yinghai @ 2007-01-08 21:46 UTC (permalink / raw)
To: ebiederm
Cc: Linus Torvalds, Tobias Diedrich, Andrew Morton, Adrian Bunk,
Andi Kleen, Linux Kernel Mailing List
-----Original Message-----
From: ebiederm@xmission.com [mailto:ebiederm@xmission.com]
Sent: Monday, January 08, 2007 1:31 PM
To: Lu, Yinghai
Cc: Linus Torvalds; Tobias Diedrich; Andrew Morton; Adrian Bunk; Andi
Kleen; Linux Kernel Mailing List
Subject: Re: [PATCH 1/4] x86_64 io_apic: Implement remove_pin_to_irq
>Any updates to add_pin_to_irq are wrong. It works fine. If there
>is something wrong we need to fix remove_pin_to_irq.
>What is the problem you see? Sorry I'm dense at the moment.
+static int check_timer_pin(int apic, int pin) {
+ int irq, idx;
+ /*
+ * Test the architecture default i8254 timer pin
+ * of apic 0 pin 2.
+ */
+
+
+ /* If the apic pin pair is in use by another irq fail */
+ irq = irq_from_pin(apic, pin);
+ if ((irq != -1) && (irq != 0)) {
+ apic_printk(APIC_VERBOSE,KERN_INFO "...apic %d pin % in
use by irq %d\n",
+ apic, pin, irq);
+ return 0;
+ }
+
+ /* Add an entry in mp_irqs for irq 0 */
+ idx = update_irq0_entry(apic, pin);
+
+ /* Add an entry in irq_to_pin */
+ add_pin_to_irq(0, apic, pin);
+
+ /* Now setup the irq */
+ setup_IO_APIC_irq(apic, pin, idx, 0);
+
+ /* And finally check to see if the irq works */
+ return do_check_timer_pin(apic, pin);
+}
+
In the check_timer_pin, irq_from_pin could return 0, it mean some entry
is for IRQ0 already.
The add_pin_to_irq could add another same entry for it again.
YH
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH] x86_64 ioapic: check_timer_pin Don't add_pin_to_irq if it is already there.
2007-01-08 21:46 [PATCH 1/4] x86_64 io_apic: Implement remove_pin_to_irq Lu, Yinghai
@ 2007-01-08 22:50 ` Eric W. Biederman
0 siblings, 0 replies; 3+ messages in thread
From: Eric W. Biederman @ 2007-01-08 22:50 UTC (permalink / raw)
To: Andrew Morton
Cc: Linus Torvalds, Tobias Diedrich, Adrian Bunk, Andi Kleen,
Linux Kernel Mailing List, Lu, Yinghai
"Lu, Yinghai" <yinghai.lu@amd.com> writes:
>>Any updates to add_pin_to_irq are wrong. It works fine. If there
>>is something wrong we need to fix remove_pin_to_irq.
>
>>What is the problem you see? Sorry I'm dense at the moment.
> In the check_timer_pin, irq_from_pin could return 0, it mean some entry
> is for IRQ0 already.
> The add_pin_to_irq could add another same entry for it again.
Yep. My oversight. Here is the trivial patch to fix it. I don't
see how we could hit this case but if we are going to allow for it
we should handle it correctly.
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
---
arch/x86_64/kernel/io_apic.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c
index 4891959..cc8e9a4 100644
--- a/arch/x86_64/kernel/io_apic.c
+++ b/arch/x86_64/kernel/io_apic.c
@@ -1687,7 +1687,8 @@ static int check_timer_pin(int apic, int pin)
idx = update_irq0_entry(apic, pin);
/* Add an entry in irq_to_pin */
- add_pin_to_irq(0, apic, pin);
+ if (irq != 0)
+ add_pin_to_irq(0, apic, pin);
/* Now setup the irq */
setup_IO_APIC_irq(apic, pin, idx, 0);
--
1.4.4.1.g278f
^ permalink raw reply [flat|nested] 3+ messages in thread
* RE: [PATCH] x86_64 ioapic: check_timer_pin Don't add_pin_to_irq if it is already there.
@ 2007-01-08 22:56 Lu, Yinghai
0 siblings, 0 replies; 3+ messages in thread
From: Lu, Yinghai @ 2007-01-08 22:56 UTC (permalink / raw)
To: ebiederm, Andrew Morton
Cc: Linus Torvalds, Tobias Diedrich, Adrian Bunk, Andi Kleen,
Linux Kernel Mailing List
-----Original Message-----
From: ebiederm@xmission.com [mailto:ebiederm@xmission.com]
Sent: Monday, January 08, 2007 2:50 PM
To: Andrew Morton
Cc: Linus Torvalds; Tobias Diedrich; Adrian Bunk; Andi Kleen; Linux
Kernel Mailing List; Lu, Yinghai
Subject: [PATCH] x86_64 ioapic: check_timer_pin Don't add_pin_to_irq if
it is already there.
>Yep. My oversight. Here is the trivial patch to fix it. I don't
>see how we could hit this case but if we are going to allow for it
>we should handle it correctly.
Yes, in your check_timer calling sequence, at that point irq can not be
0.
( remove_irq_to_pin already remove that entry).
Or in check_timer_pin
+ if ((irq != -1) && (irq != 0)) {
==>
+ if (irq != -1) {
YH
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2007-01-08 22:56 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-01-08 21:46 [PATCH 1/4] x86_64 io_apic: Implement remove_pin_to_irq Lu, Yinghai
2007-01-08 22:50 ` [PATCH] x86_64 ioapic: check_timer_pin Don't add_pin_to_irq if it is already there Eric W. Biederman
2007-01-08 22:56 Lu, Yinghai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).