linux/arch/arm/mm
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
..
abort-ev4.S
abort-ev4t.S
abort-ev5t.S
abort-ev5tj.S
abort-ev6.S Add core support for ARMv6/v7 big-endian 2009-05-30 14:00:18 +01:00
abort-ev7.S [ARM] 5227/1: Add the ENDPROC declarations to the .S files 2008-09-01 12:06:34 +01:00
abort-lv4t.S [ARM] nommu: abort handler fixup for !CPU_CP15_MMU cores. 2006-09-28 20:15:46 +01:00
abort-macro.S
abort-nommu.S [ARM] 5227/1: Add the ENDPROC declarations to the .S files 2008-09-01 12:06:34 +01:00
alignment.c Thumb-2: Implement the unified arch/arm/mm support 2009-07-24 12:32:56 +01:00
cache-fa.S ARM: Add support for FA526 v2 2009-03-25 13:10:01 +02:00
cache-feroceon-l2.c [ARM] Kirkwood: small L2 code cleanup 2009-03-28 22:39:30 -04:00
cache-l2x0.c [ARM] Convert asm/io.h to linux/io.h 2008-09-06 12:10:45 +01:00
cache-v3.S [ARM] Remove unnecessary mach/hardware.h includes in arch/arm/mm 2008-11-28 23:20:39 +00:00
cache-v4.S [ARM] Remove unnecessary mach/hardware.h includes in arch/arm/mm 2008-11-28 23:20:39 +00:00
cache-v4wb.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
cache-v4wt.S [ARM] Remove unnecessary mach/hardware.h includes in arch/arm/mm 2008-11-28 23:20:39 +00:00
cache-v6.S [ARM] 5488/1: ARM errata: Invalidation of the Instruction Cache operation can fail 2009-04-30 20:12:47 +01:00
cache-v7.S Thumb-2: Implement the unified arch/arm/mm support 2009-07-24 12:32:56 +01:00
cache-xsc3l2.c [ARM] xsc3: add highmem support to L2 cache handling code 2009-03-15 21:01:21 -04:00
context.c cpumask: use mm_cpumask() wrapper: arm 2009-09-24 09:34:49 +09:30
copypage-fa.c ARM: Add support for FA526 v2 2009-03-25 13:10:01 +02:00
copypage-feroceon.c [ARM] 5421/1: ftrace: fix crash due to tracing of __naked functions 2009-03-12 21:33:03 +00:00
copypage-v3.c [ARM] 5421/1: ftrace: fix crash due to tracing of __naked functions 2009-03-12 21:33:03 +00:00
copypage-v4mc.c [ARM] 5421/1: ftrace: fix crash due to tracing of __naked functions 2009-03-12 21:33:03 +00:00
copypage-v4wb.c [ARM] 5421/1: ftrace: fix crash due to tracing of __naked functions 2009-03-12 21:33:03 +00:00
copypage-v4wt.c [ARM] 5421/1: ftrace: fix crash due to tracing of __naked functions 2009-03-12 21:33:03 +00:00
copypage-v6.c [ARM] clearpage: provide our own clear_user_highpage() 2008-11-27 23:53:48 +00:00
copypage-xsc3.c [ARM] 5421/1: ftrace: fix crash due to tracing of __naked functions 2009-03-12 21:33:03 +00:00
copypage-xscale.c [ARM] 5421/1: ftrace: fix crash due to tracing of __naked functions 2009-03-12 21:33:03 +00:00
discontig.c mm: move bootmem descriptors definition to a single place 2008-07-24 10:47:14 -07:00
dma-mapping.c nommu: Add noMMU support to the DMA API 2009-07-24 12:35:02 +01:00
extable.c [ARM] Convert asm/uaccess.h to linux/uaccess.h 2008-09-06 11:35:55 +01:00
fault-armv.c [ARM] 5366/1: fix shared memory coherency with VIVT L1 + L2 caches 2009-01-28 16:55:00 +00:00
fault.c ARM: Add support for checking access permissions on prefetch aborts 2009-09-20 16:53:40 +01:00
fault.h [ARM] do_bad_area() always takes current and current->active_mm 2006-09-27 16:13:48 +01:00
flush.c cpumask: use mm_cpumask() wrapper: arm 2009-09-24 09:34:49 +09:30
highmem.c ARM: 5691/1: fix cache aliasing issues between kmap() and kmap_atomic() with highmem 2009-09-04 19:20:07 +01:00
init.c Merge branch 'origin' into for-linus 2009-09-24 21:22:33 +01:00
iomap.c [ARM] Convert asm/io.h to linux/io.h 2008-09-06 12:10:45 +01:00
ioremap.c omap iommu: simple virtual address space management 2009-05-19 08:23:49 +03:00
Kconfig ARM: 5700/1: ARM: Introduce ARM_L1_CACHE_SHIFT to define cache line size 2009-09-15 22:06:38 +01:00
Makefile Merge branch 'for-rmk' of git://gitorious.org/linux-gemini/mainline into devel 2009-03-26 23:10:11 +00:00
mm.h [ARM] fixmap support 2009-03-15 21:01:20 -04:00
mmap.c [ARM] Fix virtual to physical translation macro corner cases 2009-03-12 23:09:09 +00:00
mmu.c ARM: Don't allow highmem on SMP platforms without h/w TLB ops broadcast 2009-09-28 18:06:20 +01:00
nommu.c nommu: Include asm/setup.h in arch/arm/mm/nommu.c 2009-07-24 12:35:03 +01:00
pgd.c [ARM] remove memzero() 2008-11-27 12:37:59 +00:00
proc-arm6_7.S [ARM] Don't include asm/elf.h in asm code 2008-10-01 16:41:10 +01:00
proc-arm7tdmi.S [ARM] Don't include asm/elf.h in asm code 2008-10-01 16:41:10 +01:00
proc-arm9tdmi.S [ARM] Don't include asm/elf.h in asm code 2008-10-01 16:41:10 +01:00
proc-arm720.S [ARM] Don't include asm/elf.h in asm code 2008-10-01 16:41:10 +01:00
proc-arm740.S [ARM] Don't include asm/elf.h in asm code 2008-10-01 16:41:10 +01:00
proc-arm920.S [ARM] Don't include asm/elf.h in asm code 2008-10-01 16:41:10 +01:00
proc-arm922.S [ARM] Don't include asm/elf.h in asm code 2008-10-01 16:41:10 +01:00
proc-arm925.S [ARM] Don't include asm/elf.h in asm code 2008-10-01 16:41:10 +01:00
proc-arm926.S [ARM] Don't include asm/elf.h in asm code 2008-10-01 16:41:10 +01:00
proc-arm940.S [ARM] Don't include asm/elf.h in asm code 2008-10-01 16:41:10 +01:00
proc-arm946.S [ARM] Don't include asm/elf.h in asm code 2008-10-01 16:41:10 +01:00
proc-arm1020.S [ARM] Don't include asm/elf.h in asm code 2008-10-01 16:41:10 +01:00
proc-arm1020e.S [ARM] Don't include asm/elf.h in asm code 2008-10-01 16:41:10 +01:00
proc-arm1022.S [ARM] Don't include asm/elf.h in asm code 2008-10-01 16:41:10 +01:00
proc-arm1026.S [ARM] Don't include asm/elf.h in asm code 2008-10-01 16:41:10 +01:00
proc-fa526.S ARM: Add support for FA526 v2 2009-03-25 13:10:01 +02:00
proc-feroceon.S Merge branch 'for-rmk' of git://git.marvell.com/orion 2008-10-09 21:33:07 +01:00
proc-macros.S Merge branch 'devel-stable' into devel 2009-09-12 12:02:26 +01:00
proc-mohawk.S [ARM] pxa: add base support for Marvell's PXA168 processor line 2009-03-23 10:11:34 +08:00
proc-sa110.S [ARM] Don't include asm/elf.h in asm code 2008-10-01 16:41:10 +01:00
proc-sa1100.S [ARM] Don't include asm/elf.h in asm code 2008-10-01 16:41:10 +01:00
proc-syms.c [ARM] export __cpu_flush_dcache_page 2009-07-05 15:25:00 +01:00
proc-v6.S Add core support for ARMv6/v7 big-endian 2009-05-30 14:00:18 +01:00
proc-v7.S nommu: Do not set PRRR and NMRR in proc-v7.S if !MMU 2009-07-24 12:35:06 +01:00
proc-xsc3.S [ARM] pxa: add base PXA935 support due to CPUID change 2008-12-02 14:42:40 +08:00
proc-xscale.S Nicolas Pitre has a new email address 2009-09-15 09:37:12 -07:00
tlb-fa.S ARM: Add support for FA526 v2 2009-03-25 13:10:01 +02:00
tlb-v3.S kbuild: arm - use generic asm-offsets.h support 2005-09-09 21:08:59 +02:00
tlb-v4.S kbuild: arm - use generic asm-offsets.h support 2005-09-09 21:08:59 +02:00
tlb-v4wb.S kbuild: arm - use generic asm-offsets.h support 2005-09-09 21:08:59 +02:00
tlb-v4wbi.S kbuild: arm - use generic asm-offsets.h support 2005-09-09 21:08:59 +02:00
tlb-v6.S arm: Use __INIT macro instead of .text.init. 2009-04-27 19:51:58 -07:00
tlb-v7.S Check whether the TLB operations need broadcasting on SMP systems 2009-05-30 14:00:14 +01:00