The lock sequence of dcon_blank_fb(fb_info->lock ---> console_lock) is against
with the one of console_callback(console_lock ---> fb_info->lock), it'll
lead to a potential dead lock, so reorder the lock sequence of dcon_blank_fb
to avoid the potential dead lock.

Signed-off-by: Gu Zheng <guz.f...@cn.fujitsu.com>
---
 drivers/staging/olpc_dcon/olpc_dcon.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/olpc_dcon/olpc_dcon.c 
b/drivers/staging/olpc_dcon/olpc_dcon.c
index 198595e..9db88d9 100644
--- a/drivers/staging/olpc_dcon/olpc_dcon.c
+++ b/drivers/staging/olpc_dcon/olpc_dcon.c
@@ -255,17 +255,19 @@ static bool dcon_blank_fb(struct dcon_priv *dcon, bool 
blank)
 {
        int err;
 
+       console_lock();
        if (!lock_fb_info(dcon->fbinfo)) {
+               console_unlock();
                dev_err(&dcon->client->dev, "unable to lock framebuffer\n");
                return false;
        }
-       console_lock();
+
        dcon->ignore_fb_events = true;
        err = fb_blank(dcon->fbinfo,
                        blank ? FB_BLANK_POWERDOWN : FB_BLANK_UNBLANK);
        dcon->ignore_fb_events = false;
-       console_unlock();
        unlock_fb_info(dcon->fbinfo);
+       console_unlock();
 
        if (err) {
                dev_err(&dcon->client->dev, "couldn't %sblank framebuffer\n",
-- 
1.7.7

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to