Thread (40 messages) 40 messages, 12 authors, 2009-07-06

Re: [PATCH 03/10] mac80211: Use rcu_barrier() on unload.

From: Johannes Berg <johannes@sipsolutions.net>
Date: 2009-06-24 10:22:38
Also in: linux-ext4, linux-nfs, linux-wireless, lkml, netfilter-devel

On Wed, 2009-06-24 at 12:06 +0200, Jesper Dangaard Brouer wrote:
On Tue, 2009-06-23 at 17:15 +0200, Johannes Berg wrote:
quoted
On Tue, 2009-06-23 at 17:04 +0200, Jesper Dangaard Brouer wrote:
quoted
The mac80211 module uses rcu_call() thus it should use rcu_barrier()
on module unload.

I'm having a hardtime verifying that no more call_rcu() callbacks can
be schedules in the module unload path.  Could a maintainer please
look into this?

Signed-off-by: Jesper Dangaard Brouer <redacted>
---

 net/mac80211/main.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index 092a017..e9f70ce 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -1100,6 +1100,8 @@ static void __exit ieee80211_exit(void)
 		ieee80211s_stop();
 
 	ieee80211_debugfs_netdev_exit();
+
+	rcu_barrier(); /* Wait for completion of call_rcu()'s */
 }
I don't think this is correct at all -- note that call_rcu() is done in
some of the mesh code, so I would think you need to do this in
ieee80211_stop() since the call_rcu() code requires the interface to
still be around. And when it's stopped everything should be idle.
Should it then not be in mesh.c ieee80211_stop_mesh().  We can replace
the synchronize_rcu() in this function with a rcu_barrier().
Yes, this seems correct.

johannes

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help