linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Michael Buesch <mb@bu3sch.de>
To: Kalle Valo <kalle.valo@iki.fi>
Cc: linux-wireless@vger.kernel.org,
	Johannes Berg <johannes@sipsolutions.net>
Subject: Re: ieee80211_scan_completed() calling config() and possible deadlock
Date: Mon, 23 Feb 2009 14:13:49 +0100	[thread overview]
Message-ID: <200902231413.49289.mb@bu3sch.de> (raw)
In-Reply-To: <87vdr1717z.fsf@litku.valot.fi>

On Monday 23 February 2009 14:05:20 Kalle Valo wrote:
> Hello,
> 
> I'm currently wondering how to implement the locking
> ieee80211_scan_completed() and I would like hear comments from people.
> 
> In wl12xx and at76c50x-usb the locking was originally implemented such
> that drivers' config() function acquired a mutex. Also elsewhere the
> drivers called ieee80211_scan_completed() under the same mutex. As we
> know, ieee80211_scan_completed() calls ieee80211_hw_config() which
> again calls driver's config() function. So this ended up to a
> deadlock. The problem was easy to fix, just release the mutex in the
> driver before calling the completed() function.
> 
> Now I need to add a similar function, currently named
> ieee80211_beacon_loss(), for the beacon filtering patches I'm working
> on. The function will disassociate whenever driver calls it. While
> experimenting with stlc45xx I noticed that I have a similar problem as
> with ieee80211_scan_completed(), ieee80211_beacon_loss() calls
> driver's config() function eventually and I had a deadlock in stlc45xx.
> 
> I'm just wondering what's the right way(tm) to handle this. I see two
> options:
> 
> 1. Consider the (possible) deadlock as a feature, document it and let
>    the drivers handle it. This is relatively easy.
> 
> 2. Handle this in mac80211 (eg. schedule a workqueue) and drivers
>    don't need to care. This might complicate mac80211 implementation a
>    bit, but easier for the drivers.
> 
> I myself cannot decide which one is better. What do people think? 
> 

I think drivers should not be able to call ieee80211_scan_completed() directly.
Instead they should call a function which schedules ieee80211_scan_completed()
on a workqueue.
In general I consider it broken behavior, if a function called by
the driver can recurse into the driver.
We had that behavior in ieee80211-softmac and it was one of the main
reasons it sucked so much.

The wq schedule code is trivial to implement in mac80211 and it's also OK
to do so. The function is not required to execute synchronously.

-- 
Greetings, Michael.

  reply	other threads:[~2009-02-23 13:15 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-23 13:05 ieee80211_scan_completed() calling config() and possible deadlock Kalle Valo
2009-02-23 13:13 ` Michael Buesch [this message]
2009-02-23 13:23   ` Kalle Valo

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=200902231413.49289.mb@bu3sch.de \
    --to=mb@bu3sch.de \
    --cc=johannes@sipsolutions.net \
    --cc=kalle.valo@iki.fi \
    --cc=linux-wireless@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).