| From fd517e2f0f000cd763a3dccc81ef7b30f1c89070 Mon Sep 17 00:00:00 2001 |
| From: Aaro Koskinen <aaro.koskinen@nokia.com> |
| Date: Wed, 27 Mar 2019 22:35:38 +0200 |
| Subject: net: stmmac: don't overwrite discard_frame status |
| |
| [ Upstream commit 1b746ce8b397e58f9e40ce5c63b7198de6930482 ] |
| |
| If we have error bits set, the discard_frame status will get overwritten |
| by checksum bit checks, which might set the status back to good one. |
| Fix by checking the COE status only if the frame is good. |
| |
| Signed-off-by: Aaro Koskinen <aaro.koskinen@nokia.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin (Microsoft) <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/stmicro/stmmac/enh_desc.c | 7 ++++--- |
| 1 file changed, 4 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c |
| index e8855e6adb48..c42ef6c729c0 100644 |
| --- a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c |
| +++ b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c |
| @@ -231,9 +231,10 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x, |
| * It doesn't match with the information reported into the databook. |
| * At any rate, we need to understand if the CSUM hw computation is ok |
| * and report this info to the upper layers. */ |
| - ret = enh_desc_coe_rdes0(!!(rdes0 & RDES0_IPC_CSUM_ERROR), |
| - !!(rdes0 & RDES0_FRAME_TYPE), |
| - !!(rdes0 & ERDES0_RX_MAC_ADDR)); |
| + if (likely(ret == good_frame)) |
| + ret = enh_desc_coe_rdes0(!!(rdes0 & RDES0_IPC_CSUM_ERROR), |
| + !!(rdes0 & RDES0_FRAME_TYPE), |
| + !!(rdes0 & ERDES0_RX_MAC_ADDR)); |
| |
| if (unlikely(rdes0 & RDES0_DRIBBLING)) |
| x->dribbling_bit++; |
| -- |
| 2.20.1 |
| |