View Only

PCI Passthru and IRQ sharing

  • 1.  PCI Passthru and IRQ sharing

    Posted Mar 26, 2010 08:32 AM

    First, I should state up front that this issue is not a production related thing, but actually a challenge I have in my home lab

    (First some context; the impatient can skip down to my actual question below)

    At home I have to fit my lab into a very tight space, so the box count is important. Until recently I ran a single ESX server, and a general-purpose linux MythTV/NAS box on the side. Last week I swapped out the motherboard of my Linux server to the Intel DQ45CB, and installed ESX 4i on it.

    My plan was to migrate the MythTV-related stuff on the Linux box to a VM, and present the DVB-C tuner up to it using PCI Passthrough.

    And it works - sort of. The tuner, and the FireWire controller on the motherboard, show up in dmesg and the driver recognizes the card just fine. So seen from inside the VM, everything is hunky-dory. Using various tools I can see that there's a signal there, and the prescan (w_scan in my case, very linuxdvb specific) successfully finds all the frequencies and reports the correct signal strength for each. The problem arises when trying to view channels.It looks like the driver is able to communicate with the card up until the point where it starts receiving the actual DVB stream. That's where things break.

    Based on what I see in the kb document describing VM Directpath IO and posts on various forums, the most common problem cause for PassThru problems is related to IRQ sharing. Specifically, when a passthru resource is sharing IRQ with a resource owned by the vmkernel (or another VMI), one may run into problems.

    In some cases these can be resolved by disabling MSI in the .VMX file; pciPassthru0.msiEnabled = "FALSE".However this did not resolve my issue. My feeling however is that if I could jiggle the IRQ assignments around, I might eventually get this working.

    okay so here is my question: Does anyone know of a way of changing the IRQ assignments in an ESX server? From my understanding of how IRQ assignments work, they are initially configured by the BIOS, then possibly reassigned by the OS afterwards. The ACPI standard (or AHCI? I forget..) contains functions for dynamically reassigning IRQ vectors.

    So in theory it should also be possible for the vmkernel do choose where to stick a given resource. BUT: Obviously there are no easy ways of doing this. It would probably require either a boot-time parameter, or possibly an advanced configuration in /etc/vmware/esx.conf. But maybe it's doable? :smileygrin:

    Any ideas, folks?