d5c0e02
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
d5c0e02
Date: Fri, 27 Mar 2015 13:31:11 -0400
d5c0e02
Subject: [PATCH] xen/pciback: Don't disable PCI_COMMAND on PCI device reset.
d5c0e02
d5c0e02
There is no need for this at all. Worst it means that if
d5c0e02
the guest tries to write to BARs it could lead (on certain
d5c0e02
platforms) to PCI SERR errors.
d5c0e02
d5c0e02
Please note that with af6fc858a35b90e89ea7a7ee58e66628c55c776b
d5c0e02
"xen-pciback: limit guest control of command register"
d5c0e02
a guest is still allowed to enable those control bits (safely), but
d5c0e02
is not allowed to disable them and that therefore a well behaved
d5c0e02
frontend which enables things before using them will still
d5c0e02
function correctly.
d5c0e02
d5c0e02
This is done via an write to the configuration register 0x4 which
d5c0e02
triggers on the backend side:
d5c0e02
command_write
d5c0e02
  \- pci_enable_device
d5c0e02
     \- pci_enable_device_flags
d5c0e02
        \- do_pci_enable_device
d5c0e02
           \- pcibios_enable_device
d5c0e02
              \-pci_enable_resourcess
d5c0e02
                [which enables the PCI_COMMAND_MEMORY|PCI_COMMAND_IO]
d5c0e02
d5c0e02
However guests (and drivers) which don't do this could cause
d5c0e02
problems, including the security issues which XSA-120 sought
d5c0e02
to address.
d5c0e02
d5c0e02
Reported-by: Jan Beulich <jbeulich@suse.com>
d5c0e02
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
d5c0e02
---
d5c0e02
 drivers/xen/xen-pciback/pciback_ops.c | 2 --
d5c0e02
 1 file changed, 2 deletions(-)
d5c0e02
d5c0e02
diff --git a/drivers/xen/xen-pciback/pciback_ops.c b/drivers/xen/xen-pciback/pciback_ops.c
d5c0e02
index c4a0666de6f5..26e651336787 100644
d5c0e02
--- a/drivers/xen/xen-pciback/pciback_ops.c
d5c0e02
+++ b/drivers/xen/xen-pciback/pciback_ops.c
d5c0e02
@@ -119,8 +119,6 @@ void xen_pcibk_reset_device(struct pci_dev *dev)
d5c0e02
 		if (pci_is_enabled(dev))
d5c0e02
 			pci_disable_device(dev);
d5c0e02
 
d5c0e02
-		pci_write_config_word(dev, PCI_COMMAND, 0);
d5c0e02
-
d5c0e02
 		dev->is_busmaster = 0;
d5c0e02
 	} else {
d5c0e02
 		pci_read_config_word(dev, PCI_COMMAND, &cmd);
d5c0e02
-- 
d5c0e02
2.1.0
d5c0e02