lkml.org 
[lkml]   [2012]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH v5 2/2] Ethernet driver for the WIZnet W5100 chip
From
Date
Le vendredi 30 mars 2012 à 13:00 +0600, Mike Sinkovsky a écrit :
> Tested and used in production with Blackfin BF531 embedded processor.
>
> Signed-off-by: Mike Sinkovsky <msink@permonline.ru>
> ---

> +
> +static int w5100_start_tx(struct sk_buff *skb, struct net_device *ndev)
> +{
> + struct w5100_priv *priv = netdev_priv(ndev);
> + u16 offset;
> +
> + if (w5100_read16(priv, W5100_S0_TX_FSR) < skb->len) {

There is a race here.

Interrupt came come right here before you set the stop_queue()


> + netif_stop_queue(ndev);

So Here I suggest adding a test again

if (w5100_read16(priv, W5100_S0_TX_FSR) >= skb->len)
netif_wake_queue(ndev);
else
return NETDEV_TX_BUSY;

> + return NETDEV_TX_BUSY;
> + }
> +
> + offset = w5100_read16(priv, W5100_S0_TX_WR);
> + w5100_writebuf(priv, offset, skb->data, skb->len);
> + w5100_write16(priv, W5100_S0_TX_WR, offset + skb->len);
> + w5100_command(priv, S0_CR_SEND);
> + ndev->stats.tx_bytes += skb->len;
> + ndev->stats.tx_packets++;
> + dev_kfree_skb(skb);
> +
> + return NETDEV_TX_OK;
> +}
> +



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2012-03-30 11:27    [W:0.237 / U:0.484 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site