linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ivo van Doorn <ivdoorn@gmail.com>
To: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
Cc: Zhu Yi <yi.zhu@intel.com>, Adel Gadllah <adel.gadllah@gmail.com>,
	linux-wireless@vger.kernel.org, randy.dunlap@oracle.com,
	"John W. Linville" <linville@tuxdriver.com>,
	fcrespel@gmail.com
Subject: Re: [PATCH] iwlwifi: remove input device and fix rfkill state
Date: Thu, 3 Jul 2008 00:31:19 +0200	[thread overview]
Message-ID: <200807030031.20202.IvDoorn@gmail.com> (raw)
In-Reply-To: <20080702184153.GA19949@khazad-dum.debian.net>

On Wednesday 02 July 2008, Henrique de Moraes Holschuh wrote:
> On Wed, 02 Jul 2008, Ivo van Doorn wrote:
> > Well actually it isn't that easy, the lock would also be used for the state change
> > callback function toward the driver. And if that is done under a spinlock, USB
> > drivers will start complaining since they can't access the hardware under atomic
> > context...
> 
> Would it be worth it to use a hybrid scheme?

That would be nice if it could be done cleanly.

> Callbacks and the notify chain would remain in task context, while the
> locking is changed to spinlocks so that it can also work in interrupt
> context when needed.   We document better (in the text documentation,
> include files and kernel-doc) the contextes so that people don't get
> confused by the code and think that a spinlock means atomic context is OK
> for these handlers.

The mutex in the rfkill structure could become a spinlock, but the notifiers
should probably be switched to the atomic versions as well so they could still
be used at the current locations.

The global rfkill_mutex could remain a mutex to protect the rfkill list and all
callback functions.

Now that I rechecked the code the current approach doesn't seem to protect the
rfkill_toggle_radio callback function with consistent locking either.
Sometimes it is called under the rfkill->mutex protection and at other times
under the global rfkill_mutex.
Both rfkill_state_store() and rfkill_resume() use the rfkill->mutex while most
other functions use the global rfkill_mutex. Those 2 will have to switch over to
the global mutex to prevent problems.

> For rfkill_force_state(), we'd either add a flags parameter that can take,
> e.g., GFP_ATOMIC, to tell us whether it is being called from an interrupt
> handler or a task context, or we could simply add rfkill_force_state_atomic().

Neither sound like a good idea, because that would require 2 approaches to lock
the rfkill structure which could be good cause for race conditions under certain
situations.

> This would be safer (because the state would still be updated synchronously
> when one calls rfkill_force_state(_atomic)?) than adding a
> rfkill_schedule_force_state() for drivers to call in interrupt context.

Couldn't this cause race conditions in toggle_radio updates when 1 driver uses atomic
context and the other in scheduled context.

> So far, the only function I can see that would have to work in
> interrupt/atomic context would be rfkill_force_state_atomic.

Thats correct.

Ivo


  reply	other threads:[~2008-07-02 22:26 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-01 15:49 [PATCH] iwlwifi: remove input device and fix rfkill state Adel Gadllah
2008-07-01 16:56 ` Henrique de Moraes Holschuh
2008-07-02  8:25   ` Zhu Yi
2008-07-02 15:43     ` Henrique de Moraes Holschuh
2008-07-02 16:00       ` Ivo van Doorn
2008-07-02 18:41         ` Henrique de Moraes Holschuh
2008-07-02 22:31           ` Ivo van Doorn [this message]
2008-07-03  1:53             ` Henrique de Moraes Holschuh
2008-07-03  3:11               ` Zhu Yi
2008-07-03 12:49                 ` Henrique de Moraes Holschuh

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=200807030031.20202.IvDoorn@gmail.com \
    --to=ivdoorn@gmail.com \
    --cc=adel.gadllah@gmail.com \
    --cc=fcrespel@gmail.com \
    --cc=hmh@hmh.eng.br \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    --cc=randy.dunlap@oracle.com \
    --cc=yi.zhu@intel.com \
    /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).