Paul Durrant wrote:
On 22/05/07, Andrew Gallatin <[EMAIL PROTECTED]> wrote:

Since it is MSI, you might want to check the MSI related fields in
your device's config space, and after re-enabling, see if MSI is
enabled and has the same address/data as before you disabled your
interrupt.


Yep - that's a good idea. So.. more ioctls; whilst the interrupts are
working I see my MSI capability as:

[0x50]: 05 60 97 00 00 00 e0 fe 00 00 00 00 62 00 00 00

So, I read that as message data 0x62 to address 0xfee00000 and sure
enough, as usual, ::interrupts shows:

89   0x62 6   PCIe   Edg MSI    0   1     -         sfxge_intr_msi
90   0x63 6   PCIe   Edg MSI    0   1     -         sfxge_intr_msi

I now disable and re-enable. My MSI capability is now:

[0x50]: 05 60 96 00 00 00 e0 fe 00 00 00 00 62 00 00 00

so no change,

not quite; third byte changes from 97 to 96.  I didn't look up what that means.

bur ::interrupts shows:

89   0x61 6   PCIe   Edg MSI    1   1     -         sfxge_intr_msi
90   0x62 6   PCIe   Edg MSI    1   1     -         sfxge_intr_msi

so the base vector is now *wrong*. I guess this is the problem
although I don't quite understand why sfxge_intr_msi() is no longer
being called at all. I would have thought it would just get called
with the wrong context arg2, but that does not seem to be the case.

 Paul


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

Reply via email to