From patchwork Mon Nov 1 11:52:04 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luciano Coelho X-Patchwork-Id: 294352 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id oA1CQIJv000544 for ; Mon, 1 Nov 2010 12:26:18 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757502Ab0KAM0Q (ORCPT ); Mon, 1 Nov 2010 08:26:16 -0400 Received: from mgw-da01.ext.nokia.com ([147.243.128.24]:26098 "EHLO mgw-da01.nokia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757387Ab0KAMZ7 (ORCPT ); Mon, 1 Nov 2010 08:25:59 -0400 Received: from localhost.localdomain (chilepepper.research.nokia.com [172.21.50.167]) by mgw-da01.nokia.com (Switch-3.4.3/Switch-3.4.3) with ESMTP id oA1BqGcF020116 for ; Mon, 1 Nov 2010 13:52:19 +0200 From: Luciano Coelho To: linux-wireless@vger.kernel.org Subject: [RFC 03/15] nl80211: alloc and free the periodic_req data Date: Mon, 1 Nov 2010 13:52:04 +0200 Message-Id: <1288612336-2830-4-git-send-email-luciano.coelho@nokia.com> X-Mailer: git-send-email 1.7.0.4 In-Reply-To: <1288612336-2830-1-git-send-email-luciano.coelho@nokia.com> References: <1288612336-2830-1-git-send-email-luciano.coelho@nokia.com> X-Nokia-AV: Clean Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Mon, 01 Nov 2010 12:26:18 +0000 (UTC) diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index a2293ea..0884464 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -3001,6 +3001,7 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info) static int nl80211_start_periodic(struct sk_buff *skb, struct genl_info *info) { + struct cfg80211_periodic_request *request; struct cfg80211_registered_device *rdev; struct net_device *dev; int err; @@ -3018,6 +3019,22 @@ static int nl80211_start_periodic(struct sk_buff *skb, goto out; } + if (rdev->periodic_req) { + err = -EINPROGRESS; + goto out; + } + + request = kzalloc(sizeof(*request), GFP_KERNEL); + if (!request) { + err = -ENOMEM; + goto out; + } + + request->dev = dev; + request->wiphy = &rdev->wiphy; + + rdev->periodic_req = request; + /* add actual calls here */ if (!err) { @@ -3055,7 +3072,9 @@ static int nl80211_stop_periodic(struct sk_buff *skb, goto out; } - /* add actual calls here */ + if (rdev->periodic_req) { + /* add actual calls here */ + } if (!err) { nl80211_send_periodic(rdev, dev, @@ -3063,6 +3082,13 @@ static int nl80211_stop_periodic(struct sk_buff *skb, dev_hold(dev); } + /* + * FIXME: Can this stay here? How will the auto-complete and other + * cleanup cases work? + */ + kfree(rdev->periodic_req); + rdev->periodic_req = NULL; + out: cfg80211_unlock_rdev(rdev); dev_put(dev);