#define EMAC_DEF_TX_CH                 (0) /* Default 0th channel */
 #define EMAC_DEF_RX_CH                 (0) /* Default 0th channel */
 #define EMAC_DEF_RX_NUM_DESC           (128)
+#define EMAC_DEF_TX_NUM_DESC           (128)
 #define EMAC_DEF_MAX_TX_CH             (1) /* Max TX channels configured */
 #define EMAC_DEF_MAX_RX_CH             (1) /* Max RX channels configured */
 #define EMAC_POLL_WEIGHT               (64) /* Default NAPI poll weight */
        u32 mac_hash2;
        u32 multicast_hash_cnt[EMAC_NUM_MULTICAST_BITS];
        u32 rx_addr_type;
+       atomic_t cur_tx;
        const char *phy_id;
        struct phy_device *phydev;
        spinlock_t lock;
 {
        struct sk_buff          *skb = token;
        struct net_device       *ndev = skb->dev;
+       struct emac_priv        *priv = netdev_priv(ndev);
+
+       atomic_dec(&priv->cur_tx);
 
        if (unlikely(netif_queue_stopped(ndev)))
                netif_start_queue(ndev);
                goto fail_tx;
        }
 
+       if (atomic_inc_return(&priv->cur_tx) >= EMAC_DEF_TX_NUM_DESC)
+               netif_stop_queue(ndev);
+
        return NETDEV_TX_OK;
 
 fail_tx: