Commit 271d70f4 authored by David S. Miller's avatar David S. Miller

Merge branch 'sunvnet-next'

Sowmini Varadhan says:

====================
sunvnet: bug fixes

This patch series has a coding-style fix and a bug fix.

The coding style fix (patch 1) is the extra indentation flagged by
Ben Hutchings:
  http://marc.info/?l=linux-netdev&m=141529243409594&w=2

The bugfix (patch 2) is the following:
when vnet_event_napi() is  called as part of napi_resume
(i.e., continuation of a previous NAPI read that was truncated
due to budget constraints), and then finds no more packets to read,
the code was trying to avoid an additional trip through ldc_rx
as an optimization. However, when this corner case happens, we would
need to reset a number of dring state bits such as rcv_nxt carefully,
which quickly becomes complex and hacky.  The cleaner solution
is to just roll back to vnet_poll, re-enable interrupts and set up
dring state as was done in the pre-NAPI version of the driver.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 4e865a5a 8c4ee3e7
...@@ -627,7 +627,7 @@ static void maybe_tx_wakeup(struct vnet_port *port) ...@@ -627,7 +627,7 @@ static void maybe_tx_wakeup(struct vnet_port *port)
struct vio_dring_state *dr; struct vio_dring_state *dr;
dr = &port->vio.drings[VIO_DRIVER_TX_RING]; dr = &port->vio.drings[VIO_DRIVER_TX_RING];
netif_tx_wake_queue(txq); netif_tx_wake_queue(txq);
} }
__netif_tx_unlock(txq); __netif_tx_unlock(txq);
} }
...@@ -691,7 +691,6 @@ static int vnet_event_napi(struct vnet_port *port, int budget) ...@@ -691,7 +691,6 @@ static int vnet_event_napi(struct vnet_port *port, int budget)
pkt->end_idx = -1; pkt->end_idx = -1;
goto napi_resume; goto napi_resume;
} }
ldc_read:
err = ldc_read(vio->lp, &msgbuf, sizeof(msgbuf)); err = ldc_read(vio->lp, &msgbuf, sizeof(msgbuf));
if (unlikely(err < 0)) { if (unlikely(err < 0)) {
if (err == -ECONNRESET) if (err == -ECONNRESET)
...@@ -722,8 +721,8 @@ static int vnet_event_napi(struct vnet_port *port, int budget) ...@@ -722,8 +721,8 @@ static int vnet_event_napi(struct vnet_port *port, int budget)
err = vnet_rx(port, &msgbuf, &npkts, budget); err = vnet_rx(port, &msgbuf, &npkts, budget);
if (npkts >= budget) if (npkts >= budget)
break; break;
if (npkts == 0 && err != -ECONNRESET) if (npkts == 0)
goto ldc_read; break;
} else if (msgbuf.tag.stype == VIO_SUBTYPE_ACK) { } else if (msgbuf.tag.stype == VIO_SUBTYPE_ACK) {
err = vnet_ack(port, &msgbuf); err = vnet_ack(port, &msgbuf);
if (err > 0) if (err > 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment