struct mii_bus *mdiobus;
        struct spi_device *spi;
        struct mutex spi_ctrl_lock; /* Protects spi control transfer */
+       spinlock_t tx_skb_lock; /* Protects tx skb handling */
        void *spi_ctrl_tx_buf;
        void *spi_ctrl_rx_buf;
        void *spi_data_tx_buf;
        for (used_tx_credits = 0; used_tx_credits < tc6->tx_credits;
             used_tx_credits++) {
                if (!tc6->ongoing_tx_skb) {
+                       spin_lock_bh(&tc6->tx_skb_lock);
                        tc6->ongoing_tx_skb = tc6->waiting_tx_skb;
                        tc6->waiting_tx_skb = NULL;
+                       spin_unlock_bh(&tc6->tx_skb_lock);
                }
                if (!tc6->ongoing_tx_skb)
                        break;
                return NETDEV_TX_OK;
        }
 
+       spin_lock_bh(&tc6->tx_skb_lock);
        tc6->waiting_tx_skb = skb;
+       spin_unlock_bh(&tc6->tx_skb_lock);
 
        /* Wake spi kthread to perform spi transfer */
        wake_up_interruptible(&tc6->spi_wq);
        tc6->netdev = netdev;
        SET_NETDEV_DEV(netdev, &spi->dev);
        mutex_init(&tc6->spi_ctrl_lock);
+       spin_lock_init(&tc6->tx_skb_lock);
 
        /* Set the SPI controller to pump at realtime priority */
        tc6->spi->rt = true;