On Thu, Nov 06, 2025 at 12:48:37PM +0300, Ilya Repko wrote: > This reverts commit 3a6d374b754b4b345195ff6846eeaffedc96a7c5. > > During axienet_eth_rx_notify(), s->rxpos is modified to indicate how much > data was pushed to AXI DMA. eth_rx() would then return this value. > If at 0, network subsystem would consider packet reception as failed > and put the packet in a queue for later. > > Before we attempt to push packet data to AXI DMA, the packet is stored > in s->rxmem buffer. If an attempt to push data fails, we will reattempt > to deliver it from s->rxmem buffer once s2mm stream gets a new descriptor. > s->rxmem would not be overwritten by a subsequent eth_rx() call, because > eth_can_rx() protects it in case it has any data at all. Leaving the packet > in a NetQueue though effectively duplicates it. > > Therefore, eth_rx() must indicate successful packet reception in case > data push to AXI DMA fails.
Hi, Adding Fea since we're reverting his patch, he may have some insights. What you describe sounds reasonable but I think we've seen issues with both your version (the original one) and Fea's version. What machine are you running? Are you running Linux guests? Cheers, Edgar > > Signed-off-by: Ilya Repko <[email protected]> > --- > hw/net/xilinx_axienet.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/hw/net/xilinx_axienet.c b/hw/net/xilinx_axienet.c > index 31e7708082..101b3f260a 100644 > --- a/hw/net/xilinx_axienet.c > +++ b/hw/net/xilinx_axienet.c > @@ -867,7 +867,7 @@ static ssize_t eth_rx(NetClientState *nc, const uint8_t > *buf, size_t size) > axienet_eth_rx_notify(s); > > enet_update_irq(s); > - return s->rxpos; > + return size; > } > > static size_t > -- > 2.51.1 >
