Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ae721f3

Browse files
Sritej Velagadavem330
authored andcommitted
qlge: Fix receive path to drop error frames
o Fix the driver to drop error frames in the receive path o Update error counter which was not getting incremented Signed-off-by: Sritej Velaga <[email protected]> Signed-off-by: Jitendra Kalsaria <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent b79d4a8 commit ae721f3

File tree

1 file changed

+29
-7
lines changed

1 file changed

+29
-7
lines changed

drivers/net/ethernet/qlogic/qlge/qlge_main.c

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1434,11 +1434,13 @@ static int ql_map_send(struct ql_adapter *qdev,
14341434
}
14351435

14361436
/* Categorizing receive firmware frame errors */
1437-
static void ql_categorize_rx_err(struct ql_adapter *qdev, u8 rx_err)
1437+
static void ql_categorize_rx_err(struct ql_adapter *qdev, u8 rx_err,
1438+
struct rx_ring *rx_ring)
14381439
{
14391440
struct nic_stats *stats = &qdev->nic_stats;
14401441

14411442
stats->rx_err_count++;
1443+
rx_ring->rx_errors++;
14421444

14431445
switch (rx_err & IB_MAC_IOCB_RSP_ERR_MASK) {
14441446
case IB_MAC_IOCB_RSP_ERR_CODE_ERR:
@@ -1474,6 +1476,12 @@ static void ql_process_mac_rx_gro_page(struct ql_adapter *qdev,
14741476
struct bq_desc *lbq_desc = ql_get_curr_lchunk(qdev, rx_ring);
14751477
struct napi_struct *napi = &rx_ring->napi;
14761478

1479+
/* Frame error, so drop the packet. */
1480+
if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1481+
ql_categorize_rx_err(qdev, ib_mac_rsp->flags2, rx_ring);
1482+
put_page(lbq_desc->p.pg_chunk.page);
1483+
return;
1484+
}
14771485
napi->dev = qdev->ndev;
14781486

14791487
skb = napi_get_frags(napi);
@@ -1529,6 +1537,12 @@ static void ql_process_mac_rx_page(struct ql_adapter *qdev,
15291537
addr = lbq_desc->p.pg_chunk.va;
15301538
prefetch(addr);
15311539

1540+
/* Frame error, so drop the packet. */
1541+
if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1542+
ql_categorize_rx_err(qdev, ib_mac_rsp->flags2, rx_ring);
1543+
goto err_out;
1544+
}
1545+
15321546
/* The max framesize filter on this chip is set higher than
15331547
* MTU since FCoE uses 2k frames.
15341548
*/
@@ -1614,6 +1628,13 @@ static void ql_process_mac_rx_skb(struct ql_adapter *qdev,
16141628
memcpy(skb_put(new_skb, length), skb->data, length);
16151629
skb = new_skb;
16161630

1631+
/* Frame error, so drop the packet. */
1632+
if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1633+
ql_categorize_rx_err(qdev, ib_mac_rsp->flags2, rx_ring);
1634+
dev_kfree_skb_any(skb);
1635+
return;
1636+
}
1637+
16171638
/* loopback self test for ethtool */
16181639
if (test_bit(QL_SELFTEST, &qdev->flags)) {
16191640
ql_check_lb_frame(qdev, skb);
@@ -1919,6 +1940,13 @@ static void ql_process_mac_split_rx_intr(struct ql_adapter *qdev,
19191940
return;
19201941
}
19211942

1943+
/* Frame error, so drop the packet. */
1944+
if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1945+
ql_categorize_rx_err(qdev, ib_mac_rsp->flags2, rx_ring);
1946+
dev_kfree_skb_any(skb);
1947+
return;
1948+
}
1949+
19221950
/* The max framesize filter on this chip is set higher than
19231951
* MTU since FCoE uses 2k frames.
19241952
*/
@@ -2000,12 +2028,6 @@ static unsigned long ql_process_mac_rx_intr(struct ql_adapter *qdev,
20002028

20012029
QL_DUMP_IB_MAC_RSP(ib_mac_rsp);
20022030

2003-
/* Frame error, so drop the packet. */
2004-
if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
2005-
ql_categorize_rx_err(qdev, ib_mac_rsp->flags2);
2006-
return (unsigned long)length;
2007-
}
2008-
20092031
if (ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HV) {
20102032
/* The data and headers are split into
20112033
* separate buffers.

0 commit comments

Comments
 (0)