|
@@ -482,15 +482,19 @@ static int vfio_msi_enable(struct vfio_pci_device *vdev, int nvec, bool msix)
|
|
|
for (i = 0; i < nvec; i++)
|
|
|
vdev->msix[i].entry = i;
|
|
|
|
|
|
- ret = pci_enable_msix(pdev, vdev->msix, nvec);
|
|
|
- if (ret) {
|
|
|
+ ret = pci_enable_msix_range(pdev, vdev->msix, 1, nvec);
|
|
|
+ if (ret < nvec) {
|
|
|
+ if (ret > 0)
|
|
|
+ pci_disable_msix(pdev);
|
|
|
kfree(vdev->msix);
|
|
|
kfree(vdev->ctx);
|
|
|
return ret;
|
|
|
}
|
|
|
} else {
|
|
|
- ret = pci_enable_msi_block(pdev, nvec);
|
|
|
- if (ret) {
|
|
|
+ ret = pci_enable_msi_range(pdev, 1, nvec);
|
|
|
+ if (ret < nvec) {
|
|
|
+ if (ret > 0)
|
|
|
+ pci_disable_msi(pdev);
|
|
|
kfree(vdev->ctx);
|
|
|
return ret;
|
|
|
}
|