Message ID | 20100904042815.2655.71537.sendpatchset@jupiter1-ltc-lp2.austin.ibm.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
Le vendredi 03 septembre 2010 à 23:28 -0500, Santiago Leon a écrit : > The ibmveth adapter needs locking in the transmit routine to protect > the bounce_buffer but it sets LLTX and forgets to add any of its own > locking. > > Just remove the deprecated LLTX option. Remove the stats lock in the process. > > Signed-off-by: Anton Blanchard <anton@samba.org> > Signed-off-by: Santiago Leon <santil@linux.vnet.ibm.com> > --- > > Index: net-next-2.6/drivers/net/ibmveth.c > =================================================================== > --- net-next-2.6.orig//drivers/net/ibmveth.c 2010-09-03 22:18:39.000000000 -0500 > +++ net-next-2.6/drivers/net/ibmveth.c 2010-09-03 22:18:40.000000000 -0500 > @@ -903,7 +903,6 @@ static netdev_tx_t ibmveth_start_xmit(st > union ibmveth_buf_desc desc; > unsigned long lpar_rc; > unsigned long correlator; > - unsigned long flags; > unsigned int retry_count; > unsigned int tx_dropped = 0; > unsigned int tx_bytes = 0; Why dont you remove these local variables then ? tx_dropped, tx_bytes, tx_packets ? > @@ -965,20 +964,18 @@ static netdev_tx_t ibmveth_start_xmit(st > } else { > tx_packets++; > tx_bytes += skb->len; > - netdev->trans_start = jiffies; /* NETIF_F_LLTX driver :( */ > } > > if (!used_bounce) > dma_unmap_single(&adapter->vdev->dev, data_dma_addr, > skb->len, DMA_TO_DEVICE); > > -out: spin_lock_irqsave(&adapter->stats_lock, flags); > +out: > netdev->stats.tx_dropped += tx_dropped; > netdev->stats.tx_bytes += tx_bytes; > netdev->stats.tx_packets += tx_packets; > adapter->tx_send_failed += tx_send_failed; > adapter->tx_map_failed += tx_map_failed; > - spin_unlock_irqrestore(&adapter->stats_lock, flags); > > dev_kfree_skb(skb); > return NETDEV_TX_OK; > @@ -1290,8 +1287,6 @@ static int __devinit ibmveth_probe(struc > netdev->netdev_ops = &ibmveth_netdev_ops; > netdev->ethtool_ops = &netdev_ethtool_ops; > SET_NETDEV_DEV(netdev, &dev->dev); > - netdev->features |= NETIF_F_LLTX; > - spin_lock_init(&adapter->stats_lock); > > memcpy(netdev->dev_addr, &adapter->mac_addr, netdev->addr_len); > > Index: net-next-2.6/drivers/net/ibmveth.h > =================================================================== > --- net-next-2.6.orig//drivers/net/ibmveth.h 2010-09-03 22:18:39.000000000 -0500 > +++ net-next-2.6/drivers/net/ibmveth.h 2010-09-03 22:18:40.000000000 -0500 > @@ -158,7 +158,6 @@ struct ibmveth_adapter { > u64 rx_no_buffer; > u64 tx_map_failed; > u64 tx_send_failed; > - spinlock_t stats_lock; > }; > > struct ibmveth_buf_desc_fields { > -- -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Index: net-next-2.6/drivers/net/ibmveth.c =================================================================== --- net-next-2.6.orig//drivers/net/ibmveth.c 2010-09-03 22:18:39.000000000 -0500 +++ net-next-2.6/drivers/net/ibmveth.c 2010-09-03 22:18:40.000000000 -0500 @@ -903,7 +903,6 @@ static netdev_tx_t ibmveth_start_xmit(st union ibmveth_buf_desc desc; unsigned long lpar_rc; unsigned long correlator; - unsigned long flags; unsigned int retry_count; unsigned int tx_dropped = 0; unsigned int tx_bytes = 0; @@ -965,20 +964,18 @@ static netdev_tx_t ibmveth_start_xmit(st } else { tx_packets++; tx_bytes += skb->len; - netdev->trans_start = jiffies; /* NETIF_F_LLTX driver :( */ } if (!used_bounce) dma_unmap_single(&adapter->vdev->dev, data_dma_addr, skb->len, DMA_TO_DEVICE); -out: spin_lock_irqsave(&adapter->stats_lock, flags); +out: netdev->stats.tx_dropped += tx_dropped; netdev->stats.tx_bytes += tx_bytes; netdev->stats.tx_packets += tx_packets; adapter->tx_send_failed += tx_send_failed; adapter->tx_map_failed += tx_map_failed; - spin_unlock_irqrestore(&adapter->stats_lock, flags); dev_kfree_skb(skb); return NETDEV_TX_OK; @@ -1290,8 +1287,6 @@ static int __devinit ibmveth_probe(struc netdev->netdev_ops = &ibmveth_netdev_ops; netdev->ethtool_ops = &netdev_ethtool_ops; SET_NETDEV_DEV(netdev, &dev->dev); - netdev->features |= NETIF_F_LLTX; - spin_lock_init(&adapter->stats_lock); memcpy(netdev->dev_addr, &adapter->mac_addr, netdev->addr_len); Index: net-next-2.6/drivers/net/ibmveth.h =================================================================== --- net-next-2.6.orig//drivers/net/ibmveth.h 2010-09-03 22:18:39.000000000 -0500 +++ net-next-2.6/drivers/net/ibmveth.h 2010-09-03 22:18:40.000000000 -0500 @@ -158,7 +158,6 @@ struct ibmveth_adapter { u64 rx_no_buffer; u64 tx_map_failed; u64 tx_send_failed; - spinlock_t stats_lock; }; struct ibmveth_buf_desc_fields {