unsigned int tso_context, vlan_context;
        unsigned int tx_set_ic;
        int start_index = ring->cur;
+       int cur_index = ring->cur;
        int i;
 
        DBGPR("-->xgbe_dev_xmit\n");
        else
                tx_set_ic = 0;
 
-       rdata = XGBE_GET_DESC_DATA(ring, ring->cur);
+       rdata = XGBE_GET_DESC_DATA(ring, cur_index);
        rdesc = rdata->rdesc;
 
        /* Create a context descriptor if this is a TSO packet */
                        ring->tx.cur_vlan_ctag = packet->vlan_ctag;
                }
 
-               ring->cur++;
-               rdata = XGBE_GET_DESC_DATA(ring, ring->cur);
+               cur_index++;
+               rdata = XGBE_GET_DESC_DATA(ring, cur_index);
                rdesc = rdata->rdesc;
        }
 
        XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, CTXT, 0);
 
        /* Set OWN bit if not the first descriptor */
-       if (ring->cur != start_index)
+       if (cur_index != start_index)
                XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, OWN, 1);
 
        if (tso) {
                                  packet->length);
        }
 
-       for (i = ring->cur - start_index + 1; i < packet->rdesc_count; i++) {
-               ring->cur++;
-               rdata = XGBE_GET_DESC_DATA(ring, ring->cur);
+       for (i = cur_index - start_index + 1; i < packet->rdesc_count; i++) {
+               cur_index++;
+               rdata = XGBE_GET_DESC_DATA(ring, cur_index);
                rdesc = rdata->rdesc;
 
                /* Update buffer address */
        /* Make sure ownership is written to the descriptor */
        wmb();
 
-       ring->cur++;
+       ring->cur = cur_index + 1;
        if (!packet->skb->xmit_more ||
            netif_xmit_stopped(netdev_get_tx_queue(pdata->netdev,
                                                   channel->queue_index)))
 
        struct xgbe_channel *channel = container_of(timer,
                                                    struct xgbe_channel,
                                                    tx_timer);
-       struct xgbe_ring *ring = channel->tx_ring;
        struct xgbe_prv_data *pdata = channel->pdata;
        struct napi_struct *napi;
-       unsigned long flags;
 
        DBGPR("-->xgbe_tx_timer\n");
 
        napi = (pdata->per_channel_irq) ? &channel->napi : &pdata->napi;
 
-       spin_lock_irqsave(&ring->lock, flags);
-
        if (napi_schedule_prep(napi)) {
                /* Disable Tx and Rx interrupts */
                if (pdata->per_channel_irq)
 
        channel->tx_timer_active = 0;
 
-       spin_unlock_irqrestore(&ring->lock, flags);
-
        DBGPR("<--xgbe_tx_timer\n");
 
        return HRTIMER_NORESTART;
        struct xgbe_ring *ring;
        struct xgbe_packet_data *packet;
        struct netdev_queue *txq;
-       unsigned long flags;
        int ret;
 
        DBGPR("-->xgbe_xmit: skb->len = %d\n", skb->len);
 
        ret = NETDEV_TX_OK;
 
-       spin_lock_irqsave(&ring->lock, flags);
-
        if (skb->len == 0) {
                netdev_err(netdev, "empty skb received from stack\n");
                dev_kfree_skb_any(skb);
        ret = NETDEV_TX_OK;
 
 tx_netdev_return:
-       spin_unlock_irqrestore(&ring->lock, flags);
-
-       DBGPR("<--xgbe_xmit\n");
-
        return ret;
 }
 
        struct xgbe_ring_desc *rdesc;
        struct net_device *netdev = pdata->netdev;
        struct netdev_queue *txq;
-       unsigned long flags;
        int processed = 0;
        unsigned int tx_packets = 0, tx_bytes = 0;
 
 
        txq = netdev_get_tx_queue(netdev, channel->queue_index);
 
-       spin_lock_irqsave(&ring->lock, flags);
-
        while ((processed < XGBE_TX_DESC_MAX_PROC) &&
               (ring->dirty != ring->cur)) {
                rdata = XGBE_GET_DESC_DATA(ring, ring->dirty);
        }
 
        if (!processed)
-               goto unlock;
+               return 0;
 
        netdev_tx_completed_queue(txq, tx_packets, tx_bytes);
 
 
        DBGPR("<--xgbe_tx_poll: processed=%d\n", processed);
 
-unlock:
-       spin_unlock_irqrestore(&ring->lock, flags);
-
        return processed;
 }