diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2014-03-11 14:20:26 -0700 |
---|---|---|
committer | Ben Hutchings <ben@decadent.org.uk> | 2015-05-09 23:16:40 +0100 |
commit | c2cfd3a7f1ad8e67bdac58436b615b488e411be5 (patch) | |
tree | c8c532ae098474b2285128fcdcb6c5ea1ccc0513 | |
parent | 8fdccc87f563d16f2306bfaf1b82f2d158fe579c (diff) |
gianfar: Carefully free skbs in functions called by netpoll.
commit c9974ad4aeb36003860100221a594f3c0ccc3f78 upstream.
netpoll can call functions in hard irq context that are ordinarily
called in lesser contexts. For those functions use dev_kfree_skb_any
and dev_consume_skb_any so skbs are freed safely from hard irq
context.
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
[bwh: Backported to 3.2: use only dev_kfree_skb() and not dev_consume_skb_any()]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
-rw-r--r-- | drivers/net/ethernet/freescale/gianfar.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c index fb9e7d34bcf2..b167e38ed581 100644 --- a/drivers/net/ethernet/freescale/gianfar.c +++ b/drivers/net/ethernet/freescale/gianfar.c @@ -2092,10 +2092,10 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev) skb_new = skb_realloc_headroom(skb, GMAC_FCB_LEN); if (!skb_new) { dev->stats.tx_errors++; - kfree_skb(skb); + dev_kfree_skb_any(skb); return NETDEV_TX_OK; } - kfree_skb(skb); + dev_kfree_skb_any(skb); skb = skb_new; } |