[PATCH net-next 1/4] ixgbe: sparc: rename the ARCH_WANT_RELAX_ORDER to IXGBE_ALLOW_RELAXED_ORDER
leedom at chelsio.com
Thu Apr 27 13:34:57 PDT 2017
| From: Bjorn Helgaas <helgaas at kernel.org>
| Sent: Thursday, April 27, 2017 10:19 AM
| Are you hinting that the PCI core or arch code could actually *enable*
| Relaxed Ordering without the driver doing anything? Is it safe to do that?
| Is there such a thing as a device that is capable of using RO, but where the
| driver must be aware of it being enabled, so it programs the device
I forgot to reply to this portion of Bjorn's email.
The PCI Configuration Space PCI Capability Device Control[Enable Relaxed
Ordering] bit governs enabling the _ability_ for the PCIe Device to send
TLPs with the Relaxed Ordering Attribute set. It does not _cause_ RO to be
set on TLPs. Doing that would almost certainly cause Data Corruption Bugs
since you only want a subset of TLPs to have RO set.
For instance, we typically use RO for Ingress Packet Data delivery but
non-RO for messages notifying the Host that an Ingress Packet has been
delivered. This ensures that the "Ingress Packet Delivered" non-RO TLP is
processed _after_ any preceding RO TLPs delivering the actual Ingress Packet
In the above scenario, if one were to turn off Enable Relaxed Ordering via
the PCIe Capability, then the on-chip PCIe engine would simply never send a
TLP with the Relaxed Ordering Attribute set, regardless of any other chip
And finally, just to be absolutely clear, using Relaxed Ordering isn't and
"Architecture Thing". It's a PCIe Fabric End Point Thing. Many End Points
simply ignore the Relaxed Ordering Attribute (except to reflect it back in
Response TLPs). In this sense, Relaxed Ordering simply provides
potentially useful optimization information to the PCIe End Point.
More information about the linux-arm-kernel