• Maarten Lankhorst's avatar
    drm/cirrus: do not attempt to acquire a reservation while in an interrupt handler · 19d4b72c
    Maarten Lankhorst authored
    Mutexes should not be acquired in interrupt context. While the trylock
    fastpath is arguably safe on all implementations, the slowpath
    unlock path definitely isn't. This fixes the following lockdep splat:
    
    [   13.044313] ------------[ cut here ]------------
    [   13.044367] WARNING: at /c/kernel-tests/src/tip/kernel/mutex.c:858 mutex_trylock+0x87/0x220()
    [   13.044378] DEBUG_LOCKS_WARN_ON(in_interrupt())
    [   13.044378] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.10.0-rc4-00296-ga2963dd #20
    [   13.044379] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2007
    [   13.044390]  0000000000000009 ffff88000de039f8 ffffffff81fc86d5 ffff88000de03a38
    [   13.044395]  ffffffff810d511b ffff880000000018 ffff88000f33c690 0000000000000001
    [   13.044398]  00000000000003f0 ffff88000f4677c8 0000000000000000 ffff88000de03a98
    [   13.044400] Call Trace:
    [   13.044412]  <IRQ>  [<ffffffff81fc86d5>] dump_stack+0x19/0x1b
    [   13.044441]  [<ffffffff810d511b>] warn_slowpath_common+0x6b/0x90
    [   13.044445]  [<ffffffff810d51a6>] warn_slowpath_fmt+0x46/0x50
    [   13.044448]  [<ffffffff81fd34d7>] mutex_trylock+0x87/0x220
    [   13.044482]  [<ffffffff8186484d>] cirrus_dirty_update+0x1cd/0x330
    [   13.044486]  [<ffffffff818649e8>] cirrus_imageblit+0x38/0x50
    [   13.044506]  [<ffffffff8165782e>] soft_cursor+0x22e/0x240
    [   13.044510]  [<ffffffff81656c31>] bit_cursor+0x581/0x5b0
    [   13.044525]  [<ffffffff815de9f4>] ? vsnprintf+0x124/0x670
    [   13.044529]  [<ffffffff81651333>] ? get_color.isra.16+0x43/0x130
    [   13.044532]  [<ffffffff81653fca>] fbcon_cursor+0x18a/0x1d0
    [   13.044535]  [<ffffffff816566b0>] ? update_attr.isra.2+0xa0/0xa0
    [   13.044556]  [<ffffffff81754b82>] hide_cursor+0x32/0xa0
    [   13.044565]  [<ffffffff81755bd3>] vt_console_print+0x103/0x3b0
    [   13.044569]  [<ffffffff810d58ac>] ? print_time+0x9c/0xb0
    [   13.044576]  [<ffffffff810d5960>] ? print_prefix+0xa0/0xc0
    [   13.044580]  [<ffffffff810d63f6>] call_console_drivers.constprop.6+0x146/0x1f0
    [   13.044593]  [<ffffffff815f9b38>] ? do_raw_spin_unlock+0xc8/0x100
    [   13.044597]  [<ffffffff810d6f27>] console_unlock+0x2f7/0x460
    [   13.044600]  [<ffffffff810d787a>] vprintk_emit+0x59a/0x5e0
    [   13.044615]  [<ffffffff81fb676c>] printk+0x4d/0x4f
    [   13.044650]  [<ffffffff82ba5511>] print_local_APIC+0x28/0x41c
    [   13.044672]  [<ffffffff8114db55>] generic_smp_call_function_single_interrupt+0x145/0x2b0
    [   13.044688]  [<ffffffff8106f9e7>] smp_call_function_single_interrupt+0x27/0x40
    [   13.044697]  [<ffffffff81fd8f72>] call_function_single_interrupt+0x72/0x80
    [   13.044707]  <EOI>  [<ffffffff81078166>] ? native_safe_halt+0x6/0x10
    [   13.044717]  [<ffffffff811425cd>] ? trace_hardirqs_on+0xd/0x10
    [   13.044738]  [<ffffffff8104f669>] default_idle+0x59/0x120
    [   13.044742]  [<ffffffff810501e8>] arch_cpu_idle+0x18/0x40
    [   13.044754]  [<ffffffff811320c5>] cpu_startup_entry+0x235/0x410
    [   13.044763]  [<ffffffff81f9e781>] rest_init+0xd1/0xe0
    [   13.044766]  [<ffffffff81f9e6b5>] ? rest_init+0x5/0xe0
    [   13.044778]  [<ffffffff82b93ec2>] start_kernel+0x425/0x493
    [   13.044781]  [<ffffffff82b93810>] ? repair_env_string+0x5e/0x5e
    [   13.044786]  [<ffffffff82b93595>] x86_64_start_reservations+0x2a/0x2c
    [   13.044789]  [<ffffffff82b93688>] x86_64_start_kernel+0xf1/0x100
    [   13.044799] ---[ end trace 113ad28772af4058 ]---
    Reported-by: default avatarFengguang Wu <fengguang.wu@intel.com>
    Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@canonical.com>
    Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
    19d4b72c
cirrus_fbdev.c 7.91 KB