aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/xen/xen-pciback/conf_space_header.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/xen/xen-pciback/conf_space_header.c')
-rw-r--r--drivers/xen/xen-pciback/conf_space_header.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/xen/xen-pciback/conf_space_header.c b/drivers/xen/xen-pciback/conf_space_header.c
index 2d7369391472..c2260a0456c9 100644
--- a/drivers/xen/xen-pciback/conf_space_header.c
+++ b/drivers/xen/xen-pciback/conf_space_header.c
@@ -88,9 +88,15 @@ static int command_write(struct pci_dev *dev, int offset, u16 value, void *data)
88 printk(KERN_DEBUG DRV_NAME ": %s: set bus master\n", 88 printk(KERN_DEBUG DRV_NAME ": %s: set bus master\n",
89 pci_name(dev)); 89 pci_name(dev));
90 pci_set_master(dev); 90 pci_set_master(dev);
91 } else if (dev->is_busmaster && !is_master_cmd(value)) {
92 if (unlikely(verbose_request))
93 printk(KERN_DEBUG DRV_NAME ": %s: clear bus master\n",
94 pci_name(dev));
95 pci_clear_master(dev);
91 } 96 }
92 97
93 if (value & PCI_COMMAND_INVALIDATE) { 98 if (!(cmd->val & PCI_COMMAND_INVALIDATE) &&
99 (value & PCI_COMMAND_INVALIDATE)) {
94 if (unlikely(verbose_request)) 100 if (unlikely(verbose_request))
95 printk(KERN_DEBUG 101 printk(KERN_DEBUG
96 DRV_NAME ": %s: enable memory-write-invalidate\n", 102 DRV_NAME ": %s: enable memory-write-invalidate\n",
@@ -101,6 +107,13 @@ static int command_write(struct pci_dev *dev, int offset, u16 value, void *data)
101 pci_name(dev), err); 107 pci_name(dev), err);
102 value &= ~PCI_COMMAND_INVALIDATE; 108 value &= ~PCI_COMMAND_INVALIDATE;
103 } 109 }
110 } else if ((cmd->val & PCI_COMMAND_INVALIDATE) &&
111 !(value & PCI_COMMAND_INVALIDATE)) {
112 if (unlikely(verbose_request))
113 printk(KERN_DEBUG
114 DRV_NAME ": %s: disable memory-write-invalidate\n",
115 pci_name(dev));
116 pci_clear_mwi(dev);
104 } 117 }
105 118
106 cmd->val = value; 119 cmd->val = value;