xen/pciback: Return error on XEN_PCI_OP_enable_msi when device has MSI or MSI-X enabled
[firefly-linux-kernel-4.4.55.git] / drivers / xen / xen-pciback / pciback_ops.c
index a0e0e3ed4905c10fe36d811f8f568e2fa1a61716..8bfb87c1a9f3851c1c28935853e7e4218a4ec909 100644 (file)
@@ -144,7 +144,12 @@ int xen_pcibk_enable_msi(struct xen_pcibk_device *pdev,
        if (unlikely(verbose_request))
                printk(KERN_DEBUG DRV_NAME ": %s: enable MSI\n", pci_name(dev));
 
-       status = pci_enable_msi(dev);
+       if (dev->msi_enabled)
+               status = -EALREADY;
+       else if (dev->msix_enabled)
+               status = -ENXIO;
+       else
+               status = pci_enable_msi(dev);
 
        if (status) {
                pr_warn_ratelimited("%s: error enabling MSI for guest %u: err %d\n",