All of lore.kernel.org
 help / color / mirror / Atom feed
From: Shuah Khan <shuahkhan@gmail.com>
To: Fabio Baltieri <fabio.baltieri@gmail.com>
Cc: shuahkhan@gmail.com, Bryan Wu <bryan.wu@canonical.com>,
	linux-leds@vger.kernel.org, linux-kernel@vger.kernel.org,
	Richard Purdie <rpurdie@rpsys.net>
Subject: Re: [PATCH] leds: use led_brightness_set in led_trigger_event
Date: Mon, 11 Jun 2012 15:38:25 -0600	[thread overview]
Message-ID: <1339450705.23857.16.camel@lorien2> (raw)
In-Reply-To: <1339448260-1733-1-git-send-email-fabio.baltieri@gmail.com>

On Mon, 2012-06-11 at 22:57 +0200, Fabio Baltieri wrote:
> Fix led_trigger_event() to use led_brightness_set() instead of
> led_set_brightness(), so that any pending blink timer is stopped before
> setting the new brightness value.  Without this fix LED status may be
> overridden by a pending timer.
> 
> This allows a trigger to use a mix of led_trigger_event(),
> led_trigger_blink() and led_trigger_blink_oneshot() without races.
> 
> Signed-off-by: Fabio Baltieri <fabio.baltieri@gmail.com>
> Cc: Bryan Wu <bryan.wu@canonical.com>
> ---
> Hi Bryan,
> 
> I found this one while working on another patch but I think it's also needed by
> other drivers which mixes led_trigger_blink() and led_trigger_event(), such as
> power_supply_leds.
> 
> Without this a led don't stop blinking as it should when calling
> led_trigger_event().

Good find. This is very subtle race though because both timer and
oneshot triggers call led_brightness_set() from their deactivate
routines. Is this when these events triggered using oneshot trigger? 

> 
> Should not cause any harm on other drivers.
> 
> (I'm starting to find the whole led_set_brightness/led_brightness_set thing a
> bit confusing BTW...)

I agree with the names are confusing. :) It found it confusing as well.
Probably why we have this bug hiding until led_trigger_blink() came
along.

led_brightness_set() calls led_set_brightness(). led_set_brightness()
takes cares about whether the driver is in suspend state and invokes
driver's brightness_set interface. Maybe led_clear_blink_timer() would
be a better name for this led_brightness_set() routine.

I can volunteer to make this change if we agree that this will be a good
one to clear this naming confusion.

-- Shuah

> 
> Fabio
> 
>  drivers/leds/led-triggers.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/leds/led-triggers.c b/drivers/leds/led-triggers.c
> index fa0b9be..b88d3b9 100644
> --- a/drivers/leds/led-triggers.c
> +++ b/drivers/leds/led-triggers.c
> @@ -224,7 +224,7 @@ void led_trigger_event(struct led_trigger *trig,
>  		struct led_classdev *led_cdev;
>  
>  		led_cdev = list_entry(entry, struct led_classdev, trig_list);
> -		led_set_brightness(led_cdev, brightness);
> +		led_brightness_set(led_cdev, brightness);

This is in-line with led_trigger_set() which is calling
led_bightness_set() correctly. Also led_classdev_unregister() calls it I
think for the same reason so the blink timer can be stopped.

>  	}
>  	read_unlock(&trig->leddev_list_lock);
>  }



  reply	other threads:[~2012-06-11 21:38 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-11 20:57 [PATCH] leds: use led_brightness_set in led_trigger_event Fabio Baltieri
2012-06-11 21:38 ` Shuah Khan [this message]
2012-06-12  7:16   ` Fabio Baltieri
2012-06-12  7:51     ` Bryan Wu
2012-06-12 17:15       ` Shuah Khan
2012-06-13  2:01         ` [PATCH] leds: Rename led_set_brightness() to __led_set_brightness() Shuah Khan
2012-06-13  4:25           ` Bryan Wu

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=1339450705.23857.16.camel@lorien2 \
    --to=shuahkhan@gmail.com \
    --cc=bryan.wu@canonical.com \
    --cc=fabio.baltieri@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-leds@vger.kernel.org \
    --cc=rpurdie@rpsys.net \
    /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.