• Geert Uytterhoeven's avatar
    fbdev: sh_mobile_lcdc: Fix destruction of uninitialized mutex · 7374ccc0
    Geert Uytterhoeven authored
    If sh_mobile_lcdc_probe() fails after the allocation of driver-private
    data, but before the initialization of all channels, a warning will be
    printed due to the destruction of an uninitialized mutex:
    
        WARNING: CPU: 0 PID: 1 at kernel/locking/mutex-debug.c:116 mutex_destroy+0x5c/0x7c()
        DEBUG_LOCKS_WARN_ON(mutex_is_locked(lock))
        ...
        Backtrace:
        ...
        [<c00425b4>] (mutex_destroy) from [<c01d5858>] (sh_mobile_lcdc_remove+0x1bc/0x230)
         r4:df6a4800 r3:00000000
        [<c01d569c>] (sh_mobile_lcdc_remove) from [<c01d6620>] (sh_mobile_lcdc_probe+0xd54/0xe28)
    
    Move the initialization of the mutexes from sh_mobile_lcdc_channel_init()
    to immediately after the allocation of driver-private data to fix this.
    
    Note that the interrupt number is moved to a new variable "irq", so we
    can reuse the existing variable "i" for iterating over the channels.
    Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
    Acked-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
    7374ccc0
sh_mobile_lcdcfb.c 71 KB