From: Alan Jenkins <alan-jenkins-cCz0Lq7MMjm9FHfhHBbuYA@public.gmane.org>
To: "linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Cc: Arjan van de Ven <arjan-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>,
linux-kernel
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Kernel Testers List
<kernel-testers-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: [PATCH] [RFC] EEE PC hangs when booting off battery
Date: Tue, 28 Apr 2009 10:19:10 +0100 [thread overview]
Message-ID: <49F6CA0E.5040101@tuffmail.co.uk> (raw)
In-Reply-To: <49F446AE.6070607-cCz0Lq7MMjm9FHfhHBbuYA@public.gmane.org>
I found a regression where my EEE hangs at boot time, if the battery is
present.
I'm confident it's a regression because it disappears if I revert
Arjan's asynchronous battery initialisation. However, the evidence
points to a deadlock in the wireless stack which has simply been
uncovered by timing changes.
If I leave the system long enough, I get a series of hung task
warnings. They suggest the following deadlock:
- ieee80211_wep_init(), which is called with rtnl_lock() held, is
blocked in request_module() [waiting for modprobe to load a crypto module].
- modprobe is blocked in a call to flush_workqueue(), caused by closing
a TTY.
- worker_thread is blocked because the workqueue item linkwatch_event()
is blocked on rtnl_lock.
I've hacked up a test patch to move wep_init() outside of rtnl_lock, and
it solved the problem. My one caveat is that it would probably be
cleaner to move it after rtnl_unlock(), instead of before rtnl_lock().
I just wasn't 100% sure if that would be safe. Here's the patch:
---8<---
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index fbcbed6..fffa7f9 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -909,6 +909,13 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
if (result < 0)
goto fail_sta_info;
+ result = ieee80211_wep_init(local);
+ if (result < 0) {
+ printk(KERN_DEBUG "%s: Failed to initialize wep: %d\n",
+ wiphy_name(local->hw.wiphy), result);
+ goto fail_wep;
+ }
+
rtnl_lock();
result = dev_alloc_name(local->mdev, local->mdev->name);
if (result < 0)
@@ -930,14 +937,6 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
goto fail_rate;
}
- result = ieee80211_wep_init(local);
-
- if (result < 0) {
- printk(KERN_DEBUG "%s: Failed to initialize wep: %d\n",
- wiphy_name(local->hw.wiphy), result);
- goto fail_wep;
- }
WARNING: multiple messages have this Message-ID (diff)
From: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
To: "linux-wireless@vger.kernel.org" <linux-wireless@vger.kernel.org>
Cc: Arjan van de Ven <arjan@infradead.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
Kernel Testers List <kernel-testers@vger.kernel.org>
Subject: [PATCH] [RFC] EEE PC hangs when booting off battery
Date: Tue, 28 Apr 2009 10:19:10 +0100 [thread overview]
Message-ID: <49F6CA0E.5040101@tuffmail.co.uk> (raw)
In-Reply-To: <49F446AE.6070607@tuffmail.co.uk>
I found a regression where my EEE hangs at boot time, if the battery is
present.
I'm confident it's a regression because it disappears if I revert
Arjan's asynchronous battery initialisation. However, the evidence
points to a deadlock in the wireless stack which has simply been
uncovered by timing changes.
If I leave the system long enough, I get a series of hung task
warnings. They suggest the following deadlock:
- ieee80211_wep_init(), which is called with rtnl_lock() held, is
blocked in request_module() [waiting for modprobe to load a crypto module].
- modprobe is blocked in a call to flush_workqueue(), caused by closing
a TTY.
- worker_thread is blocked because the workqueue item linkwatch_event()
is blocked on rtnl_lock.
I've hacked up a test patch to move wep_init() outside of rtnl_lock, and
it solved the problem. My one caveat is that it would probably be
cleaner to move it after rtnl_unlock(), instead of before rtnl_lock().
I just wasn't 100% sure if that would be safe. Here's the patch:
---8<---
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index fbcbed6..fffa7f9 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -909,6 +909,13 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
if (result < 0)
goto fail_sta_info;
+ result = ieee80211_wep_init(local);
+ if (result < 0) {
+ printk(KERN_DEBUG "%s: Failed to initialize wep: %d\n",
+ wiphy_name(local->hw.wiphy), result);
+ goto fail_wep;
+ }
+
rtnl_lock();
result = dev_alloc_name(local->mdev, local->mdev->name);
if (result < 0)
@@ -930,14 +937,6 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
goto fail_rate;
}
- result = ieee80211_wep_init(local);
-
- if (result < 0) {
- printk(KERN_DEBUG "%s: Failed to initialize wep: %d\n",
- wiphy_name(local->hw.wiphy), result);
- goto fail_wep;
- }
-
/* add one default STA interface if supported */
if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_STATION)) {
result = ieee80211_if_add(local, "wlan%d", NULL,
@@ -967,13 +966,12 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
return 0;
-fail_wep:
- rate_control_deinitialize(local);
fail_rate:
unregister_netdevice(local->mdev);
local->mdev = NULL;
fail_dev:
rtnl_unlock();
+fail_wep:
sta_info_stop(local);
fail_sta_info:
debugfs_hw_del(local);
next prev parent reply other threads:[~2009-04-28 9:19 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-11 9:41 Regression: EEE PC hangs when booting off battery Alan Jenkins
2009-04-11 9:41 ` Alan Jenkins
[not found] ` <49E065CF.6040408-cCz0Lq7MMjm9FHfhHBbuYA@public.gmane.org>
2009-04-11 18:07 ` Tzy-Jye Daniel Lin
2009-04-11 18:07 ` Tzy-Jye Daniel Lin
[not found] ` <66dc75180904111107q645fbb77i3cf927ffab7a7ef0-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-04-12 9:00 ` Alan Jenkins
2009-04-12 9:00 ` Alan Jenkins
[not found] ` <49E1ADAE.2030103-cCz0Lq7MMjm9FHfhHBbuYA@public.gmane.org>
2009-04-12 13:11 ` [BISECTED] " Alan Jenkins
2009-04-12 13:11 ` Alan Jenkins
[not found] ` <49E1E89D.7040502-cCz0Lq7MMjm9FHfhHBbuYA@public.gmane.org>
2009-04-13 19:15 ` Bjorn Helgaas
2009-04-13 19:15 ` Bjorn Helgaas
[not found] ` <200904131315.55519.bjorn.helgaas-VXdhtT5mjnY@public.gmane.org>
2009-04-13 19:57 ` Alan Jenkins
2009-04-13 19:57 ` Alan Jenkins
2009-04-13 22:28 ` Bjorn Helgaas
2009-04-14 8:06 ` Alan Jenkins
2009-04-14 9:26 ` Alan Jenkins
2009-04-14 14:59 ` Bjorn Helgaas
2009-04-14 15:17 ` Arjan van de Ven
2009-04-14 15:37 ` Alan Jenkins
[not found] ` <20090414081728.10de978a-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2009-04-14 15:48 ` Bjorn Helgaas
2009-04-14 15:48 ` Bjorn Helgaas
[not found] ` <200904140948.37633.bjorn.helgaas-VXdhtT5mjnY@public.gmane.org>
2009-04-14 15:55 ` Moore, Robert
2009-04-14 15:55 ` Moore, Robert
[not found] ` <4911F71203A09E4D9981D27F9D8308581D3722EB-osO9UTpF0URQxe9IK+vIArfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2009-04-14 16:56 ` Bjorn Helgaas
2009-04-14 16:56 ` Bjorn Helgaas
2009-04-14 17:22 ` Moore, Robert
[not found] ` <4911F71203A09E4D9981D27F9D8308581D372489-osO9UTpF0URQxe9IK+vIArfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2009-04-14 17:28 ` Alan Jenkins
2009-04-14 17:28 ` Alan Jenkins
[not found] ` <200904141056.14159.bjorn.helgaas-VXdhtT5mjnY@public.gmane.org>
2009-04-15 15:38 ` Len Brown
2009-04-15 15:38 ` Len Brown
2009-04-15 14:32 ` [FIXED] " Alan Jenkins
2009-04-15 14:32 ` Alan Jenkins
2009-04-22 12:17 ` Alan Jenkins
2009-04-26 11:34 ` Alan Jenkins
[not found] ` <49F446AE.6070607-cCz0Lq7MMjm9FHfhHBbuYA@public.gmane.org>
2009-04-28 9:19 ` Alan Jenkins [this message]
2009-04-28 9:19 ` [PATCH] [RFC] " Alan Jenkins
[not found] ` <49F6CA0E.5040101-cCz0Lq7MMjm9FHfhHBbuYA@public.gmane.org>
2009-04-28 9:58 ` Johannes Berg
2009-04-28 9:58 ` Johannes Berg
[not found] ` <1240912688.28835.10.camel-YfaajirXv2244ywRPIzf9A@public.gmane.org>
2009-04-28 10:27 ` Alan Jenkins
2009-04-28 10:27 ` Alan Jenkins
[not found] ` <49F6DA14.7030608-cCz0Lq7MMjm9FHfhHBbuYA@public.gmane.org>
2009-04-28 10:35 ` Johannes Berg
2009-04-28 10:35 ` Johannes Berg
2009-04-29 11:14 ` Alan Jenkins
2009-04-29 11:14 ` Alan Jenkins
[not found] ` <49F83699.3000307-cCz0Lq7MMjm9FHfhHBbuYA@public.gmane.org>
2009-04-29 11:20 ` Johannes Berg
2009-04-29 11:20 ` Johannes Berg
2009-05-15 21:48 ` Rafael J. Wysocki
2009-05-15 21:48 ` Rafael J. Wysocki
[not found] ` <200905152348.56449.rjw-KKrjLPT3xs0@public.gmane.org>
2009-05-16 8:39 ` Alan Jenkins
2009-05-16 8:39 ` Alan Jenkins
2009-04-14 5:03 ` [BISECTED] " Ben Gamari
2009-04-15 15:41 ` Len Brown
2009-04-11 19:40 ` Regression: " Kristoffer Ericson
[not found] ` <20090411214045.7bdd497f.kristoffer.ericson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2009-04-12 9:22 ` Alan Jenkins
2009-04-12 9:22 ` Alan Jenkins
2009-04-15 15:49 ` archlinux 2.6.28 ac oops (was Re: Regression: EEE PC hangs when booting off battery) Len Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49F6CA0E.5040101@tuffmail.co.uk \
--to=alan-jenkins-ccz0lq7mmjm9fhfhhbbuya@public.gmane.org \
--cc=arjan-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org \
--cc=kernel-testers-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.