mirror of https://gitee.com/openkylin/linux.git
net/cxgb4vf: Use new PCI_DEV_FLAGS_NO_RELAXED_ORDERING flag
cxgb4vf Ethernet driver now queries PCIe configuration space to determine if it can send TLPs to it with the Relaxed Ordering Attribute set, just like the pf did. Signed-off-by: Casey Leedom <leedom@chelsio.com> Signed-off-by: Ding Tianhong <dingtianhong@huawei.com> Reviewed-by: Casey Leedom <leedom@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b0ba9d5fde
commit
b629276df7
|
@ -408,6 +408,7 @@ enum { /* adapter flags */
|
|||
USING_MSI = (1UL << 1),
|
||||
USING_MSIX = (1UL << 2),
|
||||
QUEUES_BOUND = (1UL << 3),
|
||||
ROOT_NO_RELAXED_ORDERING = (1UL << 4),
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -2205,6 +2205,7 @@ int t4vf_sge_alloc_rxq(struct adapter *adapter, struct sge_rspq *rspq,
|
|||
struct port_info *pi = netdev_priv(dev);
|
||||
struct fw_iq_cmd cmd, rpl;
|
||||
int ret, iqandst, flsz = 0;
|
||||
int relaxed = !(adapter->flags & ROOT_NO_RELAXED_ORDERING);
|
||||
|
||||
/*
|
||||
* If we're using MSI interrupts and we're not initializing the
|
||||
|
@ -2300,6 +2301,8 @@ int t4vf_sge_alloc_rxq(struct adapter *adapter, struct sge_rspq *rspq,
|
|||
cpu_to_be32(
|
||||
FW_IQ_CMD_FL0HOSTFCMODE_V(SGE_HOSTFCMODE_NONE) |
|
||||
FW_IQ_CMD_FL0PACKEN_F |
|
||||
FW_IQ_CMD_FL0FETCHRO_V(relaxed) |
|
||||
FW_IQ_CMD_FL0DATARO_V(relaxed) |
|
||||
FW_IQ_CMD_FL0PADEN_F);
|
||||
|
||||
/* In T6, for egress queue type FL there is internal overhead
|
||||
|
|
Loading…
Reference in New Issue