This patch moves the open count handling while doing open of a lowpan interface. We need the packet handler register at first when one lowpan interface is up. Signed-off-by: Alexander Aring <alex.aring@xxxxxxxxx> --- net/ieee802154/6lowpan/core.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/net/ieee802154/6lowpan/core.c b/net/ieee802154/6lowpan/core.c index 3cc76f0..8e9da1d 100644 --- a/net/ieee802154/6lowpan/core.c +++ b/net/ieee802154/6lowpan/core.c @@ -76,9 +76,27 @@ static int lowpan_dev_init(struct net_device *ldev) return 0; } +static int lowpan_open(struct net_device *dev) +{ + if (!open_count) + lowpan_rx_init(); + open_count++; + return 0; +} + +static int lowpan_stop(struct net_device *dev) +{ + open_count--; + if (!open_count) + lowpan_rx_exit(); + return 0; +} + static const struct net_device_ops lowpan_netdev_ops = { .ndo_init = lowpan_dev_init, .ndo_start_xmit = lowpan_xmit, + .ndo_open = lowpan_open, + .ndo_stop = lowpan_stop, }; static void lowpan_setup(struct net_device *ldev) @@ -149,11 +167,6 @@ static int lowpan_newlink(struct net *src_net, struct net_device *ldev, } wdev->ieee802154_ptr->lowpan_dev = ldev; - if (!open_count) - lowpan_rx_init(); - - open_count++; - return 0; } @@ -163,11 +176,6 @@ static void lowpan_dellink(struct net_device *ldev, struct list_head *head) ASSERT_RTNL(); - open_count--; - - if (!open_count) - lowpan_rx_exit(); - wdev->ieee802154_ptr->lowpan_dev = NULL; unregister_netdevice(ldev); dev_put(wdev); -- 2.5.0 -- To unsubscribe from this list: send the line "unsubscribe linux-wpan" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html