diff options
Diffstat (limited to 'drivers/xen/xen-pciback/conf_space_capability_msi.c')
-rw-r--r-- | drivers/xen/xen-pciback/conf_space_capability_msi.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/xen/xen-pciback/conf_space_capability_msi.c b/drivers/xen/xen-pciback/conf_space_capability_msi.c index 78f74b1852d4..d0d2255b5da9 100644 --- a/drivers/xen/xen-pciback/conf_space_capability_msi.c +++ b/drivers/xen/xen-pciback/conf_space_capability_msi.c | |||
@@ -12,6 +12,7 @@ | |||
12 | int pciback_enable_msi(struct pciback_device *pdev, | 12 | int pciback_enable_msi(struct pciback_device *pdev, |
13 | struct pci_dev *dev, struct xen_pci_op *op) | 13 | struct pci_dev *dev, struct xen_pci_op *op) |
14 | { | 14 | { |
15 | struct pciback_dev_data *dev_data; | ||
15 | int otherend = pdev->xdev->otherend_id; | 16 | int otherend = pdev->xdev->otherend_id; |
16 | int status; | 17 | int status; |
17 | 18 | ||
@@ -28,21 +29,29 @@ int pciback_enable_msi(struct pciback_device *pdev, | |||
28 | * the local domain's IRQ number. */ | 29 | * the local domain's IRQ number. */ |
29 | 30 | ||
30 | op->value = dev->irq ? xen_pirq_from_irq(dev->irq) : 0; | 31 | op->value = dev->irq ? xen_pirq_from_irq(dev->irq) : 0; |
32 | dev_data = pci_get_drvdata(dev); | ||
33 | if (dev_data) | ||
34 | dev_data->ack_intr = 0; | ||
31 | return 0; | 35 | return 0; |
32 | } | 36 | } |
33 | 37 | ||
34 | int pciback_disable_msi(struct pciback_device *pdev, | 38 | int pciback_disable_msi(struct pciback_device *pdev, |
35 | struct pci_dev *dev, struct xen_pci_op *op) | 39 | struct pci_dev *dev, struct xen_pci_op *op) |
36 | { | 40 | { |
41 | struct pciback_dev_data *dev_data; | ||
37 | pci_disable_msi(dev); | 42 | pci_disable_msi(dev); |
38 | 43 | ||
39 | op->value = dev->irq ? xen_pirq_from_irq(dev->irq) : 0; | 44 | op->value = dev->irq ? xen_pirq_from_irq(dev->irq) : 0; |
45 | dev_data = pci_get_drvdata(dev); | ||
46 | if (dev_data) | ||
47 | dev_data->ack_intr = 1; | ||
40 | return 0; | 48 | return 0; |
41 | } | 49 | } |
42 | 50 | ||
43 | int pciback_enable_msix(struct pciback_device *pdev, | 51 | int pciback_enable_msix(struct pciback_device *pdev, |
44 | struct pci_dev *dev, struct xen_pci_op *op) | 52 | struct pci_dev *dev, struct xen_pci_op *op) |
45 | { | 53 | { |
54 | struct pciback_dev_data *dev_data; | ||
46 | int i, result; | 55 | int i, result; |
47 | struct msix_entry *entries; | 56 | struct msix_entry *entries; |
48 | 57 | ||
@@ -74,6 +83,9 @@ int pciback_enable_msix(struct pciback_device *pdev, | |||
74 | kfree(entries); | 83 | kfree(entries); |
75 | 84 | ||
76 | op->value = result; | 85 | op->value = result; |
86 | dev_data = pci_get_drvdata(dev); | ||
87 | if (dev_data) | ||
88 | dev_data->ack_intr = 0; | ||
77 | 89 | ||
78 | return result; | 90 | return result; |
79 | } | 91 | } |
@@ -81,6 +93,7 @@ int pciback_enable_msix(struct pciback_device *pdev, | |||
81 | int pciback_disable_msix(struct pciback_device *pdev, | 93 | int pciback_disable_msix(struct pciback_device *pdev, |
82 | struct pci_dev *dev, struct xen_pci_op *op) | 94 | struct pci_dev *dev, struct xen_pci_op *op) |
83 | { | 95 | { |
96 | struct pciback_dev_data *dev_data; | ||
84 | 97 | ||
85 | pci_disable_msix(dev); | 98 | pci_disable_msix(dev); |
86 | 99 | ||
@@ -89,6 +102,10 @@ int pciback_disable_msix(struct pciback_device *pdev, | |||
89 | * an undefined IRQ value of zero. | 102 | * an undefined IRQ value of zero. |
90 | */ | 103 | */ |
91 | op->value = dev->irq ? xen_pirq_from_irq(dev->irq) : 0; | 104 | op->value = dev->irq ? xen_pirq_from_irq(dev->irq) : 0; |
105 | dev_data = pci_get_drvdata(dev); | ||
106 | if (dev_data) | ||
107 | dev_data->ack_intr = 1; | ||
108 | |||
92 | return 0; | 109 | return 0; |
93 | } | 110 | } |
94 | 111 | ||