From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wi0-f179.google.com ([209.85.212.179]:37822 "EHLO mail-wi0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752970AbbHTQv0 (ORCPT ); Thu, 20 Aug 2015 12:51:26 -0400 Received: by widdq5 with SMTP id dq5so11575576wid.0 for ; Thu, 20 Aug 2015 09:51:25 -0700 (PDT) From: Alexander Aring Subject: [RFCv2 bluetooth-next 02/16] ieee802154: 6lowpan: register packet layer while open Date: Thu, 20 Aug 2015 18:47:31 +0200 Message-Id: <1440089265-23366-3-git-send-email-alex.aring@gmail.com> In-Reply-To: <1440089265-23366-1-git-send-email-alex.aring@gmail.com> References: <1440089265-23366-1-git-send-email-alex.aring@gmail.com> Sender: linux-wpan-owner@vger.kernel.org List-ID: To: linux-wpan@vger.kernel.org Cc: kernel@pengutronix.de, Alexander Aring 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 --- 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