Le samedi 05 juin 2010 à 18:14 +0800, xiaohui.xin@xxxxxxxxx a écrit : > From: Xin Xiaohui <xiaohui.xin@xxxxxxxxx> > > Signed-off-by: Xin Xiaohui <xiaohui.xin@xxxxxxxxx> > Signed-off-by: Zhao Yu <yzhao81new@xxxxxxxxx> > Reviewed-by: Jeff Dike <jdike@xxxxxxxxxxxxxxx> > --- > include/linux/netdevice.h | 3 +++ > net/core/dev.c | 28 ++++++++++++++++++++++++++++ > 2 files changed, 31 insertions(+), 0 deletions(-) > > diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h > index bae725c..efb575a 100644 > --- a/include/linux/netdevice.h > +++ b/include/linux/netdevice.h > @@ -1592,6 +1592,9 @@ extern gro_result_t napi_frags_finish(struct napi_struct *napi, > gro_result_t ret); > extern struct sk_buff * napi_frags_skb(struct napi_struct *napi); > extern gro_result_t napi_gro_frags(struct napi_struct *napi); > +extern int netdev_mp_port_attach(struct net_device *dev, > + struct mpassthru_port *port); > +extern void netdev_mp_port_detach(struct net_device *dev); > > static inline void napi_free_frags(struct napi_struct *napi) > { > diff --git a/net/core/dev.c b/net/core/dev.c > index f769098..ecbb6b1 100644 > --- a/net/core/dev.c > +++ b/net/core/dev.c > @@ -2469,6 +2469,34 @@ void netif_nit_deliver(struct sk_buff *skb) > rcu_read_unlock(); > } > > +/* Export two functions to assign/de-assign mp_port pointer > + * to a net device. > + */ > + > +int netdev_mp_port_attach(struct net_device *dev, > + struct mpassthru_port *port) > +{ > + /* locked by mp_mutex */ > + if (rcu_dereference(dev->mp_port)) > + return -EBUSY; > + Please... this is bogus... Try with following config settings : CONFIG_PROVE_LOCKING=y CONFIG_PROVE_RCU=y CONFIG_PROVE_RCU_REPEATEDLY=y > + rcu_assign_pointer(dev->mp_port, port); > + > + return 0; > +} > +EXPORT_SYMBOL(netdev_mp_port_attach); > + > +void netdev_mp_port_detach(struct net_device *dev) > +{ > + /* locked by mp_mutex */ > + if (!rcu_dereference(dev->mp_port)) > + return; same problem here > + > + rcu_assign_pointer(dev->mp_port, NULL); > + synchronize_rcu(); > +} > +EXPORT_SYMBOL(netdev_mp_port_detach); > + > /** > * netif_receive_skb - process receive buffer from network > * @skb: buffer to process -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html