Thanks Lucy for the detailed explanation.
The problem I have is for 4 separate devices (pci functions). Only the
first instance is able to allocate MSI-X vectors and the other once fail
to a level interrupt (x86 on b111). My understanding that even w/o IRM
the limitation is per device rather than system wide.
Have I missed anything?
Eitan

-----Original Message-----
From: xiuyan.w...@sun.com [mailto:xiuyan.w...@sun.com] 
Sent: Monday, September 14, 2009 8:23 PM
To: Eitan Eliahu
Cc: driver-discuss@opensolaris.org
Subject: Re: [driver-discuss] MSI-X vector shortage

Hi Eitan,

Generally, MSI/X interrupts are limited by the root complex
implementation. So the OS needs some relatively fair allocation
algorithm to assign such limited resources.

In Solaris, without IRM, the default maximum number of MSI/X interrupt
can be allocated to a pci function is 8 for SPARC and the number is 2
for x86. Tt can be tuned by increasing ddi_msix_alloc_limit through
/etc/system. But on x86, the total number of interrupt vectors for
interrupt priority 5 is 32 (5 is the default interrupt priority for
network devices), so you can not allocate more interrupts than
32 even with tuning.

With IRM, the above limitation is removed and the allocation algorithm
is more flexible. But for x86, the driver can only allocate more
interrupts for a pci function when the fix of the below CR is available:
http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6669984

In my opinion, it's quite challenging for a IRM-capable driver to handle
the situation of interrupt reclaim when the system is short of interrupt
resources.

Having said the above, ddi_intr_dup_handler() might be able to address
your issue if you do want to use large number of interrupts, which lets
more MSI-X "slot" to share the same interrupt vector if the driver can
not get as more interrupts as desired. But it only works on SPARC.
Please see the man page for the details on the usage.

Thanks,
Lucy

On 2009/09/15 06:26, Eitan Eliahu wrote:
> It seems that the driver fails to allocate MSI-X interrupts after
30-32 
> vectors had been allocated. Setting higher number in 
> ddi_msix_alloc_limit does not resolve the issue.
> 
> Should the driver use new dynamic Interrupt Resource Manager
interface? 
> What is the reason for the above limitation?
> 
> Please advice.
> 
> Eitan
> 
>  
> 
> 
>
------------------------------------------------------------------------
> 
> _______________________________________________
> driver-discuss mailing list
> driver-discuss@opensolaris.org
> http://mail.opensolaris.org/mailman/listinfo/driver-discuss

_______________________________________________
driver-discuss mailing list
driver-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/driver-discuss

Reply via email to