Skip to content

Commit 278edfc

Browse files
jbeulichDavid Vrabel
authored andcommitted
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>
1 parent 85617dc commit 278edfc

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

drivers/xen/xen-pciback/conf_space_header.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,15 @@ static int command_write(struct pci_dev *dev, int offset, u16 value, void *data)
8888
printk(KERN_DEBUG DRV_NAME ": %s: set bus master\n",
8989
pci_name(dev));
9090
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);
9196
}
9297

93-
if (value & PCI_COMMAND_INVALIDATE) {
98+
if (!(cmd->val & PCI_COMMAND_INVALIDATE) &&
99+
(value & PCI_COMMAND_INVALIDATE)) {
94100
if (unlikely(verbose_request))
95101
printk(KERN_DEBUG
96102
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)
101107
pci_name(dev), err);
102108
value &= ~PCI_COMMAND_INVALIDATE;
103109
}
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);
104117
}
105118

106119
cmd->val = value;

0 commit comments

Comments
 (0)