Re: [PATCH] 2.6.1-mm2: Get irq_vector size right for generic subarchUP installer kernels

From: Mika Penttilä
Date: Thu Jan 15 2004 - 17:39:15 EST




James Cleverdon wrote:

On Wednesday 14 January 2004 8:36 pm, Zwane Mwaikambo wrote:


On Wed, 14 Jan 2004, Nakajima, Jun wrote:


I tend to agree. I think the confusing part is the range of the IRQs on
that machine. Assuming that irq_vector[NR_IRQ_VECTORS = 1024] requires
more entries, then the IRQs should take that range, because
IO_APCI_VECTOR(irq) is just irq_vector[irq], for example. If NR_IRQS is
still 224, how can do_IRQ() can get the correct IRQ (i.e. >= 224) ? So
in that case, the IRQ should be smaller than 224, then irq_vector[]
should be smaller.


In my opinion we should be breaking after we've exceeded the maximum
external vectors we can install. This will of course mean less than
the number of RTEs. James have you actually managed to use the devices
connected to the high (over ~224) RTEs?



No, I haven't exceeded the available vectors, but wli has on a large NUMA-Q box.

The x440 and x445's problems are pre-reserving lots of bus numbers in the BIOS, more than one per PCI slot. They must be anticipating PCI cards with bridge chips on them.

I believe that the reason for irq_vector being so large is to allow IRQ (and eventually vector) sharing. The array is to map from RTE to vector.


Any attempt to setup an irq >= NR_IRQS will crash, because for instance entry.c interrupt stubs are an array of NR_IRQS entries...NR_IRQ_VECTORS > NR_IRQS really doesn't make sense as is.

We do support irq sharing among devices, but not vector sharing among irqs. For that the handler should loop through irq_vector[] to find every index, index != irq, irq_vector[index] == irq_vector[irq].

--Mika


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/