lkml.org 
[lkml]   [2010]   [Jan]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: 2.6.33-rc4-git7 -- head/6104 is trying to acquire lock: (cpuidle_lock){+.+.+.}, at: [<c129e2ec>] show_current_governor+0x12/0x4e
From
Date
On Thu, 2010-01-21 at 17:33 -0800, Pallipadi, Venkatesh wrote:
> On Thu, 2010-01-21 at 11:18 -0800, Dave Jones wrote:
> > On Thu, Jan 21, 2010 at 12:50:09PM -0500, Miles Lane wrote:
> > > I was scanning the first few characters of all the files in /proc and
> > > /sys. I will attempt to determine which file(s) triggered this.
> >
> >
> > Dropped cpufreq-list from Cc, added cpuidle maintainers.
> > While they sound similar, they are unrelated.
>
> Thanks for reporting the problem. I am able to reproduce this locally.
> Will followup once I have some time to poke at it a bit more.
>

This lockdep message started with Eric's
sysfs: Add lockdep annotations for the sysfs active reference
patch.

But, this looks like a false positive to me. Eric, can you please take a
look at this? I am not a sysfs expert, so I may be overlooking something
obvious here...


The sysfs usage is cpuidle is like below

/sys/devices/system/cpu/cpuidle
/sys/devices/system/cpu/cpuidle/current_driver
/sys/devices/system/cpu/cpuidle/current_governor_ro

/sys/devices/system/cpu/cpu0/cpuidle
/sys/devices/system/cpu/cpu0/cpuidle/state0
/sys/devices/system/cpu/cpu0/cpuidle/state0/desc
/sys/devices/system/cpu/cpu0/cpuidle/state0/latency
/sys/devices/system/cpu/cpu0/cpuidle/state0/name
/sys/devices/system/cpu/cpu0/cpuidle/state0/power
/sys/devices/system/cpu/cpu0/cpuidle/state0/time
/sys/devices/system/cpu/cpu0/cpuidle/state0/usage
: :
/sys/devices/system/cpu/cpu0/cpuidle/stateN
: :
/sys/devices/system/cpu/cpuM/cpuidle
: :

The lockdep complaint here happens when
#cat /sys/devices/system/cpu/cpuidle/current_governor_ro

as, the code there takes mutex_lock in .show
[ 606.464855] -> #0 (cpuidle_lock){+.+.+.}:
[ 606.464857] [<ffffffff8106a16b>] __lock_acquire+0x11b3/0x17e5
[ 606.464860] [<ffffffff8106a861>] lock_acquire+0xc4/0xe1
[ 606.464862] [<ffffffff815f4825>] mutex_lock_nested+0x69/0x2dc
[ 606.464866] [<ffffffff814ff32c>] show_current_governor+0x1f/0x68
[ 606.464868] [<ffffffff81372408>] sysdev_class_show+0x25/0x27
[ 606.464872] [<ffffffff8112d6c6>] sysfs_read_file+0xbf/0x141
[ 606.464875] [<ffffffff810dec63>] vfs_read+0xb0/0x14c
[ 606.464879] [<ffffffff810dedcd>] sys_read+0x4c/0x74
and
lockdep has already seen lock is held during add/remove
of /sys/devices/system/cpu/cpu0/cpuidle/state0/*
in other part of the code
[ 606.464805] -> #1 (s_active){++++.+}:
[ 606.464807] [<ffffffff8106a446>] __lock_acquire+0x148e/0x17e5
[ 606.464812] [<ffffffff8106a861>] lock_acquire+0xc4/0xe1
[ 606.464814] [<ffffffff8112e933>] sysfs_addrm_finish+0xd2/0x15c
[ 606.464816] [<ffffffff8112ea85>] sysfs_remove_dir+0x7a/0x8d
[ 606.464819] [<ffffffff812194e7>] kobject_del+0x16/0x37
[ 606.464823] [<ffffffff81219546>] kobject_release+0x3e/0x67
[ 606.464825] [<ffffffff8121a389>] kref_put+0x43/0x4f
[ 606.464827] [<ffffffff81219462>] kobject_put+0x47/0x4b
[ 606.464830] [<ffffffff814ff030>] cpuidle_remove_state_sysfs+0x30/0x69
[ 606.464832] [<ffffffff814fe87a>] cpuidle_disable_device+0x4a/0x54
[ 606.464835] [<ffffffff814fec84>] cpuidle_switch_governor+0x40/0x15b
[ 606.464837] [<ffffffff814fef09>] cpuidle_register_governor+0xc0/0xdf
[ 606.464839] [<ffffffff81c6a884>] init_menu+0x10/0x12
[ 606.464844] [<ffffffff810001fa>] do_one_initcall+0x5f/0x154
[ 606.464848] [<ffffffff81c3c6a3>] kernel_init+0x198/0x1ed
[ 606.464852] [<ffffffff81003014>] kernel_thread_helper+0x4/0x10

lock is not held in the .show functions
of /sys/devices/system/cpu/cpu*/cpuidle/state*/*
And the add of /sys/devices/system/cpu/cpuidle/* happens in core_init
call without the lock held. And this dir never gets removed.
I don't seem to see any deadlock possibility across the two sysfs dirs
here. Am I missing something related to how sysfs works?

Thanks,
Venki





\
 
 \ /
  Last update: 2010-01-23 02:37    [from the cache]
©2003-2011 Jasper Spaans