drm_crtc.c WARNING: drm_mode_object_get() called w/o mode_config lock
Wu Fengguang
fengguang.wu at intel.com
Tue Jan 13 19:05:21 PST 2009
On Wed, Jan 14, 2009 at 10:13:03AM +0800, Wu Fengguang wrote:
> Hi,
>
> I got the following mutex-not-locked warning in linux 2.6.29-rc1.
> It appears in a HP 6910p notebook and another G45 desktop.
>
> [ 357.150892] pci 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
> [ 357.157653] pci 0000:00:02.0: setting latency timer to 64
> [ 357.169915] pci 0000:00:02.0: irq 26 for MSI/MSI-X
> [ 357.497053] ------------[ cut here ]------------
> [ 357.501715] WARNING: at drivers/gpu/drm/drm_crtc.c:213 drm_mode_object_get+0xb7/0xc0()
> [ 357.509662] Hardware name:
> [ 357.513186] drm_mode_object_get called w/o mode_config lock
> [ 357.518777] Modules linked in: i915(+) fb cfbcopyarea cfbimgblt cfbfillrect snd_hda_codec_intelhdmi snd_hda_codec_idt snd_hda_intel snd_hda_codec snd_hwdep snd_pcm snd_seq snd_timer snd_seq_device snd soundcore snd_page_alloc
> [ 357.539346] Pid: 3364, comm: modprobe Not tainted 2.6.29-rc1 #45
> [ 357.545377] Call Trace:
> [ 357.547831] [<ffffffff810454a0>] warn_slowpath+0xd0/0x130
> [ 357.553349] [<ffffffff8106f4aa>] ? trace_hardirqs_on_caller+0x17a/0x1d0
> [ 357.560073] [<ffffffff81012e60>] ? native_sched_clock+0x20/0x80
> [ 357.566118] [<ffffffff81012ec9>] ? sched_clock+0x9/0x10
> [ 357.571446] [<ffffffff81445bcf>] ? _spin_unlock_irqrestore+0x3f/0x70
> [ 357.577906] [<ffffffff8106f4aa>] ? trace_hardirqs_on_caller+0x17a/0x1d0
> [ 357.584625] [<ffffffff81050d9a>] ? try_to_del_timer_sync+0x5a/0x70
> [ 357.590914] [<ffffffff812474c3>] ? drm_mode_connector_update_edid_property+0x63/0x180
> [ 357.598854] [<ffffffff810d4339>] ? cache_alloc_debugcheck_after+0x159/0x250
> [ 357.605919] [<ffffffff81247407>] drm_mode_object_get+0xb7/0xc0
> [ 357.611854] [<ffffffff812474f5>] drm_mode_connector_update_edid_property+0x95/0x180
> [ 357.619647] [<ffffffffa00c430d>] intel_ddc_get_modes+0x3d/0x70 [i915]
> [ 357.626194] [<ffffffffa00c29a9>] intel_hdmi_get_modes+0x9/0x10 [i915]
> [ 357.632730] [<ffffffff8124b216>] drm_helper_probe_single_connector_modes+0xa6/0x2e0
> [ 357.640493] [<ffffffff8124b48e>] drm_helper_probe_connector_modes+0x3e/0x70
> [ 357.647571] [<ffffffff8124b4fa>] drm_helper_plugged_event+0x3a/0x330
> [ 357.654032] [<ffffffff8124b809>] drm_helper_initial_config+0x9/0x10
> [ 357.660407] [<ffffffffa00b44db>] i915_driver_load+0x8eb/0xa30 [i915]
> [ 357.666868] [<ffffffff81242c7c>] drm_get_dev+0x2fc/0x490
> [ 357.672308] [<ffffffff8123d38e>] drm_init+0x9e/0xf0
> [ 357.677301] [<ffffffffa0032000>] ? i915_init+0x0/0x4e [i915]
> [ 357.683070] [<ffffffffa003204c>] i915_init+0x4c/0x4e [i915]
> [ 357.688750] [<ffffffff8100903a>] _stext+0x3a/0x1d0
> [ 357.693653] [<ffffffff8106f206>] ? mark_held_locks+0x56/0xa0
> [ 357.699416] [<ffffffff81443c46>] ? mutex_lock_nested+0x276/0x370
> [ 357.705535] [<ffffffff8106f206>] ? mark_held_locks+0x56/0xa0
> [ 357.711292] [<ffffffff81012e60>] ? native_sched_clock+0x20/0x80
> [ 357.717320] [<ffffffff81012ec9>] ? sched_clock+0x9/0x10
> [ 357.722652] [<ffffffff81445bcf>] ? _spin_unlock_irqrestore+0x3f/0x70
> [ 357.729114] [<ffffffff81445bcf>] ? _spin_unlock_irqrestore+0x3f/0x70
> [ 357.735570] [<ffffffff8106f4aa>] ? trace_hardirqs_on_caller+0x17a/0x1d0
> [ 357.742312] [<ffffffff8106f50d>] ? trace_hardirqs_on+0xd/0x10
> [ 357.748166] [<ffffffff811a2a94>] ? __up_read+0x84/0xb0
> [ 357.753416] [<ffffffff81061396>] ? up_read+0x26/0x30
> [ 357.758479] [<ffffffff81062069>] ? __blocking_notifier_call_chain+0x69/0x90
> [ 357.765540] [<ffffffff8107d11f>] sys_init_module+0xaf/0x200
> [ 357.771220] [<ffffffff8100c63a>] system_call_fastpath+0x16/0x1b
> [ 357.777249] ---[ end trace 3c284735efa217aa ]---
It caused the events/0 thread to stuck in i915_gem_retire_work_handler() and
other threads to stuck in flush_work()/flush_cpu_work():
% ps -o pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm ax | grep D
PID TID CLS RTPRIO NI PRI PSR %CPU STAT WCHAN COMMAND
9 9 TS - -5 24 0 0.1 D< i915_gem_retir events/0
267 267 TS - -5 24 0 0.0 D< flush_work kondemand/0
2872 2872 TS - 0 19 0 0.0 Ds flush_cpu_work getty
2875 2875 TS - 0 19 0 0.0 Ds flush_cpu_work getty
2876 2876 TS - 0 19 0 0.0 Ds flush_cpu_work getty
2879 2879 TS - 0 19 0 0.0 Ds flush_cpu_work getty
2882 2882 TS - 0 19 1 0.0 Ds flush_cpu_work getty
2883 2883 TS - 0 19 0 0.0 Ds flush_cpu_work getty
3295 3295 TS - 0 19 1 0.0 D flush_work killall5
[ 369.005494] events/0 D ffffffffffffffff 4552 9 2
[ 369.005494] ffff88001b515d70 0000000000000046 ffff88001b515ce0 ffff8800031c9200
[ 369.005494] ffffffff818d6200 ffff88001b510280 ffffffff815f14a0 ffff88001b5105c8
[ 369.005494] 000000001b515d20 00000000ffff8899 ffff8800031c9218 0000000000000002
[ 369.005494] Call Trace:
[ 369.005494] [<ffffffff81443be5>] ? mutex_lock_nested+0x215/0x370
[ 369.005494] [<ffffffff81443b3f>] mutex_lock_nested+0x16f/0x370
[ 369.005494] [<ffffffffa00bbbda>] ? i915_gem_retire_work_handler+0x3a/0x90 [i915]
[ 369.005494] [<ffffffffa00bbbda>] ? i915_gem_retire_work_handler+0x3a/0x90 [i915]
[ 369.005494] [<ffffffffa00bbbda>] i915_gem_retire_work_handler+0x3a/0x90 [i915]
[ 369.005494] [<ffffffffa00bbba0>] ? i915_gem_retire_work_handler+0x0/0x90 [i915]
[ 369.005494] [<ffffffff81058845>] run_workqueue+0x105/0x240
[ 369.005494] [<ffffffff810587f3>] ? run_workqueue+0xb3/0x240
[ 369.005494] [<ffffffff81058a2f>] worker_thread+0xaf/0x130
[ 369.005494] [<ffffffff8105d320>] ? autoremove_wake_function+0x0/0x40
[ 369.005494] [<ffffffff81058980>] ? worker_thread+0x0/0x130
[ 369.005494] [<ffffffff8105cef9>] kthread+0x49/0x90
[ 369.005494] [<ffffffff8100d9aa>] child_rip+0xa/0x20
[ 369.005494] [<ffffffff8100d2be>] ? restore_args+0x0/0x30
[ 369.005494] [<ffffffff8105ceb0>] ? kthread+0x0/0x90
[ 369.005494] [<ffffffff8100d9a0>] ? child_rip+0x0/0x20
[ 369.005494] kondemand/0 D 0000000000000000 5896 267 2
[ 369.005494] ffff88001b7cdaf0 0000000000000046 0000000100000000 ffff88001b73d640
[ 369.005494] ffffffff818d6200 ffff88001b73d640 ffffffff815f14a0 ffff88001b73d988
[ 369.005494] 000000001b7cda90 00000000ffff88a5 ffff8800031c9218 0000000000000002
[ 369.005494] Call Trace:
[ 369.005494] [<ffffffff81442f85>] schedule_timeout+0x95/0xd0
[ 369.005494] [<ffffffff8106f359>] ? trace_hardirqs_on_caller+0x29/0x1d0
[ 369.005494] [<ffffffff8106f50d>] ? trace_hardirqs_on+0xd/0x10
[ 369.005494] [<ffffffff81445b7b>] ? _spin_unlock_irq+0x2b/0x40
[ 369.005494] [<ffffffff81442de0>] wait_for_common+0x160/0x190
[ 369.005494] [<ffffffff8103c420>] ? default_wake_function+0x0/0x10
[ 369.005494] [<ffffffff8106f359>] ? trace_hardirqs_on_caller+0x29/0x1d0
[ 369.005494] [<ffffffff81442ea8>] wait_for_completion+0x18/0x20
[ 369.005494] [<ffffffff810592f5>] flush_work+0xc5/0x110
[ 369.005494] [<ffffffff8105926a>] ? flush_work+0x3a/0x110
[ 369.005494] [<ffffffff81058d00>] ? wq_barrier_func+0x0/0x10
[ 369.005494] [<ffffffff8106f50d>] ? trace_hardirqs_on+0xd/0x10
[ 369.005494] [<ffffffff8105956c>] ? __queue_work+0x3c/0x50
[ 369.005494] [<ffffffff8101c2c0>] ? read_measured_perf_ctrs+0x0/0xb0
[ 369.005494] [<ffffffff8101c2c0>] ? read_measured_perf_ctrs+0x0/0xb0
[ 369.005494] [<ffffffff8101c2c0>] ? read_measured_perf_ctrs+0x0/0xb0
[ 369.005494] [<ffffffff810596cb>] work_on_cpu+0x8b/0xb0
[ 369.005494] [<ffffffff81058680>] ? do_work_for_cpu+0x0/0x20
[ 369.005494] [<ffffffff8106f359>] ? trace_hardirqs_on_caller+0x29/0x1d0
[ 369.005494] [<ffffffff8101c2c0>] ? read_measured_perf_ctrs+0x0/0xb0
[ 369.005494] [<ffffffff8106f50d>] ? trace_hardirqs_on+0xd/0x10
[ 369.005494] [<ffffffff8101c45e>] get_measured_perf+0x1e/0xb0
[ 369.005494] [<ffffffff81340908>] __cpufreq_driver_getavg+0x78/0x80
[ 369.005494] [<ffffffff8134298c>] do_dbs_timer+0x2ac/0x390
[ 369.005494] [<ffffffff813426e0>] ? do_dbs_timer+0x0/0x390
[ 369.005494] [<ffffffff81058845>] run_workqueue+0x105/0x240
[ 369.005494] [<ffffffff810587f3>] ? run_workqueue+0xb3/0x240
[ 369.005494] [<ffffffff81058a2f>] worker_thread+0xaf/0x130
[ 369.005494] [<ffffffff8105d320>] ? autoremove_wake_function+0x0/0x40
[ 369.005494] [<ffffffff81058980>] ? worker_thread+0x0/0x130
[ 369.005494] [<ffffffff8105cef9>] kthread+0x49/0x90
[ 369.005494] [<ffffffff8100d9aa>] child_rip+0xa/0x20
[ 369.005494] [<ffffffff8100d2be>] ? restore_args+0x0/0x30
[ 369.005494] [<ffffffff8105ceb0>] ? kthread+0x0/0x90
[ 369.005494] [<ffffffff8100d9a0>] ? child_rip+0x0/0x20
[ 369.005494] getty D 0000000000000000 2912 2882 1
[ 369.005494] ffff88001943b858 0000000000000046 ffffe20000adb108 0000000000000001
[ 369.005494] ffffffff818d6200 ffff880019401280 ffff8800158743c0 ffff8800194015c8
[ 369.005494] 000000011943b7e8 ffff880019401280 0000000000000002 000000000000002f
[ 369.005494] Call Trace:
[ 369.005494] [<ffffffff81442f85>] schedule_timeout+0x95/0xd0
[ 369.005494] [<ffffffff8106f359>] ? trace_hardirqs_on_caller+0x29/0x1d0
[ 369.005494] [<ffffffff8106f50d>] ? trace_hardirqs_on+0xd/0x10
[ 369.005494] [<ffffffff81445b7b>] ? _spin_unlock_irq+0x2b/0x40
[ 369.005494] [<ffffffff81442de0>] wait_for_common+0x160/0x190
[ 369.005494] [<ffffffff8103c420>] ? default_wake_function+0x0/0x10
[ 369.005494] [<ffffffff8106f359>] ? trace_hardirqs_on_caller+0x29/0x1d0
[ 369.005494] [<ffffffff81442ea8>] wait_for_completion+0x18/0x20
[ 369.005494] [<ffffffff81058c26>] flush_cpu_workqueue+0x56/0xb0
[ 369.005494] [<ffffffff81058d00>] ? wq_barrier_func+0x0/0x10
[ 369.005494] [<ffffffff81059340>] ? flush_workqueue+0x0/0xb0
[ 369.005494] [<ffffffff810593d3>] flush_workqueue+0x93/0xb0
[ 369.005494] [<ffffffff81059340>] ? flush_workqueue+0x0/0xb0
[ 369.005494] [<ffffffff81059400>] flush_scheduled_work+0x10/0x20
[ 369.005494] [<ffffffff8121a528>] tty_ldisc_release+0x48/0x200
[ 369.005494] [<ffffffff8106f50d>] ? trace_hardirqs_on+0xd/0x10
[ 369.005494] [<ffffffff81214d6a>] tty_release_dev+0x44a/0x580
[ 369.005494] [<ffffffff81071c05>] ? print_lock_contention_bug+0x25/0x120
[ 369.005494] [<ffffffff811aa687>] ? _raw_spin_lock+0x57/0x150
[ 369.005494] [<ffffffff81214eb9>] tty_release+0x19/0x30
[ 369.005494] [<ffffffff810dc195>] __fput+0xd5/0x230
[ 369.005494] [<ffffffff810dc30d>] fput+0x1d/0x30
[ 369.005494] [<ffffffff810d896b>] filp_close+0x5b/0x90
[ 369.005494] [<ffffffff81047719>] put_files_struct+0x79/0xe0
[ 369.005494] [<ffffffff810477ce>] exit_files+0x4e/0x60
[ 369.005494] [<ffffffff810492b3>] do_exit+0x173/0x990
[ 369.005494] [<ffffffff81445b7b>] ? _spin_unlock_irq+0x2b/0x40
[ 369.005494] [<ffffffff81049b18>] do_group_exit+0x48/0xd0
[ 369.005494] [<ffffffff810550b4>] get_signal_to_deliver+0x2e4/0x420
[ 369.005494] [<ffffffff8100b7f1>] do_notify_resume+0xc1/0x8e0
[ 369.005494] [<ffffffff8106d6f9>] ? trace_hardirqs_off_caller+0x29/0xd0
[ 369.005494] [<ffffffff81445bcf>] ? _spin_unlock_irqrestore+0x3f/0x70
[ 369.005494] [<ffffffff8106f359>] ? trace_hardirqs_on_caller+0x29/0x1d0
[ 369.005494] [<ffffffff8121a80a>] ? tty_ldisc_deref+0x5a/0x80
[ 369.005494] [<ffffffff8144571d>] ? trace_hardirqs_off_thunk+0x3a/0x3c
[ 369.005494] [<ffffffff8100c701>] ? sysret_signal+0x5/0x109
[ 369.005494] [<ffffffff8106f359>] ? trace_hardirqs_on_caller+0x29/0x1d0
[ 369.005494] [<ffffffff8100c797>] sysret_signal+0x9b/0x109
Thanks,
Fengguang
More information about the xorg
mailing list