Hey Sven, it works in my QEMU machines (and I could reproduce the bug report from 162).
Acked-by: Simon Wunderlich <s...@hrz.tu-chemnitz.de> (provided you add some sane commit message. ;] ) Cheers, Simon On Sun, Aug 19, 2012 at 09:29:53AM +0200, Sven Eckelmann wrote: > [text will be added after I am awake... maybe] > > [Should be fix the problem found in bug 162... formerly known as 161. code > stolen from macvlan... this is just a reimplementation of a solution proposed > by Simon Wunderlich] > > Reported-by: Linus Lüssing <linus.luess...@web.de> > Signed-off-by: Sven Eckelmann <s...@narfation.org> > --- > soft-interface.c | 29 +++++++++++++++++++++++++++++ > 1 file changed, 29 insertions(+) > > diff --git a/soft-interface.c b/soft-interface.c > index 1aee7db..588c6f6 100644 > --- a/soft-interface.c > +++ b/soft-interface.c > @@ -344,7 +344,36 @@ out: > return; > } > > +/* > + * batman-adv network devices have devices nesting below it and are a special > + * "super class" of normal network devices; split their locks off into a > + * separate class since they always nest. > + */ > +static struct lock_class_key batadv_netdev_xmit_lock_key; > +static struct lock_class_key batadv_netdev_addr_lock_key; > + > +static void batadv_set_lockdep_class_one(struct net_device *dev, > + struct netdev_queue *txq, > + void *_unused) > +{ > + lockdep_set_class(&txq->_xmit_lock, &batadv_netdev_xmit_lock_key); > +} > + > +static void batadv_set_lockdep_class(struct net_device *dev) > +{ > + lockdep_set_class(&dev->addr_list_lock, &batadv_netdev_addr_lock_key); > + netdev_for_each_tx_queue(dev, batadv_set_lockdep_class_one, NULL); > +} > + > +static int batadv_softif_init(struct net_device *dev) > +{ > + batadv_set_lockdep_class(dev); > + > + return 0; > +} > + > static const struct net_device_ops batadv_netdev_ops = { > + .ndo_init = batadv_softif_init, > .ndo_open = batadv_interface_open, > .ndo_stop = batadv_interface_release, > .ndo_get_stats = batadv_interface_stats, > -- > 1.7.10.4 > >
signature.asc
Description: Digital signature