|
@@ -2910,18 +2910,8 @@ bnx2_rx_int(struct bnx2 *bp, struct bnx2_napi *bnapi, int budget)
|
|
|
|
|
|
rx_hdr = (struct l2_fhdr *) skb->data;
|
|
|
len = rx_hdr->l2_fhdr_pkt_len;
|
|
|
+ status = rx_hdr->l2_fhdr_status;
|
|
|
|
|
|
- if ((status = rx_hdr->l2_fhdr_status) &
|
|
|
- (L2_FHDR_ERRORS_BAD_CRC |
|
|
|
- L2_FHDR_ERRORS_PHY_DECODE |
|
|
|
- L2_FHDR_ERRORS_ALIGNMENT |
|
|
|
- L2_FHDR_ERRORS_TOO_SHORT |
|
|
|
- L2_FHDR_ERRORS_GIANT_FRAME)) {
|
|
|
-
|
|
|
- bnx2_reuse_rx_skb(bp, rxr, skb, sw_ring_cons,
|
|
|
- sw_ring_prod);
|
|
|
- goto next_rx;
|
|
|
- }
|
|
|
hdr_len = 0;
|
|
|
if (status & L2_FHDR_STATUS_SPLIT) {
|
|
|
hdr_len = rx_hdr->l2_fhdr_ip_xsum;
|
|
@@ -2931,6 +2921,24 @@ bnx2_rx_int(struct bnx2 *bp, struct bnx2_napi *bnapi, int budget)
|
|
|
pg_ring_used = 1;
|
|
|
}
|
|
|
|
|
|
+ if (unlikely(status & (L2_FHDR_ERRORS_BAD_CRC |
|
|
|
+ L2_FHDR_ERRORS_PHY_DECODE |
|
|
|
+ L2_FHDR_ERRORS_ALIGNMENT |
|
|
|
+ L2_FHDR_ERRORS_TOO_SHORT |
|
|
|
+ L2_FHDR_ERRORS_GIANT_FRAME))) {
|
|
|
+
|
|
|
+ bnx2_reuse_rx_skb(bp, rxr, skb, sw_ring_cons,
|
|
|
+ sw_ring_prod);
|
|
|
+ if (pg_ring_used) {
|
|
|
+ int pages;
|
|
|
+
|
|
|
+ pages = PAGE_ALIGN(len - hdr_len) >> PAGE_SHIFT;
|
|
|
+
|
|
|
+ bnx2_reuse_rx_skb_pages(bp, rxr, NULL, pages);
|
|
|
+ }
|
|
|
+ goto next_rx;
|
|
|
+ }
|
|
|
+
|
|
|
len -= 4;
|
|
|
|
|
|
if (len <= bp->rx_copy_thresh) {
|