|
|
@@ -2888,6 +2888,24 @@ static int cxgb4vf_pci_probe(struct pci_dev *pdev,
|
|
|
*/
|
|
|
adapter->name = pci_name(pdev);
|
|
|
adapter->msg_enable = DFLT_MSG_ENABLE;
|
|
|
+
|
|
|
+ /* If possible, we use PCIe Relaxed Ordering Attribute to deliver
|
|
|
+ * Ingress Packet Data to Free List Buffers in order to allow for
|
|
|
+ * chipset performance optimizations between the Root Complex and
|
|
|
+ * Memory Controllers. (Messages to the associated Ingress Queue
|
|
|
+ * notifying new Packet Placement in the Free Lists Buffers will be
|
|
|
+ * send without the Relaxed Ordering Attribute thus guaranteeing that
|
|
|
+ * all preceding PCIe Transaction Layer Packets will be processed
|
|
|
+ * first.) But some Root Complexes have various issues with Upstream
|
|
|
+ * Transaction Layer Packets with the Relaxed Ordering Attribute set.
|
|
|
+ * The PCIe devices which under the Root Complexes will be cleared the
|
|
|
+ * Relaxed Ordering bit in the configuration space, So we check our
|
|
|
+ * PCIe configuration space to see if it's flagged with advice against
|
|
|
+ * using Relaxed Ordering.
|
|
|
+ */
|
|
|
+ if (!pcie_relaxed_ordering_enabled(pdev))
|
|
|
+ adapter->flags |= ROOT_NO_RELAXED_ORDERING;
|
|
|
+
|
|
|
err = adap_init0(adapter);
|
|
|
if (err)
|
|
|
goto err_unmap_bar;
|