Hi Tom, On onnv build version with IRM(interrupt resouce management), there is special code to support "#msix-request" device property on SPARC system as defined in PSARC/2007/453 : uint_t i_ddi_get_msix_alloc_limit(dev_info_t *dip) { uint_t msix_alloc_limit = ddi_msix_alloc_limit;
#if defined(__sparc) if (ddi_prop_exists(DDI_DEV_T_ANY, dip, DDI_PROP_NOTPROM | DDI_PROP_DONTPASS, "#msix-request")) { msix_alloc_limit = MAX(DDI_MAX_MSIX_ALLOC, ddi_msix_alloc_limit); } #endif return (msix_alloc_limit); } That onepager has been obsoleted IRM project. Currently IRM is only supported on SPARC too. On x86 system, there is another hardcoded logic which causes limitation on maximum allocable MSI-X interrupt for a single device. Please refer to uts/common/os/ddi_intr_impl.c, there is code for it: #if defined(__i386) || defined(__amd64) /* * MSI-X allocation limit. */ uint_t ddi_msix_alloc_limit = DDI_DEFAULT_MSIX_ALLOC; #endif #if defined(__i386) || defined(__amd64) /* Global tunable workaround */ if (type == DDI_INTR_TYPE_MSIX) { navail = MIN(nintrs, ddi_msix_alloc_limit); } #endif To allocate more than two MSI-X interrupts for a device on x86 system, you may use kmdb or /etc/system to override value of ddi_msix_alloc_limit.(I haven't test it, just in theory it should work.) Thanks! Tom Chen <> wrote: > Hi Aubrey, > > I follow the way the nxge driver does, ie. add: > (void) ddi_prop_create(DDI_DEV_T_NONE, dip, DDI_PROP_CANSLEEP, > "#msix-request", NULL, 0); > > See the link. > http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/io/nxge/nxge_main.c#6700 > > > > However, on my x86 server running nv107 OS, the number of MSI > interrupts I can get remains 2. > > > > I am wondering if this method obsolete? > > > > Tom > > > ----- Original Message ----- > From: "Aubrey Li" <aub...@opensolaris.org> > To: "Tom Chen" <chento...@hotmail.com> > Cc: <opensolaris-discuss@opensolaris.org> > Sent: Tuesday, March 17, 2009 12:26 AM > Subject: Re: [osol-discuss] MSIX interrupt allocation > > > Hi Tom, > > Which build are you using? > Please take a look at PSARC/2007/453 MSI-X interrupt limit override. > > Thanks, > -Aubrey > Intel OpenSolaris Team > > On Tue, Mar 17, 2009 at 8:38 AM, Tom Chen <chento...@hotmail.com> > wrote: >> Hi, >> >> I am using ddi_intr_alloc to allocate MSIX interrupt handles, I am >> requesting 9, however, why the actual number is always 2 on both >> Sparc and x86 machines? >> >> intr_type=DDI_INTR_TYPE_MSIX; >> /* >> * Get number of supported interrupts >> */ >> rc = ddi_intr_get_nintrs(devinfo, intr_type, &count); /* >> * Get number of available interrupts >> */ >> rc = ddi_intr_get_navail(devinfo, intr_type, &avail); >> request=9; >> rc = ddi_intr_alloc(devinfo, qlge->htable, intr_type, 0, >> request, &actual, DDI_INTR_ALLOC_NORMAL); >> >> why the actual is always 2? >> >> Tom >> -- >> This message posted from opensolaris.org >> _______________________________________________ >> opensolaris-discuss mailing list >> opensolaris-discuss@opensolaris.org >> > > _______________________________________________ > opensolaris-discuss mailing list > opensolaris-discuss@opensolaris.org Liu Jiang (Gerry) OpenSolaris, OTC, SSG, Intel _______________________________________________ opensolaris-discuss mailing list opensolaris-discuss@opensolaris.org