lkml.org 
[lkml]   [2011]   [Apr]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[34-longterm 092/209] backlight: grab ops_lock before testing bd->ops
    Date
    From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>

    =====================================================================
    | This is a commit scheduled for the next v2.6.34 longterm release. |
    | If you see a problem with using this for longterm, please comment.|
    =====================================================================

    commit d1d73578e053b981c3611e5a211534290d24a5eb upstream.

    According to the comment describing ops_lock in the definition of struct
    backlight_device and when comparing with other functions in backlight.c
    the mutex must be hold when checking ops to be non-NULL.

    Fixes a problem added by c835ee7f4154992e6 ("backlight: Add suspend/resume
    support to the backlight core") in Jan 2009.

    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Acked-by: Richard Purdie <rpurdie@linux.intel.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
    ---
    drivers/video/backlight/backlight.c | 12 ++++++------
    1 files changed, 6 insertions(+), 6 deletions(-)

    diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
    index e207810..0870329 100644
    --- a/drivers/video/backlight/backlight.c
    +++ b/drivers/video/backlight/backlight.c
    @@ -197,12 +197,12 @@ static int backlight_suspend(struct device *dev, pm_message_t state)
    {
    struct backlight_device *bd = to_backlight_device(dev);

    - if (bd->ops->options & BL_CORE_SUSPENDRESUME) {
    - mutex_lock(&bd->ops_lock);
    + mutex_lock(&bd->ops_lock);
    + if (bd->ops && bd->ops->options & BL_CORE_SUSPENDRESUME) {
    bd->props.state |= BL_CORE_SUSPENDED;
    backlight_update_status(bd);
    - mutex_unlock(&bd->ops_lock);
    }
    + mutex_unlock(&bd->ops_lock);

    return 0;
    }
    @@ -211,12 +211,12 @@ static int backlight_resume(struct device *dev)
    {
    struct backlight_device *bd = to_backlight_device(dev);

    - if (bd->ops->options & BL_CORE_SUSPENDRESUME) {
    - mutex_lock(&bd->ops_lock);
    + mutex_lock(&bd->ops_lock);
    + if (bd->ops && bd->ops->options & BL_CORE_SUSPENDRESUME) {
    bd->props.state &= ~BL_CORE_SUSPENDED;
    backlight_update_status(bd);
    - mutex_unlock(&bd->ops_lock);
    }
    + mutex_unlock(&bd->ops_lock);

    return 0;
    }
    --
    1.7.4.4
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2011-04-14 20:05    [W:0.033 / U:87.288 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site