OpenCloudOS-Kernel/arch/sh/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
..
cpu sh: fix up sh7786 dmaengine build. 2010-05-22 17:12:23 +09:00
vsyscall 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
.gitignore sh: Add an arch/sh/kernel/.gitignore 2008-07-29 08:29:32 +09:00
Makefile sh: support for platforms without PIO. 2010-06-02 16:31:42 +09:00
asm-offsets.c sh: Add R-standby sleep mode support 2009-10-30 14:38:45 +09:00
clkdev.c fix typos concerning "precedence" 2010-06-17 11:31:19 +02:00
cpufreq.c arch/sh/kernel: Use set_cpus_allowed_ptr 2010-03-29 11:40:37 +09:00
crash_dump.c sh: shuffle the elfcorehdr handling over to the crash dump code. 2010-05-07 17:58:55 +09:00
debugtraps.S sh: kgdb: Rework breakpoint handling on top of notifier chain. 2009-12-22 12:44:14 +09:00
disassemble.c sh: Add a simple code dumper for SUPERH32 show_regs(). 2008-12-22 18:43:49 +09:00
dma-nommu.c sh: Revamp PCI DMA coherence Kconfig bits. 2009-10-27 10:35:02 +09:00
dumpstack.c sh: flag the default unwinder as reliable. 2009-08-15 01:09:03 +09:00
dwarf.c sh: handle early calls to return_address() when using dwarf unwinder. 2010-05-25 16:16:40 +09:00
entry-common.S sh: Correct the offset of the return address in ret_from_exception 2010-02-08 10:46:46 +09:00
ftrace.c tracing: Unify arch_syscall_addr() implementations 2010-02-17 13:07:21 +01:00
head_32.S sh: Use correct mask when comparing PMB DATA array values 2010-04-25 20:44:23 +01:00
head_64.S sh64: Fix up early serial fixmap. 2010-01-12 15:22:26 +09:00
hw_breakpoint.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6 2010-05-19 11:36:03 -07:00
idle.c sh: CPU hotplug support. 2010-04-26 19:08:55 +09:00
init_task.c Use new __init_task_data macro in arch init_task.c files. 2009-09-21 06:27:08 +02:00
io.c sh: support for platforms without PIO. 2010-06-02 16:31:42 +09:00
io_generic.c sh: support for platforms without PIO. 2010-06-02 16:31:42 +09:00
io_trapped.c sh: support for platforms without PIO. 2010-06-02 16:31:42 +09:00
irq.c sh: CPU hotplug support. 2010-04-26 19:08:55 +09:00
irq_32.c sh: Annotate irq functions with "notrace" 2009-10-27 07:37:10 +09:00
irq_64.c sh: Annotate irq functions with "notrace" 2009-10-27 07:37:10 +09:00
kgdb.c kgdb,sh: update superh kgdb exception handling 2010-05-20 21:04:20 -05:00
kprobes.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
localtimer.c sh: CPU hotplug support. 2010-04-26 19:08:55 +09:00
machine_kexec.c lmb: rename to memblock 2010-07-14 17:14:00 +10:00
machvec.c sh: support for platforms without PIO. 2010-06-02 16:31:42 +09:00
module.c modules: Fix module_bug_list list corruption race 2010-10-05 11:29:27 -07:00
nmi_debug.c sh: nmi_debug support. 2009-09-01 17:38:32 +09:00
perf_callchain.c perf: Fix inconsistency between IP and callchain sampling 2010-01-28 14:31:20 +01:00
perf_event.c perf: Convert perf_event to local_t 2010-06-09 11:12:37 +02:00
process.c Merge branch 'sh/stable-updates' 2010-04-26 16:08:27 +09:00
process_32.c Make do_execve() take a const filename pointer 2010-08-17 18:07:43 -07:00
process_64.c Make do_execve() take a const filename pointer 2010-08-17 18:07:43 -07:00
ptrace_32.c ptrace: unify FDPIC implementations 2010-05-27 09:12:44 -07:00
ptrace_64.c Merge branch 'sh/stable-updates' 2010-02-15 14:49:37 +09:00
reboot.c sh: machine_ops based reboot support. 2010-01-20 16:42:52 +09:00
relocate_kernel.S sh: add kexec jump support 2009-03-18 18:57:43 +09:00
return_address.c sh: handle early calls to return_address() when using dwarf unwinder. 2010-05-25 16:16:40 +09:00
setup.c lmb: rename to memblock 2010-07-14 17:14:00 +10:00
sh_bios.c sh: sh_bios detection. 2010-01-12 18:42:52 +09:00
sh_ksyms_32.c sh: Clean up more superfluous symbol exports. 2009-10-27 11:51:19 +09:00
sh_ksyms_64.c sh: Clean up more superfluous symbol exports. 2009-10-27 11:51:19 +09:00
signal_32.c sh: Mass ctrl_in/outX to __raw_read/writeX conversion. 2010-01-26 12:58:40 +09:00
signal_64.c Merge branch 'sh/stable-updates' 2010-02-15 14:49:37 +09:00
smp.c sh: native_cpu_disable() build error when CONFIG_HOTPLUG_CPU=n 2010-04-29 23:28:38 +09:00
stacktrace.c sh: stacktrace: Properly terminate the trace entry buffer. 2009-08-15 01:11:37 +09:00
swsusp.c sh: hibernation support 2009-03-10 12:55:40 +09:00
sys_sh.c Add generic sys_olduname() 2010-03-12 15:52:32 -08:00
sys_sh32.c Make do_execve() take a const filename pointer 2010-08-17 18:07:43 -07:00
sys_sh64.c Make do_execve() take a const filename pointer 2010-08-17 18:07:43 -07:00
syscalls_32.S sh: unwire sys_recvmmsg. 2010-01-19 17:00:06 +09:00
syscalls_64.S sh64: wire up sys_accept4. 2010-01-19 17:00:31 +09:00
time.c sh: Convert sh to use read/update_persistent_clock 2010-03-05 02:04:38 +09:00
topology.c sh: Flag present CPUs hotpluggable in topology registration. 2010-04-26 18:20:29 +09:00
traps.c sh: Mass ctrl_in/outX to __raw_read/writeX conversion. 2010-01-26 12:58:40 +09:00
traps_32.c sh: Setup boot CPU VBR early to enable early page faults. 2010-02-17 12:33:22 +09:00
traps_64.c sh64: provide a stub per_cpu_trap_init() definition. 2010-05-18 15:23:48 +09:00
unwinder.c sh: unwinder: Use a special bug flag for unwinder traps. 2009-08-22 05:28:25 +09:00
vmlinux.lds.S sh: Kill off some superfluous legacy PMB special casing. 2010-02-16 21:43:38 +09:00