diff options
Diffstat (limited to 'drivers/net/ethernet/sun/sunvnet.c')
-rw-r--r-- | drivers/net/ethernet/sun/sunvnet.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/net/ethernet/sun/sunvnet.c b/drivers/net/ethernet/sun/sunvnet.c index 5c5fb59adf76..deb395a82e50 100644 --- a/drivers/net/ethernet/sun/sunvnet.c +++ b/drivers/net/ethernet/sun/sunvnet.c | |||
@@ -559,15 +559,17 @@ static int vnet_ack(struct vnet_port *port, void *msgbuf) | |||
559 | return 0; | 559 | return 0; |
560 | 560 | ||
561 | end = pkt->end_idx; | 561 | end = pkt->end_idx; |
562 | if (unlikely(!idx_is_pending(dr, end))) | ||
563 | return 0; | ||
564 | |||
565 | vp = port->vp; | 562 | vp = port->vp; |
566 | dev = vp->dev; | 563 | dev = vp->dev; |
564 | netif_tx_lock(dev); | ||
565 | if (unlikely(!idx_is_pending(dr, end))) { | ||
566 | netif_tx_unlock(dev); | ||
567 | return 0; | ||
568 | } | ||
569 | |||
567 | /* sync for race conditions with vnet_start_xmit() and tell xmit it | 570 | /* sync for race conditions with vnet_start_xmit() and tell xmit it |
568 | * is time to send a trigger. | 571 | * is time to send a trigger. |
569 | */ | 572 | */ |
570 | netif_tx_lock(dev); | ||
571 | dr->cons = next_idx(end, dr); | 573 | dr->cons = next_idx(end, dr); |
572 | desc = vio_dring_entry(dr, dr->cons); | 574 | desc = vio_dring_entry(dr, dr->cons); |
573 | if (desc->hdr.state == VIO_DESC_READY && port->start_cons) { | 575 | if (desc->hdr.state == VIO_DESC_READY && port->start_cons) { |