Re: Updated MSI Patches

Zwane Mwaikambo
2003-08-12T01:53:38Z

On Mon, 11 Aug 2003, Greg KH wrote:

> > There are two types of MSI capable devices: one supports the MSI
> > capability structure and other supports the MSI-X capability structure.
> > The patches provide two APIs msix_alloc_vectors/msix_free_vectors for
> > only devices, which support the MSI-X capability structure, to request
> > for additional messages. By default, each MSI/MSI-X capable device
> > function is allocated with one vector for below reasons:
> > - To achieve a backward compatibility with existing drivers if possible.
> > - Due to the current implementation of vector assignment, all devices
> > that support the MSI-capability structure work with no more than one
> > allocated vector.
> > - The hardware devices, which support the MSI-X capability structure,
> > may indicate the maximum capable number of vectors supported (32
> > vectors as example). However, the device drivers may require only
> > four. With provided APIs, the optimization of MSI vector allocation
> > is achievable.

IMO Multiplexing would be preferred, we can't be allocating that many
vectors for one device/device driver

> > I hope there may be a way to determine the number of vectors supported
> > by CPU during the run-time. I look at the file ../include/asm-i386/mach-
> > default/irq_vectors.h, the maximum of vectors (256) is already well
> > commented.
>
> Yeah, but that's in reference to APIC interrupt sources, right? Does
> that correspond to these "vectors" too? If so, why not just use the
> existing NR_IRQS value instead of creating your own?

There isn't a 1:1 relationship between NR_IRQS and NR_VECTORS we really
shouldn't mix them together. NR_IRQS can be much higher than 256 whilst
on i386 we're fixed to 256 vectors due to that being the Interrupt
Descriptor Table capacity. It is still possible to service more interrupt
lines than 256 on SMP however by making IDTs per 'interrupt servicing
node'

Zwane