diff options
-rw-r--r-- | drivers/net/ethernet/freescale/fec_main.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index d48e16da198a..85841fb1dfda 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -323,14 +323,11 @@ static int fec_enet_get_bd_index(struct bufdesc *base, struct bufdesc *bdp, return ((const char *)bdp - (const char *)base) / fep->bufdesc_size; } -static int fec_enet_get_free_txdesc_num(struct fec_enet_private *fep) +static unsigned int fec_enet_get_free_txdesc_num(struct fec_enet_private *fep) { - int entries; - - entries = ((const char *)fep->dirty_tx - - (const char *)fep->cur_tx) / fep->bufdesc_size - 1; - - return entries > 0 ? entries : entries + fep->tx_ring_size; + int num = ((const char *)fep->dirty_tx - + (const char *)fep->cur_tx) / fep->bufdesc_size; + return num < 0 ? num + fep->tx_ring_size : num; } static void *swap_buffer(void *bufaddr, int len) @@ -808,7 +805,7 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *ndev) if (ret) return ret; - if (fec_enet_get_free_txdesc_num(fep) <= fep->tx_stop_threshold) + if (fec_enet_get_free_txdesc_num(fep) < fep->tx_stop_threshold) netif_stop_queue(ndev); return NETDEV_TX_OK; |