RDMA/nes: Forward packets for a new connection with stale APBVT entry
Under heavy traffic, there is a small windows when an APBVT entry is not yet removed and a new connection is established. Packets for the new connection are dropped until APBVT entry is removed. This patch will forward the packets instead of dropping them. Signed-off-by: Faisal Latif <faisal.latif@intel.com> Signed-off-by: Chien Tung <chien.tin.tung@intel.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:

committed by
Roland Dreier

parent
183ecfa309
commit
4a14f6a79f
@@ -2700,27 +2700,33 @@ void nes_nic_ce_handler(struct nes_device *nesdev, struct nes_hw_nic_cq *cq)
|
||||
pkt_type, (pkt_type & NES_PKT_TYPE_APBVT_MASK)); */
|
||||
|
||||
if ((pkt_type & NES_PKT_TYPE_APBVT_MASK) == NES_PKT_TYPE_APBVT_BITS) {
|
||||
nes_cm_recv(rx_skb, nesvnic->netdev);
|
||||
if (nes_cm_recv(rx_skb, nesvnic->netdev))
|
||||
rx_skb = NULL;
|
||||
}
|
||||
if (rx_skb == NULL)
|
||||
goto skip_rx_indicate0;
|
||||
|
||||
|
||||
if ((cqe_misc & NES_NIC_CQE_TAG_VALID) &&
|
||||
(nesvnic->vlan_grp != NULL)) {
|
||||
vlan_tag = (u16)(le32_to_cpu(
|
||||
cq->cq_vbase[head].cqe_words[NES_NIC_CQE_TAG_PKT_TYPE_IDX])
|
||||
>> 16);
|
||||
nes_debug(NES_DBG_CQ, "%s: Reporting stripped VLAN packet. Tag = 0x%04X\n",
|
||||
nesvnic->netdev->name, vlan_tag);
|
||||
if (nes_use_lro)
|
||||
lro_vlan_hwaccel_receive_skb(&nesvnic->lro_mgr, rx_skb,
|
||||
nesvnic->vlan_grp, vlan_tag, NULL);
|
||||
else
|
||||
nes_vlan_rx(rx_skb, nesvnic->vlan_grp, vlan_tag);
|
||||
} else {
|
||||
if ((cqe_misc & NES_NIC_CQE_TAG_VALID) && (nesvnic->vlan_grp != NULL)) {
|
||||
vlan_tag = (u16)(le32_to_cpu(
|
||||
cq->cq_vbase[head].cqe_words[NES_NIC_CQE_TAG_PKT_TYPE_IDX])
|
||||
>> 16);
|
||||
nes_debug(NES_DBG_CQ, "%s: Reporting stripped VLAN packet. Tag = 0x%04X\n",
|
||||
nesvnic->netdev->name, vlan_tag);
|
||||
if (nes_use_lro)
|
||||
lro_vlan_hwaccel_receive_skb(&nesvnic->lro_mgr, rx_skb,
|
||||
nesvnic->vlan_grp, vlan_tag, NULL);
|
||||
else
|
||||
nes_vlan_rx(rx_skb, nesvnic->vlan_grp, vlan_tag);
|
||||
} else {
|
||||
if (nes_use_lro)
|
||||
lro_receive_skb(&nesvnic->lro_mgr, rx_skb, NULL);
|
||||
else
|
||||
nes_netif_rx(rx_skb);
|
||||
}
|
||||
if (nes_use_lro)
|
||||
lro_receive_skb(&nesvnic->lro_mgr, rx_skb, NULL);
|
||||
else
|
||||
nes_netif_rx(rx_skb);
|
||||
}
|
||||
|
||||
skip_rx_indicate0:
|
||||
nesvnic->netdev->last_rx = jiffies;
|
||||
/* nesvnic->netstats.rx_packets++; */
|
||||
/* nesvnic->netstats.rx_bytes += rx_pkt_size; */
|
||||
|
Reference in New Issue
Block a user