2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-18 02:04:05 +08:00
linux-next/arch/xtensa/kernel
Max Filippov ab45fb1450 xtensa: fix secondary core boot in SMP
There are multiple factors adding to the issue in different
configurations:

- commit 17290231df ("xtensa: add fixup for double exception raised
  in window overflow") added function window_overflow_restore_a0_fixup to
  double exception vector overlapping reset vector location of secondary
  processor cores.
- on MMUv2 cores RESET_VECTOR1_VADDR may point to uncached kernel memory
  making code overlapping depend on cache type and size, so that without
  cache or with WT cache reset vector code overwrites double exception
  code, making issue even harder to detect.
- on MMUv3 cores RESET_VECTOR1_VADDR may point to unmapped area, as
  MMUv3 cores change virtual address map to match MMUv2 layout, but
  reset vector virtual address is given for the original MMUv3 mapping.
- physical memory region of the secondary reset vector is not reserved
  in the physical memory map, and thus may be allocated and overwritten
  at arbitrary moment.

Fix it as follows:

- move window_overflow_restore_a0_fixup code to .text section.
- define RESET_VECTOR1_VADDR so that it points to reset vector in the
  cacheable MMUv2 map for cores with MMU.
- reserve reset vector region in the physical memory map. Drop separate
  literal section and build mxhead.S with text section literals.

Cc: <stable@vger.kernel.org>
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
2015-11-03 17:19:38 +03:00
..
.gitignore xtensa: tell git to ignore generated files 2013-06-05 10:14:19 -07:00
align.S xtensa: allow single-stepping through unaligned load/store 2014-08-14 11:59:30 +04:00
asm-offsets.c xtensa: Autogenerate offsets in struct thread_info 2015-04-12 21:03:29 +02:00
coprocessor.S xtensa: keep a3 and excsave1 on entry to exception handlers 2013-09-06 09:47:41 -07:00
entry.S xtensa: fixes for configs without loop option 2015-11-02 18:02:47 +03:00
head.S xtensa: fixes for configs without loop option 2015-11-02 18:02:47 +03:00
irq.c Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-09-01 14:33:35 -07:00
Makefile xtensa: fix secondary core boot in SMP 2015-11-03 17:19:38 +03:00
mcount.S xtensa: add static function tracer support 2013-07-08 01:18:57 -07:00
module.c xtensa: clean up files to make them code-style compliant 2012-12-18 21:10:25 -08:00
mxhead.S xtensa: add SMP support 2014-01-14 10:19:58 -08:00
pci-dma.c xtensa: reimplement DMA API using common helpers 2015-08-17 07:31:00 +03:00
pci.c PCI: Revert "PCI: Call pci_read_bridge_bases() from core instead of arch code" 2015-09-15 13:18:04 -05:00
perf_event.c xtensa: implement fake NMI 2015-08-17 07:33:39 +03:00
platform.c xtensa: cleanup ccount frequency tracking 2013-07-08 01:11:37 -07:00
process.c xtensa: Use generic idle loop 2013-04-08 17:39:29 +02:00
ptrace.c ARCH: AUDIT: audit_syscall_entry() should not require the arch 2014-09-23 16:21:26 -04:00
setup.c xtensa: fix secondary core boot in SMP 2015-11-03 17:19:38 +03:00
signal.c Merge branch 'exec_domain_rip_v2' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/misc 2015-04-15 13:53:55 -07:00
smp.c flush_icache_range: export symbol to fix build errors 2014-08-29 16:28:17 -07:00
stacktrace.c xtensa: move oprofile stack tracing to stacktrace.c 2015-08-17 07:32:49 +03:00
syscall.c xtensa: nommu: don't provide arch_get_unmapped_area 2014-10-21 13:28:48 +04:00
time.c xtensa/time: Migrate to new 'set-state' interface 2015-08-10 11:41:07 +02:00
traps.c xtensa: implement fake NMI 2015-08-17 07:33:39 +03:00
vectors.S xtensa: fix secondary core boot in SMP 2015-11-03 17:19:38 +03:00
vmlinux.lds.S xtensa: fix secondary core boot in SMP 2015-11-03 17:19:38 +03:00
xtensa_ksyms.c xtensa: export __{invalidate,flush}_dcache_range 2014-04-02 01:35:50 +04:00