Wesley Shao wrote:

Just to understand your device's capability and requirement. On x86
platforms, if you actually get 64 vectors, they will be on several
different interrupt priorities, will that be a problem for you?

Some interrupt priority has the maximum of 16 vectors, some has only
8, for example.


The device is a NIC and so is getting, as expected, priority 6. I enabled some API and implementation debugging in the kernel and I got the following log:

Feb 22 13:31:12 loansun genunix: [ID 210173 kern.notice] ddi_intr_alloc: name sfxge dip 0xffffff050d02adb8 type 4 inum 0 count 10 behavior 0 Feb 22 13:31:12 loansun pcplusmp: [ID 593478 kern.notice] apic_intr_ops: dip: ffffff050d02adb8 hdlp: ffffff001f768268 intr_op: b Feb 22 13:31:12 loansun genunix: [ID 580217 kern.notice] ddi_intr_alloc: Requested MSI/Xs 16 Max MSI/Xs limit 8

^^^^ I set ddi_msix_alloc_limit = 8, and this seems to have taken effect

Feb 22 13:31:12 loansun genunix: [ID 915629 kern.notice] i_ddi_intr_devi_init: dip ffffff050d02adb8 Feb 22 13:31:12 loansun pcplusmp: [ID 593478 kern.notice] apic_intr_ops: dip: ffffff050d02adb8 hdlp: ffffff001f768238 intr_op: b Feb 22 13:31:12 loansun pcplusmp: [ID 593478 kern.notice] apic_intr_ops: dip: ffffff050d02adb8 hdlp: ffffff001f768528 intr_op: 0 Feb 22 13:31:12 loansun pcplusmp: [ID 514352 kern.notice] apic_navail_vector: dip: ffffff050d02adb8, pri: 6 Feb 22 13:31:12 loansun pcplusmp: [ID 803547 kern.info] pcplusmp: pci1924,710 (sfxge) instance 0 vector 0x30 ioapic 0xff intin 0xff is bound to cpu 7 Feb 22 13:31:12 loansun pcplusmp: [ID 803547 kern.info] pcplusmp: pci1924,710 (sfxge) instance 0 vector 0x32 ioapic 0xff intin 0xff is bound to cpu 8 Feb 22 13:31:12 loansun genunix: [ID 765116 kern.notice] ddi_intr_alloc: getting capability Feb 22 13:31:12 loansun pcplusmp: [ID 593478 kern.notice] apic_intr_ops: dip: ffffff050d02adb8 hdlp: ffffff001f768528 intr_op: 7 Feb 22 13:31:12 loansun genunix: [ID 428426 kern.notice] ddi_intr_alloc: hdlp = 0xffffff052eddd5e8 Feb 22 13:31:12 loansun genunix: [ID 428426 kern.notice] ddi_intr_alloc: hdlp = 0xffffff0516695770 Feb 22 13:31:12 loansun genunix: [ID 321273 kern.notice] ddi_intr_get_pri: hdlp = ffffff052eddd5e8 Feb 22 13:31:12 loansun genunix: [ID 200900 kern.notice] ddi_intr_add_handler: hdlp = 0xffffff052eddd5e8 Feb 22 13:31:12 loansun genunix: [ID 321273 kern.notice] ddi_intr_get_pri: hdlp = ffffff0516695770 Feb 22 13:31:12 loansun genunix: [ID 200900 kern.notice] ddi_intr_add_handler: hdlp = 0xffffff0516695770 Feb 22 13:31:12 loansun genunix: [ID 453560 kern.notice] ddi_intr_get_cap: hdlp = ffffff052eddd5e8 Feb 22 13:31:12 loansun genunix: [ID 667760 kern.notice] ddi_intr_enable: hdlp = ffffff052eddd5e8 Feb 22 13:31:12 loansun pcplusmp: [ID 593478 kern.notice] apic_intr_ops: dip: ffffff050d02adb8 hdlp: ffffff052eddd5e8 intr_op: 3 Feb 22 13:31:12 loansun pcplusmp: [ID 670866 kern.notice] apic_introp_xlate: dip=0xffffff050d02adb8 name=pci1924,710 type=4 irqno=0x0 Feb 22 13:31:12 loansun pcplusmp: [ID 923188 kern.notice] apic_find_irq: dip=0xffffff050d02adb8 vec=0x0 ipl=0x6 type=0x4 Feb 22 13:31:12 loansun pcplusmp: [ID 589289 kern.notice] apic_addspl: dip=0xffffff050d02adb8 type=-5 irqno=0x30 vector=0x60 Feb 22 13:31:12 loansun pcplusmp: [ID 835447 kern.notice] apic_pci_msi_enable_vector: dip=0xffffff050d02adb8 Feb 22 13:31:12 loansun driver = sfxge, inum=0x0 vector=0x60 apicid=0x9 Feb 22 13:31:12 loansun pcplusmp: [ID 323193 kern.notice] apic_pci_msi_enable_vector: addr=0xfee09000 data=0x60 Feb 22 13:31:12 loansun genunix: [ID 667760 kern.notice] ddi_intr_enable: hdlp = ffffff0516695770 Feb 22 13:31:12 loansun pcplusmp: [ID 593478 kern.notice] apic_intr_ops: dip: ffffff050d02adb8 hdlp: ffffff0516695770 intr_op: 3 Feb 22 13:31:12 loansun pcplusmp: [ID 670866 kern.notice] apic_introp_xlate: dip=0xffffff050d02adb8 name=pci1924,710 type=4 irqno=0x1 Feb 22 13:31:12 loansun pcplusmp: [ID 923188 kern.notice] apic_find_irq: dip=0xffffff050d02adb8 vec=0x1 ipl=0x6 type=0x4 Feb 22 13:31:12 loansun pcplusmp: [ID 589289 kern.notice] apic_addspl: dip=0xffffff050d02adb8 type=-5 irqno=0x32 vector=0x62 Feb 22 13:31:12 loansun pcplusmp: [ID 835447 kern.notice] apic_pci_msi_enable_vector: dip=0xffffff050d02adb8 Feb 22 13:31:12 loansun driver = sfxge, inum=0x1 vector=0x62 apicid=0xa Feb 22 13:31:12 loansun pcplusmp: [ID 323193 kern.notice] apic_pci_msi_enable_vector: addr=0xfee0a000 data=0x62 Feb 22 13:31:19 loansun pcplusmp: [ID 593478 kern.notice] apic_intr_ops: dip: 0 hdlp: ffffff00202bc9a8 intr_op: d
#

I'm still only getting two interrupts. I traced the issue to apic_navail_vector() which seems to limit me to two because it insists on finding consecutive vectors. Why is this? Surely the whole point of MSI-X vs. MSI was that the vectors do not have to be consecutive?

  Paul
begin:vcard
fn:Paul Durrant
n:Durrant;Paul
email;internet:[EMAIL PROTECTED]
x-mozilla-html:FALSE
url:http://www.linkedin.com/in/pdurrant
version:2.1
end:vcard

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

Reply via email to