Dave, dri guys,
Could you take a look at this circular dependency please (below)?  I
observe it when suspending laptop with radeon drm loaded and with
lockdep enabled. It seems that the root of the problem is that
various vm ops such as drm_vm_open, drm_mmap) are called with mm
semaphore taken, and take dev->struct_mutex. On the other hand,
drm_rmmap_locked is called with dev->struct_mutex, and calls mtrr_del
which depends on mm semaphore indirectly.

What do you think?

Bug-Entry       : http://bugzilla.kernel.org/show_bug.cgi?id=12574
Subject         : possible circular locking dependency detected
Submitter       : Michael S. Tsirkin <[email protected]>
Date            : 2009-01-29 11:35 (11 days old)

/var/log/message dump below.


 =======================================================
 [ INFO: possible circular locking dependency detected ]
 2.6.29-rc4-mst-debug #95
 -------------------------------------------------------
 sleep.sh/6730 is trying to acquire lock:
  (&per_cpu(cpu_policy_rwsem, cpu)){----}, at: [<c02c0da1>] 
lock_policy_rwsem_write+0x31/0x70
 
 but task is already holding lock:
  (&cpu_hotplug.lock){--..}, at: [<c012d89a>] cpu_hotplug_begin+0x1a/0x50
 
 which lock already depends on the new lock.
 
 
 the existing dependency chain (in reverse order) is:
 
 -> #6 (&cpu_hotplug.lock){--..}:
        [<c0152221>] validate_chain+0xb51/0x1150
        [<c0152a66>] __lock_acquire+0x246/0xa50
        [<c01532d0>] lock_acquire+0x60/0x80
        [<c0366c5d>] mutex_lock_nested+0x9d/0x2e0
        [<c012d8fc>] get_online_cpus+0x2c/0x40
        [<c010d96f>] mtrr_del_page+0x2f/0x160
        [<c010dada>] mtrr_del+0x3a/0x50
        [<f851a342>] drm_rmmap_locked+0xc2/0x180 [drm]
        [<f8521d31>] drm_master_destroy+0x151/0x160 [drm]
        [<c022a37c>] kref_put+0x2c/0x80
        [<f8521af2>] drm_master_put+0x12/0x20 [drm]
        [<f851dd1b>] drm_release+0x25b/0x4a0 [drm]
        [<c019781d>] __fput+0xbd/0x1d0
        [<c0197c09>] fput+0x19/0x20
        [<c0194a47>] filp_close+0x47/0x70
        [<c0194ada>] sys_close+0x6a/0xc0
        [<c0103215>] sysenter_do_call+0x12/0x35
        [<ffffffff>] 0xffffffff
 
 -> #5 (&dev->struct_mutex){--..}:
        [<c0152221>] validate_chain+0xb51/0x1150
        [<c0152a66>] __lock_acquire+0x246/0xa50
        [<c01532d0>] lock_acquire+0x60/0x80
        [<c0366c5d>] mutex_lock_nested+0x9d/0x2e0
        [<f8522add>] drm_vm_open+0x2d/0x50 [drm]
        [<c012a397>] dup_mm+0x227/0x310
        [<c012b22f>] copy_process+0xd7f/0x1020
        [<c012b5e8>] do_fork+0x78/0x320
        [<c01017ef>] sys_clone+0x2f/0x40
        [<c0103215>] sysenter_do_call+0x12/0x35
        [<ffffffff>] 0xffffffff
 
 -> #4 (&mm->mmap_sem/1){--..}:
        [<c0152221>] validate_chain+0xb51/0x1150
        [<c0152a66>] __lock_acquire+0x246/0xa50
        [<c01532d0>] lock_acquire+0x60/0x80
        [<c01441e8>] down_write_nested+0x48/0x70
        [<c012a238>] dup_mm+0xc8/0x310
        [<c012b22f>] copy_process+0xd7f/0x1020
        [<c012b5e8>] do_fork+0x78/0x320
        [<c01017ef>] sys_clone+0x2f/0x40
        [<c0103292>] syscall_call+0x7/0xb
        [<ffffffff>] 0xffffffff
 
 -> #3 (&mm->mmap_sem){----}:
        [<c0152221>] validate_chain+0xb51/0x1150
        [<c0152a66>] __lock_acquire+0x246/0xa50
        [<c01532d0>] lock_acquire+0x60/0x80
        [<c0183d73>] might_fault+0x73/0x90
        [<c022f633>] copy_to_user+0x33/0x60
        [<c01a3975>] filldir64+0xb5/0xe0
        [<c01e0c2f>] sysfs_readdir+0x11f/0x1f0
        [<c01a3b0d>] vfs_readdir+0x8d/0xb0
        [<c01a3b99>] sys_getdents64+0x69/0xc0
        [<c0103292>] syscall_call+0x7/0xb
        [<ffffffff>] 0xffffffff
 
 -> #2 (sysfs_mutex){--..}:
        [<c0152221>] validate_chain+0xb51/0x1150
        [<c0152a66>] __lock_acquire+0x246/0xa50
        [<c01532d0>] lock_acquire+0x60/0x80
        [<c0366c5d>] mutex_lock_nested+0x9d/0x2e0
        [<c01e0f0c>] sysfs_addrm_start+0x2c/0xb0
        [<c01e14a0>] create_dir+0x40/0x90
        [<c01e1556>] sysfs_create_subdir+0x16/0x20
        [<c01e2770>] internal_create_group+0x50/0x1a0
        [<c01e28ec>] sysfs_create_group+0xc/0x10
        [<f81674fc>] cpufreq_stat_notifier_policy+0x9c/0x230 [cpufreq_stats]
        [<c036b007>] notifier_call_chain+0x37/0x80
        [<c0144d24>] __blocking_notifier_call_chain+0x44/0x60
        [<c0144d5a>] blocking_notifier_call_chain+0x1a/0x20
        [<c02c0226>] __cpufreq_set_policy+0xd6/0x230
        [<c02c14a8>] cpufreq_add_dev+0x4e8/0x6b0
        [<c029d5a5>] sysdev_driver_register+0x75/0x130
        [<c02bff55>] cpufreq_register_driver+0xb5/0x1c0
        [<f808b0bd>] uinput_destroy_device+0x4d/0x60 [uinput]
        [<c010111a>] do_one_initcall+0x2a/0x160
        [<c015bdf5>] sys_init_module+0x85/0x1b0
        [<c0103215>] sysenter_do_call+0x12/0x35
        [<ffffffff>] 0xffffffff
 
 -> #1 ((cpufreq_policy_notifier_list).rwsem){----}:
        [<c0152221>] validate_chain+0xb51/0x1150
        [<c0152a66>] __lock_acquire+0x246/0xa50
        [<c01532d0>] lock_acquire+0x60/0x80
        [<c0367441>] down_read+0x41/0x60
        [<c0144d0a>] __blocking_notifier_call_chain+0x2a/0x60
        [<c0144d5a>] blocking_notifier_call_chain+0x1a/0x20
        [<c02c1165>] cpufreq_add_dev+0x1a5/0x6b0
        [<c029d5a5>] sysdev_driver_register+0x75/0x130
        [<c02bff55>] cpufreq_register_driver+0xb5/0x1c0
        [<f808b0bd>] uinput_destroy_device+0x4d/0x60 [uinput]
        [<c010111a>] do_one_initcall+0x2a/0x160
        [<c015bdf5>] sys_init_module+0x85/0x1b0
        [<c0103215>] sysenter_do_call+0x12/0x35
        [<ffffffff>] 0xffffffff
 
 -> #0 (&per_cpu(cpu_policy_rwsem, cpu)){----}:
        [<c0151cbb>] validate_chain+0x5eb/0x1150
        [<c0152a66>] __lock_acquire+0x246/0xa50
        [<c01532d0>] lock_acquire+0x60/0x80
        [<c03674a1>] down_write+0x41/0x60
        [<c02c0da1>] lock_policy_rwsem_write+0x31/0x70
        [<c03655a5>] cpufreq_cpu_callback+0x45/0x80
        [<c036b007>] notifier_call_chain+0x37/0x80
        [<c0144b49>] __raw_notifier_call_chain+0x19/0x20
        [<c03574c9>] _cpu_down+0x79/0x280
        [<c012da5c>] disable_nonboot_cpus+0x7c/0x100
        [<c015cac5>] suspend_devices_and_enter+0xd5/0x170
        [<c015cd40>] enter_state+0x1b0/0x1c0
        [<c015cddf>] state_store+0x8f/0xd0
        [<c0228cf4>] kobj_attr_store+0x24/0x30
        [<c01e02d2>] sysfs_write_file+0xa2/0x100
        [<c0196e89>] vfs_write+0x99/0x130
        [<c01973cd>] sys_write+0x3d/0x70
        [<c0103215>] sysenter_do_call+0x12/0x35
        [<ffffffff>] 0xffffffff
 
 other info that might help us debug this:
 
 4 locks held by sleep.sh/6730:
  #0:  (&buffer->mutex){--..}, at: [<c01e025b>] sysfs_write_file+0x2b/0x100
  #1:  (pm_mutex){--..}, at: [<c015cbdb>] enter_state+0x4b/0x1c0
  #2:  (cpu_add_remove_lock){--..}, at: [<c012d83f>] 
cpu_maps_update_begin+0xf/0x20
  #3:  (&cpu_hotplug.lock){--..}, at: [<c012d89a>] cpu_hotplug_begin+0x1a/0x50
 
 stack backtrace:
 Pid: 6730, comm: sleep.sh Not tainted 2.6.29-rc4-mst-debug #95
 Call Trace:
  [<c015166c>] print_circular_bug_tail+0x7c/0xe0
  [<c0151cbb>] validate_chain+0x5eb/0x1150
  [<c0152a66>] __lock_acquire+0x246/0xa50
  [<c013cf1e>] ? __cancel_work_timer+0x2e/0x190
  [<c01532d0>] lock_acquire+0x60/0x80
  [<c02c0da1>] ? lock_policy_rwsem_write+0x31/0x70
  [<c03674a1>] down_write+0x41/0x60
  [<c02c0da1>] ? lock_policy_rwsem_write+0x31/0x70
  [<c02c0da1>] lock_policy_rwsem_write+0x31/0x70
  [<c03655a5>] cpufreq_cpu_callback+0x45/0x80
  [<c036b007>] notifier_call_chain+0x37/0x80
  [<c0144b49>] __raw_notifier_call_chain+0x19/0x20
  [<c03574c9>] _cpu_down+0x79/0x280
  [<c012d83f>] ? cpu_maps_update_begin+0xf/0x20
  [<c012da5c>] disable_nonboot_cpus+0x7c/0x100
  [<c02531cb>] ? acpi_disable_all_gpes+0x25/0x2a
  [<c015cac5>] suspend_devices_and_enter+0xd5/0x170
  [<c015cd40>] enter_state+0x1b0/0x1c0
  [<c015cddf>] state_store+0x8f/0xd0
  [<c015cd50>] ? state_store+0x0/0xd0
  [<c0228cf4>] kobj_attr_store+0x24/0x30
  [<c01e02d2>] sysfs_write_file+0xa2/0x100
  [<c0196e89>] vfs_write+0x99/0x130
  [<c0103247>] ? sysenter_exit+0xf/0x18
  [<c01e0230>] ? sysfs_write_file+0x0/0x100
  [<c01973cd>] sys_write+0x3d/0x70
  [<c0103215>] sysenter_do_call+0x12/0x35

-- 
MST

------------------------------------------------------------------------------
Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM)
software. With Adobe AIR, Ajax developers can use existing skills and code to
build responsive, highly engaging applications that combine the power of local
resources and data with the reach of the web. Download the Adobe AIR SDK and
Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com
--
_______________________________________________
Dri-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to