From patchwork Fri Jun 24 16:13:57 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Mohammed Shafi X-Patchwork-Id: 916832 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter2.kernel.org (8.14.4/8.14.4) with ESMTP id p5OGE2Y5009330 for ; Fri, 24 Jun 2011 16:14:02 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759681Ab1FXQOA (ORCPT ); Fri, 24 Jun 2011 12:14:00 -0400 Received: from mail-ww0-f42.google.com ([74.125.82.42]:38979 "EHLO mail-ww0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754238Ab1FXQOA convert rfc822-to-8bit (ORCPT ); Fri, 24 Jun 2011 12:14:00 -0400 Received: by wwg11 with SMTP id 11so626056wwg.1 for ; Fri, 24 Jun 2011 09:13:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=SOrZL26nT82CQZTwJ3qjzGMtGeUYFmWzna6QnMkFzIk=; b=vUvlHnXPnGy8uRw7TEnwAWkM7XnJmPrSqhtaufRGp2zXmGwjr/MrmnYw7cyev85WTI 73WHo5O9px9FXRBOpMlF6HzKNrNx7n35oVZiJZxucBjPAJQPhQhpk1QeIlnmLsn6DqWv ZgIuMBZ9Jok93/xp9MTzOv7DQponzEApUF8fk= MIME-Version: 1.0 Received: by 10.227.200.198 with SMTP id ex6mr3148332wbb.73.1308932037527; Fri, 24 Jun 2011 09:13:57 -0700 (PDT) Received: by 10.227.38.66 with HTTP; Fri, 24 Jun 2011 09:13:57 -0700 (PDT) In-Reply-To: References: Date: Fri, 24 Jun 2011 21:43:57 +0530 Message-ID: Subject: Re: cfg80211 'iw reg set' no longer works after trying to set invalid From: Mohammed Shafi To: Laura Nayman Cc: linux-wireless@vger.kernel.org, "Luis R. Rodriguez" 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.6 (demeter2.kernel.org [140.211.167.43]); Fri, 24 Jun 2011 16:14:02 +0000 (UTC) On Fri, Jun 24, 2011 at 8:13 PM, Laura Nayman wrote: > cfg80211 'iw reg set' no longer works after trying to set invalid country > code > > You can change the wireless region by using 'iw set reg'. Normally you can > switch back and forth just fine... > > # iw reg set US > # iw reg get | grep country > country US: > # iw reg set JP > # iw reg get | grep country > country JP: > # iw reg set US > # iw reg get | grep country > country US: > > > However, if we try to use an invalid country code, such as XX: > # iw reg set XX > # iw reg get | grep country > country US: > ... it doesn't take. Okay, no big deal. Let's try setting it back to JP: > # iw reg set JP > # iw reg get | grep country > country US: > > We're now stuck at the country code we were at before we put the invalid one > in. > > In dmesg, this exchange looks like: > # dmesg | grep cfg80211 > cfg80211: Calling CRDA to update world regulatory domain > cfg80211: World regulatory domain updated: > cfg80211: Calling CRDA for country: US > cfg80211: Regulatory domain changed to country: US > cfg80211: Calling CRDA for country: JP > cfg80211: Regulatory domain changed to country: JP > cfg80211: Calling CRDA for country: US > cfg80211: Regulatory domain changed to country: US > cfg80211: Calling CRDA for country: XX > ... and we're stuck there. > > What looks to be happening is that the kernel uses udev to call /sbin/crda > with a new COUNTRY= setting, but /sbin/crda bails out with -1 because of 'No > country match in regulatory database', and never sends a netlink message > back to the kernel to give it the regulatory information for that country. > The kernel then seems to be stuck waiting for a message that will never > come. > > The only way I can figure to unstick it is to reboot. true you may be using old wireless-testing/compat wireless, i too got this issue in Jan compat wireless does this happens with the latest compat wireless. please check? http://wireless.kernel.org/download/compat-wireless-2.6/ this would have fixed it commit c989bb15e95a93e20fc86783264f6298116e8651 Author: Luis R. Rodriguez Date: Mon Apr 25 18:35:48 2011 -0700 cfg80211: fix regresion on reg user timeout The patch "cfg80211: add a timer for invalid user reg hints" introduced a regression for the case where a secondary identical regulatory hint from a user is sent. What would happen is the second hint would schedule delayed work in to catch a timeout but since we are never processing it given that the hint was already applied we'd always hit the timeout and and restore regulatory settings back to world regulatory domain. This is fixed by simply avoiding sheduling work if the hint was already applied. Tested-by: Felix Fietkau Reported-by: Felix Fietkau Signed-off-by: Luis R. Rodriguez Signed-off-by: John W. Linville > -- > To unsubscribe from this list: send the line "unsubscribe linux-wireless" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at  http://vger.kernel.org/majordomo-info.html > diff --git a/net/wireless/reg.c b/net/wireless/reg.c index 2714379..8982053 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c @@ -1455,7 +1455,8 @@ static void reg_process_hint(struct regulatory_request *reg_request) * We only time out user hints, given that they should be the only * source of bogus requests. */ - if (reg_request->initiator == NL80211_REGDOM_SET_BY_USER) + if (r != -EALREADY && + reg_request->initiator == NL80211_REGDOM_SET_BY_USER) schedule_delayed_work(®_timeout, msecs_to_jiffies(3142)); }