Message ID | 87fvmobfnr.fsf_-_@xmission.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On Tue, 2014-03-11 at 14:15 -0700, Eric W. Biederman wrote: > Replace dev_kfree_skb with dev_kfree_skb_any in functions that can > be called in hard irq and other contexts. > > Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> > --- > drivers/net/ethernet/realtek/8139too.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/realtek/8139too.c b/drivers/net/ethernet/realtek/8139too.c > index da5972eefdd2..8cb2f357026e 100644 > --- a/drivers/net/ethernet/realtek/8139too.c > +++ b/drivers/net/ethernet/realtek/8139too.c > @@ -1717,9 +1717,9 @@ static netdev_tx_t rtl8139_start_xmit (struct sk_buff *skb, > if (len < ETH_ZLEN) > memset(tp->tx_buf[entry], 0, ETH_ZLEN); > skb_copy_and_csum_dev(skb, tp->tx_buf[entry]); > - dev_kfree_skb(skb); > + dev_kfree_skb_any(skb); > } else { > - dev_kfree_skb(skb); > + dev_kfree_skb_any(skb); > dev->stats.tx_dropped++; > return NETDEV_TX_OK; > } Same u64_stats_fetch_begin_bh() problem for this driver to fetch TX stats. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Eric Dumazet <eric.dumazet@gmail.com> : [...] > Same u64_stats_fetch_begin_bh() problem for this driver to fetch TX > stats. Same problem for any NAPI context Tx completing driver that claims netpoll support. For instance: drivers/net/ethernet/emulex/benet drivers/net/ethernet/intel/i40e drivers/net/ethernet/intel/igb drivers/net/ethernet/intel/ixgbe drivers/net/ethernet/marvell/sky2.c drivers/net/ethernet/neterion/vxge ? Similar problem for the drivers below. They update Tx stats in start_xmit and use u64_.*_bh: drivers/net/ethernet/tile/tilepro.c drivers/net/team/team.c drivers/net/virtio_net.c
On Wed, 2014-03-12 at 22:24 +0100, Francois Romieu wrote: > Eric Dumazet <eric.dumazet@gmail.com> : > [...] > > Same u64_stats_fetch_begin_bh() problem for this driver to fetch TX > > stats. > > Same problem for any NAPI context Tx completing driver that claims > netpoll support. For instance: > drivers/net/ethernet/emulex/benet > drivers/net/ethernet/intel/i40e > drivers/net/ethernet/intel/igb > drivers/net/ethernet/intel/ixgbe > drivers/net/ethernet/marvell/sky2.c > drivers/net/ethernet/neterion/vxge ? > > Similar problem for the drivers below. They update Tx stats in start_xmit > and use u64_.*_bh: > drivers/net/ethernet/tile/tilepro.c > drivers/net/team/team.c > drivers/net/virtio_net.c > Yep, note that this issue is not caused by Eric patches, we need to take care of this by providing u64_stats_fetch_{begin|retry}_irq() regardless of how skb are freed. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Eric Dumazet <eric.dumazet@gmail.com> writes: > On Wed, 2014-03-12 at 22:24 +0100, Francois Romieu wrote: >> Eric Dumazet <eric.dumazet@gmail.com> : >> [...] >> > Same u64_stats_fetch_begin_bh() problem for this driver to fetch TX >> > stats. >> >> Same problem for any NAPI context Tx completing driver that claims >> netpoll support. For instance: >> drivers/net/ethernet/emulex/benet >> drivers/net/ethernet/intel/i40e >> drivers/net/ethernet/intel/igb >> drivers/net/ethernet/intel/ixgbe >> drivers/net/ethernet/marvell/sky2.c >> drivers/net/ethernet/neterion/vxge ? >> >> Similar problem for the drivers below. They update Tx stats in start_xmit >> and use u64_.*_bh: >> drivers/net/ethernet/tile/tilepro.c >> drivers/net/team/team.c >> drivers/net/virtio_net.c >> > > Yep, note that this issue is not caused by Eric patches, we need to take > care of this by providing u64_stats_fetch_{begin|retry}_irq() regardless > of how skb are freed. By my read of the code this is actually only a problem on 32bit uniprocessor, and at worst it scrambles the reported nuumbers if we happen to have a printk in irq context while we are fetching the stats. Given the rest of the problems that I am fixing can corrupt things, and can happen on any platform I am going to ignore this problem for now. Eric -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/ethernet/realtek/8139too.c b/drivers/net/ethernet/realtek/8139too.c index da5972eefdd2..8cb2f357026e 100644 --- a/drivers/net/ethernet/realtek/8139too.c +++ b/drivers/net/ethernet/realtek/8139too.c @@ -1717,9 +1717,9 @@ static netdev_tx_t rtl8139_start_xmit (struct sk_buff *skb, if (len < ETH_ZLEN) memset(tp->tx_buf[entry], 0, ETH_ZLEN); skb_copy_and_csum_dev(skb, tp->tx_buf[entry]); - dev_kfree_skb(skb); + dev_kfree_skb_any(skb); } else { - dev_kfree_skb(skb); + dev_kfree_skb_any(skb); dev->stats.tx_dropped++; return NETDEV_TX_OK; }
Replace dev_kfree_skb with dev_kfree_skb_any in functions that can be called in hard irq and other contexts. Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> --- drivers/net/ethernet/realtek/8139too.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)