On Wednesday 14 January 2004 8:36 pm, Zwane Mwaikambo wrote: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.
On Wed, 14 Jan 2004, Nakajima, Jun wrote:
I tend to agree. I think the confusing part is the range of the IRQs onIn my opinion we should be breaking after we've exceeded the maximum
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.
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.