pci_unmap_single(priv->pdev, le32_to_cpu(descptr->buf),
                        skb_ptr->len, PCI_DMA_TODEVICE);
                /* Free buffer */
-               dev_kfree_skb_irq(skb_ptr);
+               dev_kfree_skb(skb_ptr);
                descptr->skb_ptr = NULL;
                /* To next descriptor */
                descptr = descptr->vndescp;
        void __iomem *ioaddr = priv->base;
        int work_done;
 
+       r6040_tx(dev);
+
        work_done = r6040_rx(dev, budget);
 
        if (work_done < budget) {
                napi_complete(napi);
-               /* Enable RX interrupt */
-               iowrite16(ioread16(ioaddr + MIER) | RX_INTS, ioaddr + MIER);
+               /* Enable RX/TX interrupt */
+               iowrite16(ioread16(ioaddr + MIER) | RX_INTS | TX_INTS,
+                         ioaddr + MIER);
        }
        return work_done;
 }
        }
 
        /* RX interrupt request */
-       if (status & RX_INTS) {
+       if (status & (RX_INTS | TX_INTS)) {
                if (status & RX_NO_DESC) {
                        /* RX descriptor unavailable */
                        dev->stats.rx_dropped++;
 
                if (likely(napi_schedule_prep(&lp->napi))) {
                        /* Mask off RX interrupt */
-                       misr &= ~RX_INTS;
+                       misr &= ~(RX_INTS | TX_INTS);
                        __napi_schedule(&lp->napi);
                }
        }
 
-       /* TX interrupt request */
-       if (status & TX_INTS)
-               r6040_tx(dev);
-
        /* Restore RDC MAC interrupt */
        iowrite16(misr, ioaddr + MIER);