Need to override the pci config space to not report function level reset capability

Is there a way to override the capabilities the PCI config space advertises? I have a motherboard SATA controller that advertises function level reset support, but doesn’t actually support it. Any attempt to execute a FLR will cause the system to hang. I’m trying to pass through this device in a Hyper-v VM and it causes the host to reboot when the FLR happens.

Could a filter driver accomplish this? If so, are there any examples of such drivers, or any tips on what would need to happen? In Linux you can use PCI quirks to work around the issue (see https://www.reddit.com/r/VFIO/comments/eba5mh/workaround_patch_for_passing_through_usb_and/)

Who does the FLR (and why) - host (WIndows) or guest? Is the guest OS Windows or Linux?

Could a filter driver accomplish this?
AFAIK, no.

–pa

I believe the Windows host is doing the FLR. I think all hardware part of direct device assignment gets a FLR when the guest reboots. The guest OS is Linux.

Will the host do FLR even if there’s no Hyper-V or the VM does not start?
In this case you may be out of luck. IIRC Windows has a PCI quirks list too, but it’s hard to get information on it.

1 Like

From what I can tell the Hyper-V host always does a FLR, I haven’t found a way to prevent it. That’s interesting Windows has PCI quirks too, I haven’t been able to find anything on Google about it.