public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Richard Purdie <rpurdie@rpsys.net>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Henrique de Moraes Holschuh <hmh@hmh.eng.br>,
	David Brownell <david-b@pacbell.net>,
	linux-kernel@vger.kernel.org, Ingo Molnar <mingo@elte.hu>
Subject: Re: use of preempt_count instead of in_atomic() at leds-gpio.c
Date: Fri, 21 Mar 2008 00:56:16 +0000	[thread overview]
Message-ID: <1206060976.4549.121.camel@dax.rpnet.com> (raw)
In-Reply-To: <20080320164741.734e838c.akpm@linux-foundation.org>

On Thu, 2008-03-20 at 16:47 -0700, Andrew Morton wrote:
> On Thu, 20 Mar 2008 19:56:12 -0300 Henrique de Moraes Holschuh <hmh@hmh.eng.br> wrote:
> 
> > Can we add "in_scheduleable()", or maybe "can_schedule()", that returns
> > in_atomic() if CONFIG_PREEMT, or 0 if there is no way to know?   To my
> > limited knowledge of how that part of the kernel works, it would do the
> > right thing.
> 
> If we did that, then people would use it.  And that would be bad.  It'll
> lead to code which behaves differently on non-preemptible kernels, to code
> which works less well on non-preemptible kernels and it will lead to less
> well-thought-out code in general.
> 
> Really, this all points at an ill-designed part of the leds interface.  The
> consistent pattern we use in the kernel is that callers keep track of
> whether they are running in a schedulable context and, if necessary, they
> will inform callees about that.  Callees don't work it out for themselves.

The LED interface said that the brightness_set implementation should not
sleep since it was intended to be a 'cheap' function and to allow LED
triggers changing the LED brightness to be simple. A lot of embedded LED
hardware doesn't need to sleep to toggle gpios.

Some drivers do have a problem with that however and its usually been
suggested they offload the brightness changes into a workqueue. The gpio
driver tries to be clever and only uses the workqueue if the gpio
backend can sleep *and* the calling context requires it, the latter part
being the problem.

So the options are:

* fix the gpio driver not to be so clever and clearly document
* move the workqueue into the LED class, use it for everyone and remove
the limitation of the function (punishes the hardware which doesn't need
to sleep)
* move the workqueue into the LED class and have LED drivers state
whether they can sleep or not
* start passing around GFP_* flags

Passing flags around and maintaining a track of schedulable state for
the LED class sounds like overkill. I also don't like the idea of
needlessly always using a workqueue. The reason the workqueue was never
implemented in the core was basically a question of timing. If you know
the LED is on a serial bus running at 9600 baud you might not schedule
work quite as often as something on a faster bus. Yes you could start
passing this info around but to me it makes sense to leave this kind of
policy to the drivers.

So I'm leaning towards 'fixing' the gpio driver as I think David has
already offered. I will also improve the documentation on this function
and its requirements as I agree the current isn't as clear as it should
be.

Cheers,

Richard


  parent reply	other threads:[~2008-03-21  0:56 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-16 18:43 use of preempt_count instead of in_atomic() at leds-gpio.c Henrique de Moraes Holschuh
2008-03-16 19:46 ` David Brownell
2008-03-18  7:14   ` Andrew Morton
2008-03-18 19:06     ` David Brownell
2008-03-18 20:07       ` Andrew Morton
2008-03-20 22:56     ` Henrique de Moraes Holschuh
2008-03-20 23:47       ` Andrew Morton
2008-03-21  0:36         ` Henrique de Moraes Holschuh
2008-03-21  1:08           ` Andrew Morton
2008-03-21  1:31             ` Alan Stern
2008-03-21  1:36               ` Michael Buesch
2008-03-21  2:27                 ` Andrew Morton
2008-03-21  3:07                   ` Alan Stern
2008-03-21  3:17                     ` Andrew Morton
2008-03-21  9:53                       ` Jean Delvare
2008-03-21 17:37                         ` Andrew Morton
2008-03-21 18:05                           ` Alan Stern
2008-03-24 19:34                             ` Jonathan Corbet
2008-03-24 19:42                               ` Andrew Morton
2008-03-24 19:53                                 ` Jonathan Corbet
2008-03-25  8:52                                   ` Junio C Hamano
2008-03-25 10:39                                     ` Jean Delvare
2008-03-25 13:44                                     ` Jonathan Corbet
2008-03-25 23:20                                       ` David Brownell
2008-03-26 14:28                                         ` Alan Stern
2008-03-26 16:17                                           ` Henrique de Moraes Holschuh
2008-03-26 16:46                                             ` Richard Purdie
2008-03-27 18:51                                             ` David Brownell
2008-03-21 15:11                       ` Tetsuo Handa
2008-03-21 16:54                         ` Stefan Richter
2008-03-21 17:02                           ` Stefan Richter
2008-03-23  5:53                             ` Tetsuo Handa
2008-03-21 13:47                   ` Heiko Carstens
2008-03-21 16:54                     ` Greg KH
2008-03-21 19:59                       ` Andrew Morton
2008-03-21 20:16                         ` Michael Buesch
2008-03-21 20:20                           ` Michael Buesch
2008-03-21  9:21             ` Stefan Richter
2008-03-21  9:27               ` Stefan Richter
2008-03-21 12:37               ` Henrique de Moraes Holschuh
2008-03-21 13:16                 ` Stefan Richter
2008-03-22 11:29                   ` Stefan Richter
2008-03-21 17:04             ` David Brownell
2008-03-21  0:56         ` Richard Purdie [this message]
2008-03-21  2:10           ` 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=1206060976.4549.121.camel@dax.rpnet.com \
    --to=rpurdie@rpsys.net \
    --cc=akpm@linux-foundation.org \
    --cc=david-b@pacbell.net \
    --cc=hmh@hmh.eng.br \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    /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