On 11/14/2012 03:51 PM, Prarit Bhargava wrote:
When booting F18 on a 32 cpu system I repeatedly see errors like:
PERCPU: allocation failed, size=320 align=32, alloc from reserved chunk failed
Pid: 620, comm: udevd Not tainted 3.7.0-0.rc5.git1.2.fc19.x86_64 #1
Call Trace:
[<ffffffff81186c7d>] pcpu_alloc+0x9dd/0xa40
[<ffffffff810e8b5a>] ? mod_verify_sig+0x39a/0x460
[<ffffffff810e1f2e>] ? find_sec+0x5e/0x90
[<ffffffff81186f83>] __alloc_reserved_percpu+0x13/0x20
[<ffffffff810e5b5f>] load_module+0x40f/0x2290
[<ffffffff812e68b2>] ? cred_has_capability+0x62/0x100
[<ffffffff8109a333>] ? up_write+0x23/0x40
[<ffffffff810e7a32>] sys_init_module+0x52/0x230
[<ffffffff816fb799>] system_call_fastpath+0x16/0x1b
kvm: Could not allocate 320 bytes percpu data
This occurs because the lockdep code is allocating a giant chunk of memory in
the percpu data:
On 3.6.6-1:
14940 (D) __per_cpu_end
On 3.7.0-0:
1d5900 (D) __per_cpu_end
and in 3.7.0-0, a dump of the symbol map shows
efc0 (V) tstats_lookup_lock
f020 (V) cpu_lock_stats
1cef40 (V) stop_cpus_work
1cef80 (V) cpu_stopper
ie) the cpu_lock_stats takes up a huge chunk of the per_cpu memory.
I'm not sure what can be done about this; I suppose we could expand the reserved
area to allow for more module percpu allocation ...
My explanation above isn't correct, however, the solution is likely the same.
I'll post on LKML ...
P.