linux/arch/arm/kernel
Russell King e616c59140 ARM: Don't allow highmem on SMP platforms without h/w TLB ops broadcast
We suffer an unfortunate combination of "features" which makes highmem
support on platforms without hardware TLB maintainence broadcast difficult:

- we need kmap_high_get() support for DMA cache coherence
- this requires kmap_high() to take a spinlock with IRQs disabled
- kmap_high() occasionally calls flush_all_zero_pkmaps() to clear
  out old mappings
- flush_all_zero_pkmaps() calls flush_tlb_kernel_range(), which
  on s/w IPI'd systems eventually calls smp_call_function_many()
- smp_call_function_many() must not be called with IRQs disabled:

WARNING: at kernel/smp.c:380 smp_call_function_many+0xc4/0x240()
Modules linked in:
Backtrace:
[<c00306f0>] (dump_backtrace+0x0/0x108) from [<c0286e6c>] (dump_stack+0x18/0x1c)
 r6:c007cd18 r5:c02ff228 r4:0000017c
[<c0286e54>] (dump_stack+0x0/0x1c) from [<c0053e08>] (warn_slowpath_common+0x50/0x80)
[<c0053db8>] (warn_slowpath_common+0x0/0x80) from [<c0053e50>] (warn_slowpath_null+0x18/0x1c)
 r7:00000003 r6:00000001 r5:c1ff4000 r4:c035fa34
[<c0053e38>] (warn_slowpath_null+0x0/0x1c) from [<c007cd18>] (smp_call_function_many+0xc4/0x240)
[<c007cc54>] (smp_call_function_many+0x0/0x240) from [<c007cec0>] (smp_call_function+0x2c/0x38)
[<c007ce94>] (smp_call_function+0x0/0x38) from [<c005980c>] (on_each_cpu+0x1c/0x38)
[<c00597f0>] (on_each_cpu+0x0/0x38) from [<c0031788>] (flush_tlb_kernel_range+0x50/0x58)
 r6:00000001 r5:00000800 r4:c05f3590
[<c0031738>] (flush_tlb_kernel_range+0x0/0x58) from [<c009c600>] (flush_all_zero_pkmaps+0xc0/0xe8)
[<c009c540>] (flush_all_zero_pkmaps+0x0/0xe8) from [<c009c6b4>] (kmap_high+0x8c/0x1e0)
[<c009c628>] (kmap_high+0x0/0x1e0) from [<c00364a8>] (kmap+0x44/0x5c)
[<c0036464>] (kmap+0x0/0x5c) from [<c0109dfc>] (cramfs_readpage+0x3c/0x194)
[<c0109dc0>] (cramfs_readpage+0x0/0x194) from [<c0090c14>] (__do_page_cache_readahead+0x1f0/0x290)
[<c0090a24>] (__do_page_cache_readahead+0x0/0x290) from [<c0090ce4>] (ra_submit+0x30/0x38)
[<c0090cb4>] (ra_submit+0x0/0x38) from [<c0089384>] (filemap_fault+0x3dc/0x438)
 r4:c1819988
[<c0088fa8>] (filemap_fault+0x0/0x438) from [<c009d21c>] (__do_fault+0x58/0x43c)
[<c009d1c4>] (__do_fault+0x0/0x43c) from [<c009e8cc>] (handle_mm_fault+0x104/0x318)
[<c009e7c8>] (handle_mm_fault+0x0/0x318) from [<c0033c98>] (do_page_fault+0x188/0x1e4)
[<c0033b10>] (do_page_fault+0x0/0x1e4) from [<c0033ddc>] (do_translation_fault+0x7c/0x84)
[<c0033d60>] (do_translation_fault+0x0/0x84) from [<c002b474>] (do_DataAbort+0x40/0xa4)
 r8:c1ff5e20 r7:c0340120 r6:00000805 r5:c1ff5e54 r4:c03400d0
[<c002b434>] (do_DataAbort+0x0/0xa4) from [<c002bcac>] (__dabt_svc+0x4c/0x60)
...

So we disable highmem support on these systems.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2009-09-28 18:06:20 +01:00
..
.gitignore [ARM] 5194/1: update .gitignore 2008-08-12 19:54:09 +01:00
armksyms.c [ARM] support tracing when using newer compilers 2009-08-13 20:34:36 +02:00
arthur.c
asm-offsets.c
atags.c
atags.h
bios32.c PCI: arm: use generic INTx swizzle from PCI core 2009-01-07 11:13:13 -08:00
calls.S perf: Do the big rename: Performance Counters -> Performance Events 2009-09-21 14:28:04 +02:00
compat.c
compat.h
crunch-bits.S [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
crunch.c [ARM] 5577/2: ep93xx: syscon locked register functions 2009-07-09 16:10:51 +01:00
debug.S [ARM] 5412/1: XSCALE: add ice dcc support 2009-02-27 20:57:46 +00:00
dma-isa.c [ARM] dma: make DMA_MODE_xxx reflect ISA DMA settings 2009-01-02 12:18:53 +00:00
dma.c [ARM] dma: remove dmamode_t typedef 2009-01-02 12:34:55 +00:00
ecard.c arm: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-06 10:44:43 -08:00
ecard.h
elf.c [ARM] disable NX support for OABI-supporting kernels 2009-05-23 11:36:20 +01:00
entry-armv.S Thumb-2: Correctly handle undefined instructions in the kernel 2009-09-18 23:30:11 +01:00
entry-common.S Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm 2009-09-14 17:48:14 -07:00
entry-header.S make Linux bootable on ARM again 2009-09-26 10:06:53 -07:00
fiq.c [ARM] 5421/1: ftrace: fix crash due to tracing of __naked functions 2009-03-12 21:33:03 +00:00
ftrace.c small doc fix: ftrace_dyn_arch_init is called by ftrace_init 2008-12-12 11:15:45 +01:00
head-common.S Thumb-2: Implementation of the unified start-up and exceptions code 2009-07-24 12:32:54 +01:00
head-nommu.S nommu: Do not override the CP15 control reg value returned from initfunc 2009-07-24 12:34:59 +01:00
head.S Thumb-2: Implementation of the unified start-up and exceptions code 2009-07-24 12:32:54 +01: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 [ARM] Convert asm/io.h to linux/io.h 2008-09-06 12:10:45 +01:00
irq.c ARM: Show FIQ in /proc/interrupts on CONFIG_FIQ 2009-08-17 00:00:41 +01:00
isa.c [ARM] arch/arm/kernel/isa.c: missing definition of register_isa_ports 2009-01-08 15:53:08 +00:00
iwmmxt.S
kgdb.c kgdb, x86, arm, mips, powerpc: ignore user space single stepping 2008-09-26 10:36:41 -05:00
kprobes-decode.c [ARM] 5221/1: fix ldm/stm emulation for kprobes 2008-09-01 12:06:33 +01:00
kprobes.c ARM: 5715/1: Make kprobes unregistration SMP safe 2009-09-21 16:39:12 +01:00
machine_kexec.c [ARM] Storage class should be before const qualifier 2009-02-10 09:59:19 +00:00
Makefile Merge branch 'origin' into for-linus 2009-09-24 21:22:33 +01:00
module.c Thumb-2: Add support for loadable modules 2009-07-24 12:32:59 +01:00
process.c Thumb-2: Implementation of the unified start-up and exceptions code 2009-07-24 12:32:54 +01:00
ptrace.c nommu: ptrace support 2009-07-24 12:34:58 +01:00
ptrace.h
relocate_kernel.S
return_address.c [ARM] 5613/1: implement CALLER_ADDRESSx 2009-07-21 17:21:28 +01:00
setup.c ARM: 5580/2: ARM TCM (Tightly-Coupled Memory) support v3 2009-09-15 22:11:05 +01:00
signal.c Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm 2009-09-14 17:48:14 -07:00
signal.h
smp_scu.c [ARM] 5516/1: Flush the D-cache after initialising the SCU 2009-05-28 13:52:05 +01:00
smp_twd.c [ARM] smp: fix style issues in smp_twd.c 2009-05-17 19:16:41 +01:00
smp.c ARM: Don't allow highmem on SMP platforms without h/w TLB ops broadcast 2009-09-28 18:06:20 +01:00
stacktrace.c [ARM] 5613/1: implement CALLER_ADDRESSx 2009-07-21 17:21:28 +01:00
sys_arm.c headers: utsname.h redux 2009-09-23 18:13:10 -07:00
sys_oabi-compat.c Separate out common fstatat code into vfs_fstatat 2009-04-20 23:02:51 -04:00
tcm.c ARM: 5580/2: ARM TCM (Tightly-Coupled Memory) support v3 2009-09-15 22:11:05 +01:00
tcm.h ARM: 5580/2: ARM TCM (Tightly-Coupled Memory) support v3 2009-09-15 22:11:05 +01:00
thumbee.c Fix the teehbr_read function prototype 2008-11-10 14:14:11 +00:00
time.c [ARM] 5382/1: unwind: Reorganise the stacktrace support 2009-02-12 13:21:17 +00:00
traps.c [ARM] 5383/2: unwind: Add core support for ARM stack unwinding 2009-02-19 11:26:24 +00:00
unwind.c Thumb-2: Implementation of the unified start-up and exceptions code 2009-07-24 12:32:54 +01:00
vmlinux.lds.S Merge branch 'master' into for-linus 2009-09-22 21:01:40 +01:00
xscale-cp0.c [ARM] Convert asm/io.h to linux/io.h 2008-09-06 12:10:45 +01:00