aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Beulich <JBeulich@suse.com>2015-03-11 09:52:00 -0400
committerDavid Vrabel <david.vrabel@citrix.com>2015-03-16 10:51:35 -0400
commit278edfc07875779a69277f6c5773ec9318a994ee (patch)
treed859e5bc25ebbacc02a541777e7f0278b14abf59
parent85617dc7ee1caa68a8d078b5dd4328d0ef373282 (diff)
xen-pciback: also support disabling of bus-mastering and memory-write-invalidate
It's not clear to me why only the enabling operation got handled so far. Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Signed-off-by: David Vrabel <david.vrabel@citrix.com>
-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;