aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/xen/xen-pciback/pciback_ops.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/drivers/xen/xen-pciback/pciback_ops.c b/drivers/xen/xen-pciback/pciback_ops.c
index d0696ce31e9b..4ee5fc080483 100644
--- a/drivers/xen/xen-pciback/pciback_ops.c
+++ b/drivers/xen/xen-pciback/pciback_ops.c
@@ -185,20 +185,23 @@ static
185int xen_pcibk_disable_msi(struct xen_pcibk_device *pdev, 185int xen_pcibk_disable_msi(struct xen_pcibk_device *pdev,
186 struct pci_dev *dev, struct xen_pci_op *op) 186 struct pci_dev *dev, struct xen_pci_op *op)
187{ 187{
188 struct xen_pcibk_dev_data *dev_data;
189
190 if (unlikely(verbose_request)) 188 if (unlikely(verbose_request))
191 printk(KERN_DEBUG DRV_NAME ": %s: disable MSI\n", 189 printk(KERN_DEBUG DRV_NAME ": %s: disable MSI\n",
192 pci_name(dev)); 190 pci_name(dev));
193 pci_disable_msi(dev);
194 191
192 if (dev->msi_enabled) {
193 struct xen_pcibk_dev_data *dev_data;
194
195 pci_disable_msi(dev);
196
197 dev_data = pci_get_drvdata(dev);
198 if (dev_data)
199 dev_data->ack_intr = 1;
200 }
195 op->value = dev->irq ? xen_pirq_from_irq(dev->irq) : 0; 201 op->value = dev->irq ? xen_pirq_from_irq(dev->irq) : 0;
196 if (unlikely(verbose_request)) 202 if (unlikely(verbose_request))
197 printk(KERN_DEBUG DRV_NAME ": %s: MSI: %d\n", pci_name(dev), 203 printk(KERN_DEBUG DRV_NAME ": %s: MSI: %d\n", pci_name(dev),
198 op->value); 204 op->value);
199 dev_data = pci_get_drvdata(dev);
200 if (dev_data)
201 dev_data->ack_intr = 1;
202 return 0; 205 return 0;
203} 206}
204 207
@@ -264,23 +267,27 @@ static
264int xen_pcibk_disable_msix(struct xen_pcibk_device *pdev, 267int xen_pcibk_disable_msix(struct xen_pcibk_device *pdev,
265 struct pci_dev *dev, struct xen_pci_op *op) 268 struct pci_dev *dev, struct xen_pci_op *op)
266{ 269{
267 struct xen_pcibk_dev_data *dev_data;
268 if (unlikely(verbose_request)) 270 if (unlikely(verbose_request))
269 printk(KERN_DEBUG DRV_NAME ": %s: disable MSI-X\n", 271 printk(KERN_DEBUG DRV_NAME ": %s: disable MSI-X\n",
270 pci_name(dev)); 272 pci_name(dev));
271 pci_disable_msix(dev);
272 273
274 if (dev->msix_enabled) {
275 struct xen_pcibk_dev_data *dev_data;
276
277 pci_disable_msix(dev);
278
279 dev_data = pci_get_drvdata(dev);
280 if (dev_data)
281 dev_data->ack_intr = 1;
282 }
273 /* 283 /*
274 * SR-IOV devices (which don't have any legacy IRQ) have 284 * SR-IOV devices (which don't have any legacy IRQ) have
275 * an undefined IRQ value of zero. 285 * an undefined IRQ value of zero.
276 */ 286 */
277 op->value = dev->irq ? xen_pirq_from_irq(dev->irq) : 0; 287 op->value = dev->irq ? xen_pirq_from_irq(dev->irq) : 0;
278 if (unlikely(verbose_request)) 288 if (unlikely(verbose_request))
279 printk(KERN_DEBUG DRV_NAME ": %s: MSI-X: %d\n", pci_name(dev), 289 printk(KERN_DEBUG DRV_NAME ": %s: MSI-X: %d\n",
280 op->value); 290 pci_name(dev), op->value);
281 dev_data = pci_get_drvdata(dev);
282 if (dev_data)
283 dev_data->ack_intr = 1;
284 return 0; 291 return 0;
285} 292}
286#endif 293#endif