Grant Grundler wrote: > On Sun, Dec 14, 2008 at 03:15:15PM +0400, Manu Abraham wrote: > ... >>> A "GSI" (Generic Sys Interrupt?) is associated with each entry in >>> the MSI-X table. Driver then calls request_irq() to bind an interrupt >>> handler to each GSI. So the driver never directly sees the "message". >> Oh, you mean the array of irq_handlers in the MSI-X table should >> correspond to a particular message ? > > No. I mean each MSI-X entry has an address+message pair and each MSI-X entry > is associated with the parameters passed to each call of request_irq(). > Pass in unique private data to each call of request_irq() and the driver > can determine which message was delivered when the ISR gets called. > (ISR == Interrupt Service Routine, aka driver IRQ handler) Is it possible that even when the config space says that multiple messages are supported, you cannot enable MSI-X ? To explain what i mean here, from the logs in the 3 modes of operation MSI-X, MSI, INTx, when i am requesting MSI-X mode, i find that the MSI-X mode doesn't get enabled. Is this something that's supposed to be ? The codebase that generates the logs is http://jusst.de/hg/saa716x the module that causes it is the saa716x module @ linux/drivers/media/dvb/saa716x Regards, Manu ------------- with MSI-X ------------- saa716x_pci_init (0): found a NEMO reference board PCIe card ACPI: PCI Interrupt 0000:05:00.0[A] -> GSI 19 (level, low) -> IRQ 19 PCI: Setting latency timer of device 0000:05:00.0 to 64 saa716x_request_irq (0): Using MSI-X mode saa716x_enable_msix (0): MSI-X request failed saa716x_request_irq (0): INT-A Mode SAA7160 Rev 1 [1131:0000], irq: 19, mmio: 0xf9480000 SAA7160 64Bit, MSI Disabled, MSI-X=32 msgs saa716x_getbootscript_setup (0): Domain 0: Clk PSS <0x218> Divider: 0x7f80d --> N=1, M=2, freq=1250 saa716x_getbootscript_setup (0): Domain 1: Clk DCS <0x21c> Divider: 0x7f80d --> N=1, M=2, freq=1250 saa716x_getbootscript_setup (0): Domain 2: Clk SPI <0x220> Divider: 0x7f825 --> N=1, M=5, freq=500 saa716x_getbootscript_setup (0): Domain 3: Clk I2C/Boot <0x224> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 4: Clk PHI <0x228> Divider: 0x7f80d --> N=1, M=2, freq=1250 saa716x_getbootscript_setup (0): Domain 5: Clk VI0 <0x22c> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 6: Clk VI1 <0x230> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 7: Clk FGPI0 <0x234> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 8: Clk FGPI1 <0x238> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 9: Clk FGPI2 <0x23c> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 10: Clk FGPI3 <0x240> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 11: Clk AI0 <0x244> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 12: Clk AI1 <0x248> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 13: Clk Phy <0x24c> Divider: 0x7f80d --> N=1, M=2, freq=1250 saa716x_core_boot (0): Using External Boot from config saa716x_hybrid_pci_probe (0): SAA716x Core Boot Success saa716x_msi_init (0): Initializing MSI .. saa716x_msi_init (0): Interrupts ena_l <00> ena_h <00> sta_l <00> sta_h <00> saa716x_jetpack_init (0): SAA7160 Jetpack Successfully initialized saa716x_i2c_init (0): Initializing SAA7160 I2C Core saa716x_i2c_init (0): Initializing adapter (0) SAA716x I2C Core 0 saa716x_i2c_init (0): Initializing Adapter (0) SAA716x I2C Core 0 @ 100k saa716x_add_irqvector (0): Adding Vector 49 <I2CINT_0> saa716x_add_irqvector (0): Interrupts ena_l <00> ena_h <20000> saa716x_i2c_init (0): Initializing adapter (1) SAA716x I2C Core 1 saa716x_hybrid_pci_irq (0): MSI STAT L=<00> H=<20000>, CTL L=<00> H=<20000> saa716x_msi_event: MSI event <I2CINT_0> Bus(0) I2C event: Status=<Idle> --> Stat=<00> Mask=<c7> saa716x_i2c_init (0): Initializing Adapter (1) SAA716x I2C Core 1 @ 100k saa716x_add_irqvector (0): Adding Vector 50 <I2CINT_1> saa716x_add_irqvector (0): Interrupts ena_l <00> ena_h <60000> saa716x_i2c_init (0): SAA7160 I2C Core succesfully initialized saa716x_hybrid_pci_irq (0): MSI STAT L=<00> H=<40000>, CTL L=<00> H=<60000> saa716x_msi_event: MSI event <I2CINT_1> Bus(1) I2C event: Status=<Idle> --> Stat=<00> Mask=<c7> saa716x_dvb_init (0): dvb_register_adapter DVB: registering new adapter (SAA716x dvb adapter) saa716x_dvb_init (0): dvb_dmx_init saa716x_dvb_init (0): dvb_dmxdev_init saa716x_dvb_init (0): Frontend Init saa716x_frontend_power (0): Adapter (0) Power ON saa716x_frontend_reset (0): Adapter (0) RESET saa716x_nemo_frontend_attach (0): Adapter (0) SAA716x frontend Init saa716x_nemo_frontend_attach (0): Adapter (0) Device ID=00 ------------- with MSI ------------- saa716x_pci_init (0): found a NEMO reference board PCIe card ACPI: PCI Interrupt 0000:05:00.0[A] -> GSI 19 (level, low) -> IRQ 19 PCI: Setting latency timer of device 0000:05:00.0 to 64 saa716x_request_irq (0): Using MSI mode SAA7160 Rev 1 [1131:0000], irq: 215, mmio: 0xf9480000 SAA7160 64Bit, MSI Enabled, MSI-X=32 msgs saa716x_getbootscript_setup (0): Domain 0: Clk PSS <0x218> Divider: 0x7f80d --> N=1, M=2, freq=1250 saa716x_getbootscript_setup (0): Domain 1: Clk DCS <0x21c> Divider: 0x7f80d --> N=1, M=2, freq=1250 saa716x_getbootscript_setup (0): Domain 2: Clk SPI <0x220> Divider: 0x7f825 --> N=1, M=5, freq=500 saa716x_getbootscript_setup (0): Domain 3: Clk I2C/Boot <0x224> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 4: Clk PHI <0x228> Divider: 0x7f80d --> N=1, M=2, freq=1250 saa716x_getbootscript_setup (0): Domain 5: Clk VI0 <0x22c> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 6: Clk VI1 <0x230> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 7: Clk FGPI0 <0x234> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 8: Clk FGPI1 <0x238> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 9: Clk FGPI2 <0x23c> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 10: Clk FGPI3 <0x240> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 11: Clk AI0 <0x244> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 12: Clk AI1 <0x248> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 13: Clk Phy <0x24c> Divider: 0x7f80d --> N=1, M=2, freq=1250 saa716x_core_boot (0): Using External Boot from config saa716x_hybrid_pci_probe (0): SAA716x Core Boot Success saa716x_msi_init (0): Initializing MSI .. saa716x_msi_init (0): Interrupts ena_l <00> ena_h <00> sta_l <00> sta_h <00> saa716x_jetpack_init (0): SAA7160 Jetpack Successfully initialized saa716x_i2c_init (0): Initializing SAA7160 I2C Core saa716x_i2c_init (0): Initializing adapter (0) SAA716x I2C Core 0 saa716x_i2c_init (0): Initializing Adapter (0) SAA716x I2C Core 0 @ 100k saa716x_add_irqvector (0): Adding Vector 49 <I2CINT_0> saa716x_add_irqvector (0): Interrupts ena_l <00> ena_h <20000> saa716x_i2c_init (0): Initializing adapter (1) SAA716x I2C Core 1 irq 64, desc: c0483e80, depth: 1, count: 0, unhandled: 0 ->handle_irq(): c01550f9, handle_bad_irq+0x0/0x1a5 ->chip(): c0456030, no_irq_chip+0x0/0x40 ->action(): 00000000 IRQ_DISABLED set unexpected IRQ trap at vector 40 saa716x_i2c_init (0): Initializing Adapter (1) SAA716x I2C Core 1 @ 100k saa716x_add_irqvector (0): Adding Vector 50 <I2CINT_1> saa716x_add_irqvector (0): Interrupts ena_l <00> ena_h <60000> saa716x_i2c_init (0): SAA7160 I2C Core succesfully initialized irq 64, desc: c0483e80, depth: 1, count: 0, unhandled: 0 ->handle_irq(): c01550f9, handle_bad_irq+0x0/0x1a5 ->chip(): c0456030, no_irq_chip+0x0/0x40 ->action(): 00000000 IRQ_DISABLED set unexpected IRQ trap at vector 40 saa716x_dvb_init (0): dvb_register_adapter DVB: registering new adapter (SAA716x dvb adapter) saa716x_dvb_init (0): dvb_dmx_init saa716x_dvb_init (0): dvb_dmxdev_init saa716x_dvb_init (0): Frontend Init saa716x_frontend_power (0): Adapter (0) Power ON saa716x_frontend_reset (0): Adapter (0) RESET saa716x_nemo_frontend_attach (0): Adapter (0) SAA716x frontend Init saa716x_nemo_frontend_attach (0): Adapter (0) Device ID=00 -------------with INTx ------------- saa716x_pci_init (0): found a NEMO reference board PCIe card ACPI: PCI Interrupt 0000:05:00.0[A] -> GSI 19 (level, low) -> IRQ 19 PCI: Setting latency timer of device 0000:05:00.0 to 64 SAA7160 Rev 1 [1131:0000], irq: 19, mmio: 0xf9480000 SAA7160 64Bit, MSI Disabled, MSI-X=32 msgs saa716x_getbootscript_setup (0): Domain 0: Clk PSS <0x218> Divider: 0x7f80d --> N=1, M=2, freq=1250 saa716x_getbootscript_setup (0): Domain 1: Clk DCS <0x21c> Divider: 0x7f80d --> N=1, M=2, freq=1250 saa716x_getbootscript_setup (0): Domain 2: Clk SPI <0x220> Divider: 0x7f825 --> N=1, M=5, freq=500 saa716x_getbootscript_setup (0): Domain 3: Clk I2C/Boot <0x224> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 4: Clk PHI <0x228> Divider: 0x7f80d --> N=1, M=2, freq=1250 saa716x_getbootscript_setup (0): Domain 5: Clk VI0 <0x22c> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 6: Clk VI1 <0x230> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 7: Clk FGPI0 <0x234> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 8: Clk FGPI1 <0x238> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 9: Clk FGPI2 <0x23c> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 10: Clk FGPI3 <0x240> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 11: Clk AI0 <0x244> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 12: Clk AI1 <0x248> Divider: 0x7f84d --> N=1, M=10, freq=250 saa716x_getbootscript_setup (0): Domain 13: Clk Phy <0x24c> Divider: 0x7f80d --> N=1, M=2, freq=1250 saa716x_core_boot (0): Using External Boot from config saa716x_hybrid_pci_probe (0): SAA716x Core Boot Success saa716x_msi_init (0): Initializing MSI .. saa716x_msi_init (0): Interrupts ena_l <00> ena_h <00> sta_l <00> sta_h <00> saa716x_jetpack_init (0): SAA7160 Jetpack Successfully initialized saa716x_i2c_init (0): Initializing SAA7160 I2C Core saa716x_i2c_init (0): Initializing adapter (0) SAA716x I2C Core 0 saa716x_i2c_init (0): Initializing Adapter (0) SAA716x I2C Core 0 @ 100k saa716x_add_irqvector (0): Adding Vector 49 <I2CINT_0> saa716x_add_irqvector (0): Interrupts ena_l <00> ena_h <20000> saa716x_i2c_init (0): Initializing adapter (1) SAA716x I2C Core 1 saa716x_hybrid_pci_irq (0): MSI STAT L=<00> H=<20000>, CTL L=<00> H=<20000> saa716x_msi_event: MSI event <I2CINT_0> Bus(0) I2C event: Status=<Idle> --> Stat=<00> Mask=<c7> saa716x_i2c_init (0): Initializing Adapter (1) SAA716x I2C Core 1 @ 100k saa716x_add_irqvector (0): Adding Vector 50 <I2CINT_1> saa716x_add_irqvector (0): Interrupts ena_l <00> ena_h <60000> saa716x_i2c_init (0): SAA7160 I2C Core succesfully initialized saa716x_hybrid_pci_irq (0): MSI STAT L=<00> H=<40000>, CTL L=<00> H=<60000> saa716x_msi_event: MSI event <I2CINT_1> Bus(1) I2C event: Status=<Idle> --> Stat=<00> Mask=<c7> saa716x_dvb_init (0): dvb_register_adapter DVB: registering new adapter (SAA716x dvb adapter) saa716x_dvb_init (0): dvb_dmx_init saa716x_dvb_init (0): dvb_dmxdev_init saa716x_dvb_init (0): Frontend Init saa716x_frontend_power (0): Adapter (0) Power ON saa716x_frontend_reset (0): Adapter (0) RESET saa716x_nemo_frontend_attach (0): Adapter (0) SAA716x frontend Init saa716x_nemo_frontend_attach (0): Adapter (0) Device ID=00 -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html