linux/arch/mips/mm
Huacai Chen 8759934e2b MIPS: Build uasm-generated code only once to avoid CPU Hotplug problem
This and the next patch resolve memory corruption problems while CPU
hotplug. Without these patches, memory corruption can triggered easily
as below:

On a quad-core MIPS platform, use "spawn" of UnixBench-5.1.3 (http://
code.google.com/p/byte-unixbench/) and a CPU hotplug script like this
(hotplug.sh):
while true; do
echo 0 >/sys/devices/system/cpu/cpu1/online
echo 0 >/sys/devices/system/cpu/cpu2/online
echo 0 >/sys/devices/system/cpu/cpu3/online
sleep 1
echo 1 >/sys/devices/system/cpu/cpu1/online
echo 1 >/sys/devices/system/cpu/cpu2/online
echo 1 >/sys/devices/system/cpu/cpu3/online
sleep 1
done

Run "hotplug.sh" and then run "spawn 10000", spawn will get segfault
after a few minutes.

This patch:
Currently, clear_page()/copy_page() are generated by Micro-assembler
dynamically. But they are unavailable until uasm_resolve_relocs() has
finished because jump labels are illegal before that. Since these
functions are shared by every CPU, we only call build_clear_page()/
build_copy_page() only once at boot time. Without this patch, programs
will get random memory corruption (segmentation fault, bus error, etc.)
while CPU Hotplug (e.g. one CPU is using clear_page() while another is
generating it in cpu_cache_init()).

For similar reasons we modify build_tlb_refill_handler()'s invocation.

V2:
1, Rework the code to make CPU#0 can be online/offline.
2, Introduce cpu_has_local_ebase feature since some types of MIPS CPU
   need a per-CPU tlb_refill_handler().

Signed-off-by: Huacai Chen <chenhc@lemote.com>
Signed-off-by: Hongbing Hu <huhb@lemote.com>
Acked-by: David Daney <david.daney@cavium.com>
Patchwork: http://patchwork.linux-mips.org/patch/4994/
Acked-by: John Crispin <blogic@openwrt.org>
2013-05-08 01:19:06 +02:00
..
c-octeon.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
c-r3k.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
c-r4k.c MIPS: Fix ISA level which causes secondary cache init bypassing and more 2013-04-05 15:10:45 +02:00
c-tx39.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
cache.c MIPS: Replace 'kernel_uses_smartmips_rixi' with 'cpu_has_rixi'. 2012-09-13 17:00:34 -05:00
cerr-sb1.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
cex-gen.S MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
cex-oct.S MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
cex-sb1.S MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
dma-default.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
extable.c MIPS: Eleminate filenames from comments 2009-08-03 17:52:40 +01:00
fault.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
gup.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
highmem.c MIPS: Highmem: Fix build error if CONFIG_DEBUG_HIGHMEM is disabled 2012-12-13 18:15:27 +01:00
hugetlbpage.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
init.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
ioremap.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
Makefile MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
mmap.c mips: Move __virt_addr_valid() to a place for MIPS 64 2013-01-31 15:14:59 +01:00
page-funcs.S MIPS: Refactor 'clear_page' and 'copy_page' functions. 2012-07-19 11:23:43 +02:00
page.c MIPS: Build uasm-generated code only once to avoid CPU Hotplug problem 2013-05-08 01:19:06 +02:00
pgtable-32.c MIPS: Limit fixrange_init() to the FIXMAP region 2011-07-25 17:26:54 +01:00
pgtable-64.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
sc-ip22.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
sc-mips.c MIPS: Fix ISA level which causes secondary cache init bypassing and more 2013-04-05 15:10:45 +02:00
sc-r5k.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
sc-rm7k.c MIPS: RM7000: Symbol should be static 2010-10-04 18:33:54 +01:00
tlb-r3k.c Disintegrate asm/system.h for MIPS 2012-03-28 18:30:02 +01:00
tlb-r4k.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
tlb-r8k.c Disintegrate asm/system.h for MIPS 2012-03-28 18:30:02 +01:00
tlbex-fault.S MIPS: Don't include <asm/page.h> unnecessarily. 2012-12-28 17:04:04 +01:00
tlbex.c MIPS: Build uasm-generated code only once to avoid CPU Hotplug problem 2013-05-08 01:19:06 +02:00
uasm.c MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00