Return-path: Received: from mail-gg0-f174.google.com ([209.85.161.174]:52776 "EHLO mail-gg0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751434Ab2EPOoe (ORCPT ); Wed, 16 May 2012 10:44:34 -0400 Received: by gglu4 with SMTP id u4so748665ggl.19 for ; Wed, 16 May 2012 07:44:33 -0700 (PDT) Message-ID: <4FB3BD4A.5020509@lwfinger.net> (sfid-20120516_164438_745597_FDB4CFBB) Date: Wed, 16 May 2012 09:44:26 -0500 From: Larry Finger MIME-Version: 1.0 To: Stanislaw Gruszka CC: "John W. Linville" , linux-wireless@vger.kernel.org, Herton Ronaldo Krzesinski , Hin-Tak Leung Subject: Re: [PATCH] rtl8187: ->brightness_set can not sleep References: <1337159181-4466-1-git-send-email-sgruszka@redhat.com> In-Reply-To: <1337159181-4466-1-git-send-email-sgruszka@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Sender: linux-wireless-owner@vger.kernel.org List-ID: On 05/16/2012 04:06 AM, Stanislaw Gruszka wrote: > Fix: > > BUG: sleeping function called from invalid context at kernel/workqueue.c:2547 > in_atomic(): 1, irqs_disabled(): 0, pid: 629, name: wpa_supplicant > 2 locks held by wpa_supplicant/629: > #0: (rtnl_mutex){+.+.+.}, at: [] rtnl_lock+0x14/0x20 > #1: (&trigger->leddev_list_lock){.+.?..}, at: [] led_trigger_event+0x21/0x80 > Pid: 629, comm: wpa_supplicant Not tainted 3.3.0-0.rc3.git5.1.fc17.i686 > Call Trace: > [] __might_sleep+0x126/0x1d0 > [] wait_on_work+0x2c/0x1d0 > [] __cancel_work_timer+0x6a/0x120 > [] cancel_delayed_work_sync+0x10/0x20 > [] rtl8187_led_brightness_set+0x82/0xf0 [rtl8187] > [] led_trigger_event+0x5c/0x80 > [] ieee80211_led_radio+0x1d/0x40 [mac80211] > [] ieee80211_stop_device+0x13/0x230 [mac80211] > > Removing _sync is ok, because if led_on work is currently running > it will be finished before led_off work start to perform, since > they are always queued on the same mac80211 local->workqueue. > > Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=795176 > > Signed-off-by: Stanislaw Gruszka > --- ACKed-by: Larry Finger Thanks, Larry > drivers/net/wireless/rtl818x/rtl8187/leds.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/drivers/net/wireless/rtl818x/rtl8187/leds.c b/drivers/net/wireless/rtl818x/rtl8187/leds.c > index 2e0de2f..c2d5b49 100644 > --- a/drivers/net/wireless/rtl818x/rtl8187/leds.c > +++ b/drivers/net/wireless/rtl818x/rtl8187/leds.c > @@ -117,7 +117,7 @@ static void rtl8187_led_brightness_set(struct led_classdev *led_dev, > radio_on = true; > } else if (radio_on) { > radio_on = false; > - cancel_delayed_work_sync(&priv->led_on); > + cancel_delayed_work(&priv->led_on); > ieee80211_queue_delayed_work(hw,&priv->led_off, 0); > } > } else if (radio_on) {