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