kernel_optimize_test/arch/parisc/kernel
Linus Torvalds 5336377d62 modules: Fix module_bug_list list corruption race
With all the recent module loading cleanups, we've minimized the code
that sits under module_mutex, fixing various deadlocks and making it
possible to do most of the module loading in parallel.

However, that whole conversion totally missed the rather obscure code
that adds a new module to the list for BUG() handling.  That code was
doubly obscure because (a) the code itself lives in lib/bugs.c (for
dubious reasons) and (b) it gets called from the architecture-specific
"module_finalize()" rather than from generic code.

Calling it from arch-specific code makes no sense what-so-ever to begin
with, and is now actively wrong since that code isn't protected by the
module loading lock any more.

So this commit moves the "module_bug_{finalize,cleanup}()" calls away
from the arch-specific code, and into the generic code - and in the
process protects it with the module_mutex so that the list operations
are now safe.

Future fixups:
 - move the module list handling code into kernel/module.c where it
   belongs.
 - get rid of 'module_bug_list' and just use the regular list of modules
   (called 'modules' - imagine that) that we already create and maintain
   for other reasons.

Reported-and-tested-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Adrian Bunk <bunk@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: stable@kernel.org
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-10-05 11:29:27 -07:00
..
.gitignore
asm-offsets.c parisc: Use of align_frame provides stack frame. 2010-05-30 05:38:27 -04:00
binfmt_elf32.c
cache.c parisc: remove trailing space in messages 2010-03-06 22:54:09 +00:00
drivers.c
entry.S parisc: Remove unnecessary macros from entry.S 2010-05-30 05:47:28 -04:00
firmware.c parisc: pass through '\t' to early (iodc) console 2010-08-04 11:17:10 -07:00
ftrace.c sched_clock: Add local_clock() API and improve documentation 2010-06-09 10:34:49 +02:00
hardware.c
head.S Rename .data.read_mostly to .data..read_mostly. 2010-03-03 11:26:00 +01:00
hpmc.S
init_task.c Rename .data.vmpages and .data.vm0.XXX to .data..vmpages and .data..vm0.XXX. 2010-03-03 11:26:00 +01:00
inventory.c
irq.c
Makefile
module.c modules: Fix module_bug_list list corruption race 2010-10-05 11:29:27 -07:00
pa7300lc.c
pacache.S
parisc_ksyms.c
pci-dma.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
pci.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
pdc_chassis.c
pdc_cons.c
perf_asm.S
perf_images.h
perf.c
process.c Make do_execve() take a const filename pointer 2010-08-17 18:07:43 -07:00
processor.c
ptrace.c
real2.S
setup.c
signal.c
signal32.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
signal32.h
smp.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
stacktrace.c
sys_parisc.c improve sys_newuname() for compat architectures 2010-03-12 15:52:32 -08:00
sys_parisc32.c
sys32.h
syscall_table.S improve sys_newuname() for compat architectures 2010-03-12 15:52:32 -08:00
syscall.S parisc: LWS fixes for syscall.S 2010-05-30 05:46:37 -04:00
time.c parisc: Convert to read/update_persistent_clock 2010-03-06 22:54:10 +00:00
topology.c
traps.c
unaligned.c parisc: use __ratelimit in unaligned.c 2010-03-06 22:54:59 +00:00
unwind.c
vmlinux.lds.S Rename .data.lock_aligned to .data..lock_aligned. 2010-03-03 11:26:01 +01:00