From: Thomas Renninger <trenn@suse.de>
To: Jiri Slaby <jirislaby@gmail.com>
Cc: davej@codemonkey.org.uk, cpufreq@lists.linux.org.uk,
Greg KH <gregkh@suse.de>,
Linux kernel mailing list <linux-kernel@vger.kernel.org>,
"Pallipadi, Venkatesh" <venkatesh.pallipadi@intel.com>
Subject: Re: cpufreq deadlock (?sysfs related?)
Date: Thu, 22 Nov 2007 14:54:13 +0100 [thread overview]
Message-ID: <1195739653.10587.89.camel@queen.suse.de> (raw)
In-Reply-To: <47455DEE.4050107@gmail.com>
On Thu, 2007-11-22 at 11:46 +0100, Jiri Slaby wrote:
> Hi,
>
> some people hit this bug, I'm able to reproduce it too, but I'm out of ideas
> what could have cause it. Here are some traces of D processes:
Could this have to do with the problem Venkatesh/Luming recently sent a
patch for to the cpufreq list:
Eliminate cpufreq_userspace scaling_setspeed deadlock
http://article.gmane.org/gmane.linux.kernel.cpufreq/5629
Thomas
>
> tee D ffff8100041e3c28 0 15798 13503
> ffff8100041e3bc8 0000000000000086 0000000000000000 ffffffff804a007b
> ffff8100041e3be8 ffff8100029d8000 ffff810001fc9560 ffffffff8828e094
> ffff810008af1ba0 ffff8100029d8000 ffff810001fc9560 ffff81002ae74e40
> Call Trace:
> [<ffffffff804a007b>] thread_return+0x0/0x5a5
> [<ffffffff8828e094>] :cpufreq_stats:cpufreq_stats_update+0x54/0x70 /*
> _spin_unlock */
> [<ffffffff804a0731>] wait_for_completion+0xa1/0xf0
> [<ffffffff8022ee90>] default_wake_function+0x0/0x10
> [<ffffffff802d583f>] sysfs_addrm_finish+0x1ef/0x270 /* wait_for_completion */
> [<ffffffff802d3fb6>] sysfs_hash_and_remove+0xa6/0xc0
> [<ffffffff880120cc>] :cpufreq_userspace:cpufreq_governor_userspace+0xac/0x220
> [<ffffffff803c4cd2>] __cpufreq_governor+0x32/0x110
> [<ffffffff803c56f3>] __cpufreq_set_policy+0x113/0x180
> [<ffffffff803c5852>] store_scaling_governor+0xf2/0x200
> [<ffffffff803c5f50>] handle_update+0x0/0x10
>
> here started the scheduled work ^^^
>
> [<ffffffff8026a2c3>] __alloc_pages+0x73/0x320 /* get_page_from_freelist */
> [<ffffffff803c662b>] store+0x7b/0x90 /* fattr->store(), holding write sem */
> [<ffffffff802d46ef>] sysfs_write_file+0xcf/0x150
> [<ffffffff8028c778>] vfs_write+0xc8/0x170
> [<ffffffff8028ce53>] sys_write+0x53/0x90
> [<ffffffff8020bd6e>] system_call+0x7e/0x83
>
> tee D 0000000000000000 0 15800 22179
> ffff8100058b7e28 0000000000000086 0000000000000000 001bdcd0000f32a0
> 0000000000000000 ffff810005f8ce40 ffff810001fd6e40 0000000000000001
> 0000000101281d48 000000008057bec0 0000000000000003 000280d000000000
> Call Trace:
> [<ffffffff804a1ed9>] __down_write_nested+0x79/0xc0
> [<ffffffff803c5e21>] lock_policy_rwsem_write+0x41/0x80
> [<ffffffff803c660c>] store+0x5c/0x90
> [<ffffffff802d46ef>] sysfs_write_file+0xcf/0x150
> [<ffffffff8028c778>] vfs_write+0xc8/0x170
> [<ffffffff8028ce53>] sys_write+0x53/0x90
> [<ffffffff8020bd6e>] system_call+0x7e/0x83
>
> cat D 0000000000000000 0 15801 13587
> ffff810008f69e38 0000000000000082 0000000000000000 ffffffff8026a119
> ffffffff80624fa0 ffff810005f8d560 ffffffff805703a0 ffffffff8057bec0
> 0000000101282286 0000000000000000 0000000000000003 000000010697e4a0
> Call Trace:
> [<ffffffff8026a119>] get_page_from_freelist+0x339/0x470
> [<ffffffff804a1fa9>] __down_read+0x79/0xb2 /* schedule */
> [<ffffffff803c6681>] lock_policy_rwsem_read+0x41/0x80
> [<ffffffff803c67cd>] show+0x4d/0x80
> [<ffffffff802d4bed>] sysfs_read_file+0x9d/0x150
> [<ffffffff8028c8e5>] vfs_read+0xc5/0x160
> [<ffffffff8028cdc3>] sys_read+0x53/0x90
> [<ffffffff8020bd6e>] system_call+0x7e/0x83
>
> I reproduced it by executing these 3 scripts:
> #!/bin/bash
>
> while true
> do
> echo userspace | tee /sys/devices/system/cpu/*/cpufreq/scaling_governor
> cat /sys/devices/system/cpu/*/cpufreq/scaling_governor
> sleep 2
> echo performance | tee /sys/devices/system/cpu/*/cpufreq/scaling_governor
> cat /sys/devices/system/cpu/*/cpufreq/scaling_governor
> sleep 4
> echo ondemand | tee /sys/devices/system/cpu/*/cpufreq/scaling_governor
> cat /sys/devices/system/cpu/*/cpufreq/scaling_governor
> sleep 10
> done
>
> #!/bin/bash
>
> while true
> do
> echo userspace | tee /sys/devices/system/cpu/*/cpufreq/scaling_governor
> cat /sys/devices/system/cpu/*/cpufreq/scaling_governor
> for (( a = 0; a < 10000; a++ )); do echo aaa >/dev/null; done
> echo performance | tee /sys/devices/system/cpu/*/cpufreq/scaling_governor
> cat /sys/devices/system/cpu/*/cpufreq/scaling_governor
> for (( a = 0; a < 11500; a++ )); do echo aaa >/dev/null; done
> echo ondemand | tee /sys/devices/system/cpu/*/cpufreq/scaling_governor
> cat /sys/devices/system/cpu/*/cpufreq/scaling_governor
> sleep 1
> done
>
> #!/bin/bash
>
> while true
> do cat /sys/devices/system/cpu/*/cpufreq/*
> sleep 10
> done
>
> This was on 2.6.23, however it is known to be also in older kernels. I
> suspect same race between wait_for_completion and complete() -- it wakes
> only one process, but not the other in sysfs/dir.c (would complete_all
> help?)? Any ideas?
>
> Here are events workers (seems OK):
> events/1 S 0000000000000000 0 13126 2
> ffff81003fe71ec0 0000000000000046 0000000000000000 0000000000000202
> ffff810001e120c0 ffff81003d821560 ffff810001fd6e40 00000000ffffffff
> 00000001012df7e1 0000000080248f2a 0000000000000003 ffff810001e120c8
> Call Trace:
> [<ffffffff80249060>] worker_thread+0x0/0x130
> [<ffffffff80249165>] worker_thread+0x105/0x130
> [<ffffffff8024cb20>] autoremove_wake_function+0x0/0x30
> [<ffffffff80249060>] worker_thread+0x0/0x130
> [<ffffffff80249060>] worker_thread+0x0/0x130
> [<ffffffff8024c71b>] kthread+0x4b/0x80
> [<ffffffff8020cbb8>] child_rip+0xa/0x12
> [<ffffffff8024c6d0>] kthread+0x0/0x80
> [<ffffffff8020cbae>] child_rip+0x0/0x12
>
> events/0 S 0000000000000000 0 7 2
> ffff81003ff0bec0 0000000000000046 0000000000000000 0000000000000202
> ffff810001e0a0c0 ffff810001fd7560 ffffffff805703a0 00000000ffffffff
> 00000001012df7c6 0000000080248f2a 0000000000000003 ffff810001e0a0c8
> Call Trace:
> [<ffffffff80249060>] worker_thread+0x0/0x130
> [<ffffffff80249165>] worker_thread+0x105/0x130
> [<ffffffff8024cb20>] autoremove_wake_function+0x0/0x30
> [<ffffffff80249060>] worker_thread+0x0/0x130
> [<ffffffff80249060>] worker_thread+0x0/0x130
> [<ffffffff8024c71b>] kthread+0x4b/0x80
> [<ffffffff8020cbb8>] child_rip+0xa/0x12
> [<ffffffff8024c6d0>] kthread+0x0/0x80
> [<ffffffff8020cbae>] child_rip+0x0/0x12
>
> I'm now trying to reproduce this with LOCKDEP on, but it's not easy to get
> to that state.
prev parent reply other threads:[~2007-11-22 13:54 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-11-22 10:46 cpufreq deadlock (?sysfs related?) Jiri Slaby
2007-11-22 13:54 ` Thomas Renninger [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1195739653.10587.89.camel@queen.suse.de \
--to=trenn@suse.de \
--cc=cpufreq@lists.linux.org.uk \
--cc=davej@codemonkey.org.uk \
--cc=gregkh@suse.de \
--cc=jirislaby@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=venkatesh.pallipadi@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.