From: Pavel Belous <pavel.bel...@aquantia.com>

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.bel...@aquantia.com>
---
 drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c | 4 ++--
 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 1f38805..a2b746a 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,
                        }
 
                        if (HW_ATL_A0_RXD_WB_STAT2_EOP & rxd_wb->status) {
-                               buff->len = (rxd_wb->pkt_len &
-                                               (AQ_CFG_RX_FRAME_MAX - 1U));
+                               buff->len = rxd_wb->pkt_len %
+                                       AQ_CFG_RX_FRAME_MAX;
                                buff->len = buff->len ?
                                        buff->len : AQ_CFG_RX_FRAME_MAX;
                                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 e7e694f..cab2931 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,
                        }
 
                        if (HW_ATL_B0_RXD_WB_STAT2_EOP & rxd_wb->status) {
-                               buff->len = (rxd_wb->pkt_len &
-                                               (AQ_CFG_RX_FRAME_MAX - 1U));
+                               buff->len = rxd_wb->pkt_len %
+                                       AQ_CFG_RX_FRAME_MAX;
                                buff->len = buff->len ?
                                        buff->len : AQ_CFG_RX_FRAME_MAX;
                                buff->next = 0U;
-- 
2.7.4

Reply via email to