sunvnet: Return from vnet_napi_event() if no packets to read
Subsystems (2)
PATCH 2/2 sunvnet: Return from vnet_napi_event() if no packets to read
vnet_event_napi() may be called as part of the NAPI ->poll, to resume reading descriptor rings. When no data is available, descriptor ring state (e.g., rcv_nxt) needs to be reset carefully to stay in lock-step with ldc_read(). In the interest of simplicity, the best way to do this is to return from vnet_event_napi() when there are no more packets to read. The next trip through ldc_rx will correctly set up the dring state.
Signed-off-by Sowmini Varadhan <[email protected]>
Tested-by David Stevens <[email protected]>
--- drivers/net/ethernet/sun/sunvnet.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/net/ethernet/sun/sunvnet.c +2 -3
@@ -691,7 +691,6 @@ ldc_ctrl: pkt->end_idx =-1 ; goto napi_resume; } -ldc_read: err =ldc_read (vio->lp, &msgbuf,sizeof (msgbuf));if (unlikely (err <0 )) {if (err == -ECONNRESET )
@@ -722,8 +721,8 @@ napi_resume: err =vnet_rx (port, &msgbuf, &npkts, budget);if (npkts >= budget)break ; -if (npkts ==0 && err != -ECONNRESET ) - goto ldc_read; +if (npkts ==0 ) +break ; }else if (msgbuf.tag.stype ==VIO_SUBTYPE_ACK ) { err =vnet_ack (port, &msgbuf);if (err >0 )
Signature · 1 line
1.8.4.2