From: Jan Kiszka <jan.kiszka@xxxxxxxxxxx> Some devices (e.g. the ath9k) claim to support MSI but actually do not work when this is enabled. We must not blindly switch such devices to MSI but rather provide the user a way to pass control back to the guest driver. This can be done by turning the new property "prefer_msi" off (default remains on). Signed-off-by: Jan Kiszka <jan.kiszka@xxxxxxxxxxx> Signed-off-by: Marcelo Tosatti <mtosatti@xxxxxxxxxx> diff --git a/hw/device-assignment.c b/hw/device-assignment.c index 349e864..228d02f 100644 --- a/hw/device-assignment.c +++ b/hw/device-assignment.c @@ -964,7 +964,8 @@ static int assign_irq(AssignedDevice *dev) } assigned_irq_data.flags = KVM_DEV_IRQ_GUEST_INTX; - if (dev->cap.available & ASSIGNED_DEVICE_CAP_MSI) + if (dev->features & ASSIGNED_DEVICE_PREFER_MSI_MASK && + dev->cap.available & ASSIGNED_DEVICE_CAP_MSI) assigned_irq_data.flags |= KVM_DEV_IRQ_HOST_MSI; else assigned_irq_data.flags |= KVM_DEV_IRQ_HOST_INTX; @@ -1540,6 +1541,8 @@ static PCIDeviceInfo assign_info = { DEFINE_PROP("host", AssignedDevice, host, qdev_prop_hostaddr, PCIHostDevice), DEFINE_PROP_BIT("iommu", AssignedDevice, features, ASSIGNED_DEVICE_USE_IOMMU_BIT, true), + DEFINE_PROP_BIT("prefer_msi", AssignedDevice, features, + ASSIGNED_DEVICE_PREFER_MSI_BIT, true), DEFINE_PROP_STRING("configfd", AssignedDevice, configfd_name), DEFINE_PROP_END_OF_LIST(), }, diff --git a/hw/device-assignment.h b/hw/device-assignment.h index 4eb5835..56b7076 100644 --- a/hw/device-assignment.h +++ b/hw/device-assignment.h @@ -75,8 +75,10 @@ typedef struct { } AssignedDevRegion; #define ASSIGNED_DEVICE_USE_IOMMU_BIT 0 +#define ASSIGNED_DEVICE_PREFER_MSI_BIT 1 #define ASSIGNED_DEVICE_USE_IOMMU_MASK (1 << ASSIGNED_DEVICE_USE_IOMMU_BIT) +#define ASSIGNED_DEVICE_PREFER_MSI_MASK (1 << ASSIGNED_DEVICE_PREFER_MSI_BIT) typedef struct AssignedDevice { PCIDevice dev; -- To unsubscribe from this list: send the line "unsubscribe kvm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html