{
        struct Qdisc *q = dev->qdisc;
        struct sk_buff *skb;
-       unsigned lockless;
        int ret;
 
        /* Dequeue packet */
        if (unlikely((skb = dev_dequeue_skb(dev, q)) == NULL))
                return 0;
 
-       /*
-        * When the driver has LLTX set, it does its own locking in
-        * start_xmit. These checks are worth it because even uncongested
-        * locks can be quite expensive. The driver can do a trylock, as
-        * is being done here; in case of lock contention it should return
-        * NETDEV_TX_LOCKED and the packet will be requeued.
-        */
-       lockless = (dev->features & NETIF_F_LLTX);
-
-       if (!lockless && !netif_tx_trylock(dev)) {
-               /* Another CPU grabbed the driver tx lock */
-               return handle_dev_cpu_collision(skb, dev, q);
-       }
 
        /* And release queue */
        spin_unlock(&dev->queue_lock);
 
+       HARD_TX_LOCK(dev, smp_processor_id());
        ret = dev_hard_start_xmit(skb, dev);
-
-       if (!lockless)
-               netif_tx_unlock(dev);
+       HARD_TX_UNLOCK(dev);
 
        spin_lock(&dev->queue_lock);
        q = dev->qdisc;