From patchwork Sat Jun 14 20:42:16 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mihir Shete X-Patchwork-Id: 4353301 Return-Path: X-Original-To: patchwork-linux-wireless@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id E3603BEEAA for ; Sat, 14 Jun 2014 20:44:02 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 1DAF02021A for ; Sat, 14 Jun 2014 20:44:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D91E320211 for ; Sat, 14 Jun 2014 20:44:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752154AbaFNUmt (ORCPT ); Sat, 14 Jun 2014 16:42:49 -0400 Received: from mail-pa0-f49.google.com ([209.85.220.49]:45827 "EHLO mail-pa0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751922AbaFNUms (ORCPT ); Sat, 14 Jun 2014 16:42:48 -0400 Received: by mail-pa0-f49.google.com with SMTP id lj1so3198364pab.22 for ; Sat, 14 Jun 2014 13:42:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=hA3nHAGBaHZZeG6rz1MkOPyII2g8Sha4WFRtbsnDsgA=; b=pLYkZkgmWM7zdhGi5+hwJQ7Eolj0mFBXKylpYeNiSqtWANkYnjNf4SQ4DIgKNiH7jy X3S4QesWFbXlYId0BrQqjriFfJn0J6VdH3uWJGRG555IgI18GC/qMKo8NiYtBNjWkqEO 3e0CvD8hk2xLtUQcxbyNKzpFu8+uGtn4hh4HKrKtmWIQ8U4Z32ZNtqOip2lKoidNcle8 pDsbugJ7FT62bETILubIN286enWMeEJNH9ENQS+1w4jfeDt7k75YsqCNAVfBD4Di03Ye sq3VaqZQTU6j9XyuBlxP0IaDBZIbdoC50fNzIBhh8k9FGYRJT8TB82i9wcOFl9NW6F6Q tJZA== X-Received: by 10.68.164.67 with SMTP id yo3mr13037234pbb.104.1402778568153; Sat, 14 Jun 2014 13:42:48 -0700 (PDT) Received: from smihir-linux.ap.qualcomm.com ([202.46.23.62]) by mx.google.com with ESMTPSA id fe2sm10332105pbc.68.2014.06.14.13.42.44 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Sat, 14 Jun 2014 13:42:46 -0700 (PDT) From: mihirsht@gmail.com To: linux-wireless@vger.kernel.org, johannes@sipsolutions.net, mcgrof@do-not-panic.com Cc: Mihir Shete Subject: [PATCH] cfg80211: unblock user hint when cfg80211_regdom is intersected Date: Sun, 15 Jun 2014 02:12:16 +0530 Message-Id: <1402778536-31305-1-git-send-email-mihirsht@gmail.com> X-Mailer: git-send-email 1.8.2.1 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Mihir Shete User hints are always ignored if cfg80211_regdom is intersected. Add checks to make sure that user hints are processed if the previous hints are done processing. Signed-off-by: Mihir Shete --- net/wireless/reg.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/net/wireless/reg.c b/net/wireless/reg.c index b4973bc..2c4e2ba 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c @@ -396,6 +396,14 @@ static bool regdom_changes(const char *alpha2) return !alpha2_equal(r->alpha2, alpha2); } +static bool is_cfg80211_regdom_intersected(void) +{ + const struct ieee80211_regdomain *r = get_cfg80211_regdom(); + + if (!r) + return false; + return is_intersected_alpha2(r->alpha2); +} /* * The NL80211_REGDOM_SET_BY_USER regdom alpha2 is cached, this lets * you know if a valid regulatory hint with NL80211_REGDOM_SET_BY_USER @@ -1650,9 +1658,14 @@ __reg_process_hint_user(struct regulatory_request *user_request) */ if ((lr->initiator == NL80211_REGDOM_SET_BY_CORE || lr->initiator == NL80211_REGDOM_SET_BY_DRIVER || - lr->initiator == NL80211_REGDOM_SET_BY_USER) && - regdom_changes(lr->alpha2)) - return REG_REQ_IGNORE; + lr->initiator == NL80211_REGDOM_SET_BY_USER)) { + if (lr->intersect) { + if (!is_cfg80211_regdom_intersected()) + return REG_REQ_IGNORE; + } else if (regdom_changes(lr->alpha2)) { + return REG_REQ_IGNORE; + } + } if (!regdom_changes(user_request->alpha2)) return REG_REQ_ALREADY_SET;