diff options
author | Jan Beulich <JBeulich@suse.com> | 2015-03-11 09:52:00 -0400 |
---|---|---|
committer | David Vrabel <david.vrabel@citrix.com> | 2015-03-16 10:51:35 -0400 |
commit | 278edfc07875779a69277f6c5773ec9318a994ee (patch) | |
tree | d859e5bc25ebbacc02a541777e7f0278b14abf59 | |
parent | 85617dc7ee1caa68a8d078b5dd4328d0ef373282 (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.c | 15 |
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; |