net: axienet: fix RX ring refill allocation failure handling
authorRobert Hancock <robert.hancock@calian.com>
Sat, 5 Mar 2022 02:24:37 +0000 (20:24 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 8 Apr 2022 12:40:20 +0000 (14:40 +0200)
commitbbd91cdb620ed74e4dcb85c3d2e9585a6b3aa0d5
tree1555bc59ad3281709bd3105cd94f3e3750cff011
parent9ec698984db29d86c4e6cb256ca2810c613da2d2
net: axienet: fix RX ring refill allocation failure handling

[ Upstream commit 7a7d340ba4d9351e4c8847b898a2b996727a922a ]

If a memory allocation error occurred during an attempt to refill a slot
in the RX ring after the packet was received, the hardware tail pointer
would still have been updated to point to or past the slot which remained
marked as previously completed. This would likely result in the DMA engine
raising an error when it eventually tried to use that slot again.

If a slot cannot be refilled, then just stop processing and do not move
the tail pointer past it. On the next attempt, we should skip receiving
the packet from the empty slot and just try to refill it again.

This failure mode has not actually been observed, but was found as part
of other driver updates.

Fixes: 8a3b7a252dca ("drivers/net/ethernet/xilinx: added Xilinx AXI Ethernet driver")
Signed-off-by: Robert Hancock <robert.hancock@calian.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/xilinx/xilinx_axienet_main.c