public inbox for linux-ia64@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] fix PCI interrupt setting for ia64
@ 2004-03-08  2:49 Kenji Kaneshige
  2004-03-08  6:30 ` Grant Grundler
                   ` (9 more replies)
  0 siblings, 10 replies; 24+ messages in thread
From: Kenji Kaneshige @ 2004-03-08  2:49 UTC (permalink / raw)
  To: linux-ia64; +Cc: linux-kernel

Hi,

In ia64 kernel, IOSAPIC's RTEs for PCI interrupts are unmasked at the
boot time before installing device drivers. I think it is very dangerous.
If some PCI devices without device driver generate interrupts, interrupts
are generated repeatedly because these interrupt requests are never
cleared. I think RTEs for PCI interrupts should be unmasked by device
driver.

A following patch fixes this issue.

Regards,
Kenji Kaneshige


diff -Naur linux-2.6.4-rc2/arch/ia64/kernel/iosapic.c
linux-2.6.4-rc2-changed/arch/ia64/kernel/iosapic.c
--- linux-2.6.4-rc2/arch/ia64/kernel/iosapic.c  2004-03-05
15:13:53.155237277 +0900
+++ linux-2.6.4-rc2-changed/arch/ia64/kernel/iosapic.c  2004-03-05
16:48:31.856142526 +0900
@@ -170,7 +170,7 @@
 }

 static void
-set_rte (unsigned int vector, unsigned int dest)
+set_rte (unsigned int vector, unsigned int dest, int mask)
 {
        unsigned long pol, trigger, dmode;
        u32 low32, high32;
@@ -205,6 +205,7 @@
        low32 = ((pol << IOSAPIC_POLARITY_SHIFT) |
                 (trigger << IOSAPIC_TRIGGER_SHIFT) |
                 (dmode << IOSAPIC_DELIVERY_SHIFT) |
+                ((mask ? 1 : 0) << IOSAPIC_MASK_SHIFT) |
                 vector);

        /* dest contains both id and eid */
@@ -509,7 +510,7 @@
               (trigger = IOSAPIC_EDGE ? "edge" : "level"), dest, vector);

        /* program the IOSAPIC routing table */
-       set_rte(vector, dest);
+       set_rte(vector, dest, 0);
        return vector;
 }

@@ -557,7 +558,7 @@
               (trigger = IOSAPIC_EDGE ? "edge" : "level"), dest, vector);

        /* program the IOSAPIC routing table */
-       set_rte(vector, dest);
+       set_rte(vector, dest, 0);
        return vector;
 }

@@ -583,7 +584,7 @@
            trigger = IOSAPIC_EDGE ? "edge" : "level", dest, vector);

        /* program the IOSAPIC routing table */
-       set_rte(vector, dest);
+       set_rte(vector, dest, 0);
 }

 void __init
@@ -669,7 +670,7 @@
        /* direct the interrupt vector to the running cpu id */
        dest = (ia64_getreg(_IA64_REG_CR_LID) >> 16) & 0xffff;
 #endif
-       set_rte(vector, dest);
+       set_rte(vector, dest, 1);

        printk(KERN_INFO "IOSAPIC: vector %d -> CPU 0x%04x, enabled\n",
               vector, dest);


^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2004-03-11  7:33 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-03-08  2:49 [PATCH] fix PCI interrupt setting for ia64 Kenji Kaneshige
2004-03-08  6:30 ` Grant Grundler
2004-03-08 21:37   ` David Mosberger
2004-03-08  7:34 ` Liu, Benjamin
2004-03-08  7:44 ` Liu, Benjamin
2004-03-08  9:25   ` Takayoshi Kochi
2004-03-08 19:12     ` Bjorn Helgaas
2004-03-08 19:13     ` Bjorn Helgaas
2004-03-08 21:44       ` David Mosberger
2004-03-08 21:54         ` Russell King
2004-03-08 22:05           ` Bjorn Helgaas
2004-03-08 22:10             ` David Mosberger
2004-03-08 22:41               ` Bjorn Helgaas
2004-03-08 22:50                 ` David Mosberger
2004-03-08  8:31 ` Kenji Kaneshige
2004-03-08  9:14 ` Liu, Benjamin
2004-03-08 10:42 ` Kenji Kaneshige
2004-03-08 10:46 ` Kenji Kaneshige
2004-03-10 20:09 ` David Mosberger
2004-03-11  0:34 ` Kenji Kaneshige
2004-03-11  1:34   ` Takayoshi Kochi
2004-03-11  7:22   ` David Mosberger
2004-03-11  5:29 ` Kenji Kaneshige
2004-03-11  7:33   ` David Mosberger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox