[vt_console_print/cirrus_dirty_update] WARNING: at kernel/mutex.c:858 mutex_trylock()

Fengguang Wu fengguang.wu at intel.com
Thu Jun 6 00:28:56 PDT 2013


Hi Maarten,

Thanks for the patch! I'll queue it for the tests.

Thanks,
Fengguang

On Thu, Jun 06, 2013 at 09:23:15AM +0200, Maarten Lankhorst wrote:
> Hey,
> 
> Op 06-06-13 03:35, Fengguang Wu schreef:
> > Greetings,
> >
> > I got the below dmesg and the first bad commit is
> >
> > commit 3d71c6ed43d838e593538176a9a59debe228cfb0
> > Author: Maarten Lankhorst <maarten.lankhorst at canonical.com>
> > Date:   Tue Apr 2 12:33:01 2013 +0200
> >
> >     drm/ttm: convert to the reservation api
> >     
> >     Now that the code is compatible in semantics, flip the switch.
> >     Use ww_mutex instead of the homegrown implementation.
> >     
> >     Signed-off-by: Maarten Lankhorst <maarten.lankhorst at canonical.com>
> >
> > [   13.044298] printing local APIC contents on CPU#0/0:
> > [   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 ]---
> Thanks for catching this, I'm uncertain how to proceed here. Can you try below patch?
> 
> diff --git a/drivers/gpu/drm/cirrus/cirrus_fbdev.c b/drivers/gpu/drm/cirrus/cirrus_fbdev.c
> index 3541b56..b27e956 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_fbdev.c
> +++ b/drivers/gpu/drm/cirrus/cirrus_fbdev.c
> @@ -25,7 +25,7 @@ static void cirrus_dirty_update(struct cirrus_fbdev *afbdev,
>  	struct cirrus_bo *bo;
>  	int src_offset, dst_offset;
>  	int bpp = (afbdev->gfb.base.bits_per_pixel + 7)/8;
> -	int ret;
> +	int ret = -EBUSY;
>  	bool unmap = false;
>  	bool store_for_later = false;
>  	int x2, y2;
> @@ -39,7 +39,8 @@ static void cirrus_dirty_update(struct cirrus_fbdev *afbdev,
>  	 * then the BO is being moved and we should
>  	 * store up the damage until later.
>  	 */
> -	ret = cirrus_bo_reserve(bo, true);
> +	if (!in_interrupt())
> +		ret = cirrus_bo_reserve(bo, true);
>  	if (ret) {
>  		if (ret != -EBUSY)
>  			return;


More information about the dri-devel mailing list