Re: 2.6.8.1-mm IRQ routing problems

Alexander Nyberg
2004-08-23T20:06:41Z

On Mon, 2004-08-23 at 18:16, Bjorn Helgaas wrote:
> On Monday 23 August 2004 6:42 am, Alexander Nyberg wrote:
> > On Mon, 2004-08-23 at 03:09, Andrew Morton wrote:
> > > Alexander Nyberg <alexn@telia.com> wrote:
> > > >
> > > > Using 2.6.8.1-mm3 I ran into some problems on x86_64. This
> > > > only happens when fsck runs at bootup because in my case
> > > > of the max-mount-count being reached (I use ext3). Booting
> > > > with pci=routeirq makes problem go away.
> > > >
> > > > Do I win the weird problem prize?
> > >
> > > I think this was fixed in -mm4. Please retest.
> >
> > Still happens in -mm4.
>
> Can you double-check this, and perhaps post the dmesg for the 2.6.8.1-mm4
> attempt? It still looks very much like the problem Randy fixed here:
>
> http://marc.theaimsgroup.com/?l=linux-kernel&m=109313574928853&w=2
>
> I just checked, and Randy's patch is indeed in 2.6.8.1-mm4. If the oops
> still occurs there, it must be a different problem, and the dmesg might
> help diagnose it.
>

Hi,

This fixes things for me.

Signed-off-by: Alexander Nyberg <alexn@telia.com>

--- linux-2.6.7/arch/x86_64/kernel/io_apic.c_orig 2004-08-23 18:32:10.000000000 +0200
+++ linux-2.6.7/arch/x86_64/kernel/io_apic.c 2004-08-23 20:42:33.236703256 +0200
@@ -80,7 +80,7 @@ int vector_irq[NR_VECTORS] = { [0 ... NR
* shared ISA-space IRQs, so we have to support them. We are super
* fast in the common case, and fast for shared ISA-space IRQs.
*/
-static void __init add_pin_to_irq(unsigned int irq, int apic, int pin)
+static void add_pin_to_irq(unsigned int irq, int apic, int pin)
{
static int first_free_entry = NR_IRQS;
struct irq_pin_list *entry = irq_2_pin + irq;
@@ -656,11 +656,7 @@ static inline int IO_APIC_irq_trigger(in
/* irq_vectors is indexed by the sum of all RTEs in all I/O APICs. */
u8 irq_vector[NR_IRQ_VECTORS] = { FIRST_DEVICE_VECTOR , 0 };

-#ifdef CONFIG_PCI_MSI
int assign_irq_vector(int irq)
-#else
-int __init assign_irq_vector(int irq)
-#endif
{
static int current_vector = FIRST_DEVICE_VECTOR, offset = 0;