macintosh/windfarm: possible circular locking dependency detected

From: Aaro Koskinen
Date: Fri Feb 08 2013 - 16:45:00 EST


Hi,

On iMac G5 (the first model, windfarm_pm81 reports "model 3"), enabling
LOCKDEP results in the following warnings when overtemp condition is
encountered.

The kernel is 3.8-rc6+ / 6bacaa9.

[ 7060.058340] windfarm: Clamping CPU frequency to minimum !
[ 7060.229688]
[ 7060.229756] ======================================================
[ 7060.229799] [ INFO: possible circular locking dependency detected ]
[ 7060.229847] 3.8.0-rc6-imac-00113-g6bacaa9 #2 Not tainted
[ 7060.229882] -------------------------------------------------------
[ 7060.229923] kwindfarm/475 is trying to acquire lock:
[ 7060.229958] (wf_lock){+.+.+.}, at: [<c000000000447b54>] .wf_set_overtemp+0x34/0xb0
[ 7060.230070]
[ 7060.230070] but task is already holding lock:
[ 7060.230111] ((wf_client_list).rwsem){.+.+.+}, at: [<c0000000000851a8>] .__blocking_notifier_call_chain+0x78/0x110
[ 7060.230219]
[ 7060.230219] which lock already depends on the new lock.
[ 7060.230219]
[ 7060.230275]
[ 7060.230275] the existing dependency chain (in reverse order) is:
[ 7060.230326]
[ 7060.230326] -> #1 ((wf_client_list).rwsem){.+.+.+}:
[ 7060.230407] [<c0000000006cbf98>] .down_read+0x58/0xa0
[ 7060.230463] [<c0000000000851a8>] .__blocking_notifier_call_chain+0x78/0x110
[ 7060.230521] [<c000000000447d70>] .wf_register_client+0xb0/0x1b0
[ 7060.230573] [<c000000000449f0c>] .wf_smu_probe+0x1c/0x40
[ 7060.230621] [<c00000000042e7d0>] .platform_drv_probe+0x30/0x50
[ 7060.230681] [<c00000000042c868>] .driver_probe_device+0xa8/0x290
[ 7060.230735] [<c00000000042cb5c>] .__driver_attach+0x10c/0x110
[ 7060.230787] [<c00000000042a10c>] .bus_for_each_dev+0x7c/0xe0
[ 7060.230837] [<c00000000042c1c8>] .driver_attach+0x28/0x40
[ 7060.230888] [<c00000000042bba8>] .bus_add_driver+0x1f8/0x330
[ 7060.230937] [<c00000000042d4f4>] .driver_register+0xa4/0x230
[ 7060.230989] [<c00000000042eb10>] .platform_driver_register+0x60/0x80
[ 7060.231044] [<c000000000949924>] .wf_smu_init+0x8c/0xa8
[ 7060.231098] [<c000000000009aa8>] .do_one_initcall+0x168/0x1e0
[ 7060.231151] [<c000000000927b70>] .kernel_init_freeable+0x134/0x204
[ 7060.231209] [<c00000000000a1bc>] .kernel_init+0x1c/0x120
[ 7060.231256] [<c000000000008aa0>] .ret_from_kernel_thread+0x64/0xc4
[ 7060.231311]
[ 7060.231311] -> #0 (wf_lock){+.+.+.}:
[ 7060.231381] [<c0000000000a3efc>] .lock_acquire+0x5c/0x90
[ 7060.231434] [<c0000000006cb5b0>] .mutex_lock_nested+0x90/0x3b0
[ 7060.231488] [<c000000000447b54>] .wf_set_overtemp+0x34/0xb0
[ 7060.231539] [<c00000000044a844>] .wf_smu_notify+0x914/0xf90
[ 7060.231590] [<c000000000084e2c>] .notifier_call_chain+0xcc/0x1f0
[ 7060.231643] [<c0000000000851c4>] .__blocking_notifier_call_chain+0x94/0x110
[ 7060.231699] [<c000000000448a18>] .wf_thread_func+0x88/0x150
[ 7060.231747] [<c00000000007c22c>] .kthread+0xec/0x100
[ 7060.231794] [<c000000000008aa0>] .ret_from_kernel_thread+0x64/0xc4
[ 7060.231850]
[ 7060.231850] other info that might help us debug this:
[ 7060.231850]
[ 7060.231905] Possible unsafe locking scenario:
[ 7060.231905]
[ 7060.231945] CPU0 CPU1
[ 7060.231976] ---- ----
[ 7060.232007] lock((wf_client_list).rwsem);
[ 7060.232054] lock(wf_lock);
[ 7060.232104] lock((wf_client_list).rwsem);
[ 7060.232160] lock(wf_lock);
[ 7060.233707]
[ 7060.233707] *** DEADLOCK ***
[ 7060.233707]
[ 7060.238238] 1 lock held by kwindfarm/475:
[ 7060.239756] #0: ((wf_client_list).rwsem){.+.+.+}, at: [<c0000000000851a8>] .__blocking_notifier_call_chain+0x78/0x110
[ 7060.241354]
[ 7060.241354] stack backtrace:
[ 7060.244453] Call Trace:
[ 7060.246001] [c0000000564534f0] [c000000000012978] .show_stack+0x78/0x1b0 (unreliable)
[ 7060.247582] [c0000000564535a0] [c0000000006d09c8] .print_circular_bug+0x2e8/0x320
[ 7060.249157] [c000000056453650] [c0000000000a36c0] .__lock_acquire+0x17b0/0x1a70
[ 7060.250734] [c0000000564537d0] [c0000000000a3efc] .lock_acquire+0x5c/0x90
[ 7060.252305] [c000000056453870] [c0000000006cb5b0] .mutex_lock_nested+0x90/0x3b0
[ 7060.253879] [c000000056453960] [c000000000447b54] .wf_set_overtemp+0x34/0xb0
[ 7060.255460] [c0000000564539f0] [c00000000044a844] .wf_smu_notify+0x914/0xf90
[ 7060.257019] [c000000056453ad0] [c000000000084e2c] .notifier_call_chain+0xcc/0x1f0
[ 7060.258598] [c000000056453b80] [c0000000000851c4] .__blocking_notifier_call_chain+0x94/0x110
[ 7060.260169] [c000000056453c30] [c000000000448a18] .wf_thread_func+0x88/0x150
[ 7060.261725] [c000000056453cc0] [c00000000007c22c] .kthread+0xec/0x100
[ 7060.263267] [c000000056453e30] [c000000000008aa0] .ret_from_kernel_thread+0x64/0xc4
[ 7060.270273] windfarm: Overtemp condition detected !
[ 7062.033879] windfarm: CPU frequency unclamped !
[ 7062.035508] windfarm: Overtemp condition cleared !
[ 7221.058391] windfarm: Clamping CPU frequency to minimum !
[ 7221.196337] windfarm: Overtemp condition detected !
[ 7223.030000] windfarm: CPU frequency unclamped !
[ 7223.067554] windfarm: Overtemp condition cleared !

A.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/