PREEMPT problems in cpufreq/powernow-k8
Hi!
I enabled CONFIG_PREEMPT to test swsusp, and it uncovered some problems with powernow-k8:
md: Autodetecting RAID arrays.
md: autorun ...
md: ... autorun DONE.
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 204k freed
Debug: sleeping function called from invalid context at include/linux/rwsem.h:43 in_atomic():1, irqs_disabled():0
Call Trace: [<c011b91a>] __might_sleep+0xaa/0xb8 [<c0333dd2>] cpufreq_notify_transition+0x32/0x168 [<c010fd5d>] transition_frequency+0xa1/0x104 [<c010fe9b>] powernowk8_target+0xdb/0x130 [<c03337ab>] __cpufreq_driver_target+0x1b/0x20 [<c03341ea>] cpufreq_governor_performance+0x1e/0x24 [<c033388a>] __cpufreq_governor+0x6e/0x10c [<c0333c5d>] __cpufreq_set_policy+0x139/0x144 [<c0333cb5>] cpufreq_set_policy+0x4d/0x94 [<c0334896>] cpufreq_proc_write+0x9e/0xb8 [<c0142440>] handle_mm_fault+0xc8/0x134 [<c0119217>] do_page_fault+0x13f/0x4fb [<c01190d8>] do_page_fault+0x0/0x4fb [<c0175c13>] proc_file_write+0x27/0x34 [<c014d67c>] vfs_write+0xa0/0xd0 [<c014d729>] sys_write+0x31/0x4c [<c0104ce7>] syscall_call+0x7/0xb
Adding 1051304k swap on /dev/hda1. Priority:-1 extents:1
powernowk8_target does preempt_disable(), and that calls cpufreq_notify_transition(). That does down(). Ouch.
Hmm, but on SMP systems frequency really should be changed with preempt_disable. How to deal with that?
Pavel
[Plus I get some more warnings during swsusp, all seem to be powernow-k8 related...]
Signature · 1 line
934a471f20d6580d5aad759bf0d97ddc