mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
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: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
271d70f4b7
1 changed files with 3 additions and 4 deletions
|
@ -627,7 +627,7 @@ static void maybe_tx_wakeup(struct vnet_port *port)
|
|||
struct vio_dring_state *dr;
|
||||
|
||||
dr = &port->vio.drings[VIO_DRIVER_TX_RING];
|
||||
netif_tx_wake_queue(txq);
|
||||
netif_tx_wake_queue(txq);
|
||||
}
|
||||
__netif_tx_unlock(txq);
|
||||
}
|
||||
|
@ -691,7 +691,6 @@ static int vnet_event_napi(struct vnet_port *port, int budget)
|
|||
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 @@ static int vnet_event_napi(struct vnet_port *port, int budget)
|
|||
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)
|
||||
|
|
Loading…
Reference in a new issue