PCI: Disable PCIe Relaxed Ordering if unsupported
authordingtianhong <dingtianhong@huawei.com>
Tue, 15 Aug 2017 03:23:23 +0000 (11:23 +0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 15 Aug 2017 05:14:50 +0000 (22:14 -0700)
commita99b646afa8a02571ea298bedca6592d818229cd
tree7664769a93cc5315a227b310ffa05ff641ae1c66
parent59a361bc6f6e91d57f25ff0aebb0e646beb3b41d
PCI: Disable PCIe Relaxed Ordering if unsupported

When bit4 is set in the PCIe Device Control register, it indicates
whether the device is permitted to use relaxed ordering.
On some platforms using relaxed ordering can have performance issues or
due to erratum can cause data-corruption. In such cases devices must avoid
using relaxed ordering.

The patch adds a new flag PCI_DEV_FLAGS_NO_RELAXED_ORDERING to indicate that
Relaxed Ordering (RO) attribute should not be used for Transaction Layer
Packets (TLP) targeted towards these affected root complexes.

This patch checks if there is any node in the hierarchy that indicates that
using relaxed ordering is not safe. In such cases the patch turns off the
relaxed ordering by clearing the capability for this device.

Signed-off-by: Casey Leedom <leedom@chelsio.com>
Signed-off-by: Ding Tianhong <dingtianhong@huawei.com>
Acked-by: Ashok Raj <ashok.raj@intel.com>
Acked-by: Alexander Duyck <alexander.h.duyck@intel.com>
Acked-by: Casey Leedom <leedom@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/pci/probe.c
drivers/pci/quirks.c
include/linux/pci.h