if (gelic_card_kick_txdma(card, descr)) {
                /*
                 * kick failed.
-                * release descriptors which were just prepared
+                * release descriptor which was just prepared
                 */
                netdev->stats.tx_dropped++;
+               /* don't trigger BUG_ON() in gelic_descr_release_tx */
+               descr->data_status = cpu_to_be32(GELIC_DESCR_TX_TAIL);
                gelic_descr_release_tx(card, descr);
-               gelic_descr_release_tx(card, descr->next);
-               card->tx_chain.tail = descr->next->next;
+               /* reset head */
+               card->tx_chain.head = descr;
+               /* reset hw termination */
+               descr->prev->next_descr_addr = 0;
                dev_info(ctodev(card), "%s: kick failure\n", __func__);
        }