diff options
author | Pavel Belous <pavel.belous@aquantia.com> | 2017-02-20 14:36:48 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-02-20 17:11:09 -0500 |
commit | c0788f7463f138bb1d30552b3edac442781b4e11 (patch) | |
tree | 5bfd232af73b0fccafaf68724846b97649c8eb64 | |
parent | 55629109d934b2c1b25457424fa72eb94e8c2a26 (diff) |
net: ethernet: aquantia: Fixed incorrect buff->len calculation.
rxd_wb->pkt_len is the total length of the packet.
If we received a large packet (with length > AQ_CFG_RX_FRAME_MAX) then we
will get multiple buffers. We need to fix the length of the last buffer.
Signed-off-by: Pavel Belous <pavel.belous@aquantia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c | 4 |
2 files changed, 4 insertions, 4 deletions
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c index 1f388054a6c7..a2b746a2dd50 100644 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c | |||
@@ -659,8 +659,8 @@ static int hw_atl_a0_hw_ring_rx_receive(struct aq_hw_s *self, | |||
659 | } | 659 | } |
660 | 660 | ||
661 | if (HW_ATL_A0_RXD_WB_STAT2_EOP & rxd_wb->status) { | 661 | if (HW_ATL_A0_RXD_WB_STAT2_EOP & rxd_wb->status) { |
662 | buff->len = (rxd_wb->pkt_len & | 662 | buff->len = rxd_wb->pkt_len % |
663 | (AQ_CFG_RX_FRAME_MAX - 1U)); | 663 | AQ_CFG_RX_FRAME_MAX; |
664 | buff->len = buff->len ? | 664 | buff->len = buff->len ? |
665 | buff->len : AQ_CFG_RX_FRAME_MAX; | 665 | buff->len : AQ_CFG_RX_FRAME_MAX; |
666 | buff->next = 0U; | 666 | buff->next = 0U; |
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c index e7e694f693bd..cab2931dab9a 100644 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c | |||
@@ -673,8 +673,8 @@ static int hw_atl_b0_hw_ring_rx_receive(struct aq_hw_s *self, | |||
673 | } | 673 | } |
674 | 674 | ||
675 | if (HW_ATL_B0_RXD_WB_STAT2_EOP & rxd_wb->status) { | 675 | if (HW_ATL_B0_RXD_WB_STAT2_EOP & rxd_wb->status) { |
676 | buff->len = (rxd_wb->pkt_len & | 676 | buff->len = rxd_wb->pkt_len % |
677 | (AQ_CFG_RX_FRAME_MAX - 1U)); | 677 | AQ_CFG_RX_FRAME_MAX; |
678 | buff->len = buff->len ? | 678 | buff->len = buff->len ? |
679 | buff->len : AQ_CFG_RX_FRAME_MAX; | 679 | buff->len : AQ_CFG_RX_FRAME_MAX; |
680 | buff->next = 0U; | 680 | buff->next = 0U; |