Message ID | 1349342319.16011.30.camel@edumazet-glaptop |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
Thu, Oct 04, 2012 at 11:18:39AM CEST, eric.dumazet@gmail.com wrote: >From: Eric Dumazet <edumazet@google.com> > >If a qdisc is installed on a team device, its possible to get >a lockdep splat under stress, because nested dev_queue_xmit() can >lock busylock a second time (on a different device, so its a false >positive) > >Avoid this problem using a distinct lock_class_key for team >devices. > >Signed-off-by: Eric Dumazet <edumazet@google.com> >Cc: Jiri Pirko <jpirko@redhat.com> >--- > drivers/net/team/team.c | 2 ++ > 1 file changed, 2 insertions(+) > >diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c >index 5c7547c..d44cca3 100644 >--- a/drivers/net/team/team.c >+++ b/drivers/net/team/team.c >@@ -1315,6 +1315,7 @@ static const struct team_option team_options[] = { > > static struct lock_class_key team_netdev_xmit_lock_key; > static struct lock_class_key team_netdev_addr_lock_key; >+static struct lock_class_key team_tx_busylock_key; > > static void team_set_lockdep_class_one(struct net_device *dev, > struct netdev_queue *txq, >@@ -1327,6 +1328,7 @@ static void team_set_lockdep_class(struct net_device *dev) > { > lockdep_set_class(&dev->addr_list_lock, &team_netdev_addr_lock_key); > netdev_for_each_tx_queue(dev, team_set_lockdep_class_one, NULL); >+ dev->qdisc_tx_busylock = &team_tx_busylock_key; > } > > static int team_init(struct net_device *dev) > > >-- >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 Thanks Eric. Acked-by: Jiri Pirko <jiri@resnulli.us> -- 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
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Thu, 04 Oct 2012 11:18:39 +0200 > From: Eric Dumazet <edumazet@google.com> > > If a qdisc is installed on a team device, its possible to get > a lockdep splat under stress, because nested dev_queue_xmit() can > lock busylock a second time (on a different device, so its a false > positive) > > Avoid this problem using a distinct lock_class_key for team > devices. > > Signed-off-by: Eric Dumazet <edumazet@google.com> > Cc: Jiri Pirko <jpirko@redhat.com> Applied. -- 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/team/team.c b/drivers/net/team/team.c index 5c7547c..d44cca3 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c @@ -1315,6 +1315,7 @@ static const struct team_option team_options[] = { static struct lock_class_key team_netdev_xmit_lock_key; static struct lock_class_key team_netdev_addr_lock_key; +static struct lock_class_key team_tx_busylock_key; static void team_set_lockdep_class_one(struct net_device *dev, struct netdev_queue *txq, @@ -1327,6 +1328,7 @@ static void team_set_lockdep_class(struct net_device *dev) { lockdep_set_class(&dev->addr_list_lock, &team_netdev_addr_lock_key); netdev_for_each_tx_queue(dev, team_set_lockdep_class_one, NULL); + dev->qdisc_tx_busylock = &team_tx_busylock_key; } static int team_init(struct net_device *dev)