linux/arch/parisc/kernel
John David Anglin 2de8b4cc20 parisc: Rewrite cache flush code for PA8800/PA8900
Originally, I was convinced that we needed to use tmpalias flushes
everwhere, for both user and kernel flushes. However, when I modified
flush_kernel_dcache_page_addr, to use a tmpalias flush, my c8000
would crash quite early when booting.

The PDC returns alias values of 0 for the icache and dcache. This
indicates that either the alias boundary is greater than 16MB or
equivalent aliasing doesn't work. I modified the tmpalias code to
make it easy to try alternate boundaries. I tried boundaries up to
128MB but still kernel tmpalias flushes didn't work on c8000.

This led me to conclude that tmpalias flushes don't work on PA8800
and PA8900 machines, and that we needed to flush directly using the
virtual address of user and kernel pages. This is likely the major
cause of instability on the c8000 and rp34xx machines.

Flushing user pages requires doing a temporary context switch as we
have to flush pages that don't belong to the current context. Further,
we have to deal with pages that aren't present. If a page isn't
present, the flush instructions fault on every line.

Other code has been rearranged and simplified based on testing. For
example, I introduced a flush_cache_dup_mm routine. flush_cache_mm
and flush_cache_dup_mm differ in that flush_cache_mm calls
purge_cache_pages and flush_cache_dup_mm calls flush_cache_pages.
In some implementations, pdc is more efficient than fdc. Based on
my testing, I don't believe there's any performance benefit on the
c8000.

Signed-off-by: John David Anglin <dave.anglin@bell.net>
Signed-off-by: Helge Deller <deller@gmx.de>
2022-05-17 21:52:47 +02:00
..
syscalls arch: syscalls: simplify uapi/kapi directory creation 2022-03-31 12:03:46 +09:00
vdso32 parisc: Add vDSO support 2022-03-11 19:49:30 +01:00
vdso64 parisc: Add vDSO support 2022-03-11 19:49:30 +01:00
.gitignore .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
Makefile parisc: Switch from GENERIC_CPU_DEVICES to GENERIC_ARCH_TOPOLOGY 2022-03-29 21:37:12 +02:00
alternative.c parisc: Avoid calling SMP cache flush functions on cache-less machines 2022-03-16 22:52:12 +01:00
asm-offsets.c parisc: Add vDSO support 2022-03-11 19:49:30 +01:00
audit.c audit: add support for the openat2 syscall 2021-10-01 16:52:48 -04:00
cache.c parisc: Rewrite cache flush code for PA8800/PA8900 2022-05-17 21:52:47 +02:00
compat_audit.c audit: add support for the openat2 syscall 2021-10-01 16:52:48 -04:00
drivers.c bus: Make remove callback return void 2021-07-21 11:53:42 +02:00
entry.S parisc: Simplify fast path for non-access data TLB faults 2022-03-11 19:49:30 +01:00
firmware.c parisc: Add PDC locking functions for rendezvous code 2022-03-29 21:37:12 +02:00
ftrace.c Tracing updates for 5.16: 2021-11-01 20:05:19 -07:00
hardware.c parisc: hardware: Update references to parisc website 2020-06-01 23:02:39 +02:00
head.S parisc: Move common_stext into .text section when CONFIG_HOTPLUG_CPU=y 2022-03-29 21:37:12 +02:00
hpmc.S parisc: Re-use toc_stack as hpmc_stack 2022-01-11 11:57:37 +01:00
inventory.c parisc: Add qemu fw_cfg interface 2020-10-15 08:10:37 +02:00
irq.c parisc: Move CPU startup-related functions into .text section 2022-03-29 21:37:12 +02:00
jump_label.c parisc: Add static branch and JUMP_LABEL feature 2019-05-06 00:10:03 +02:00
kexec.c parisc: add support for kexec_file_load() syscall 2019-09-08 15:41:46 +02:00
kexec_file.c parisc: add support for kexec_file_load() syscall 2019-09-08 15:41:46 +02:00
kgdb.c parisc: Add kgdb io_module to read chars via PDC 2022-01-07 01:29:22 +01:00
kprobes.c parisc: Fix typos in comments 2022-05-08 20:01:12 +02:00
module.c mm: don't include asm/pgtable.h if linux/mm.h is already included 2020-06-09 09:39:13 -07:00
pa7300lc.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
pacache.S parisc: Move disable_sr_hashing_asm() into .text section 2022-03-29 21:37:12 +02:00
parisc_ksyms.c parisc: Drop strnlen_user() in favour of generic version 2021-09-09 12:44:30 +02:00
patch.c Revert "parisc: Fix patch code locking and flushing" 2022-05-08 20:01:11 +02:00
pci-dma.c parisc: Use constants to encode the space registers like SR_KERNEL 2022-03-11 19:49:31 +01:00
pci.c parisc: Drop comments which are already in pci.h 2019-09-05 16:41:11 +02:00
pdc_chassis.c kernel.h: split out panic and oops helpers 2021-07-01 11:06:04 -07:00
pdc_cons.c tty: pdc_cons, free tty_driver upon failure 2021-07-27 12:17:21 +02:00
pdt.c parisc: Make use of the helper macro kthread_run() 2021-11-01 07:36:01 +01:00
perf.c parisc/perf: open access for CAP_PERFMON privileged process 2020-04-16 12:19:08 -03:00
perf_asm.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
perf_images.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
process.c parisc: Rewrite arch_cpu_idle_dead() for CPU hotplugging 2022-03-29 21:37:12 +02:00
processor.c parisc: Merge model and model name into one line in /proc/cpuinfo 2022-05-08 20:01:11 +02:00
ptrace.c ptrace: Create ptrace_report_syscall_{entry,exit} in ptrace.h 2022-03-10 13:35:08 -06:00
real2.S parisc: Fix and improve kernel stack unwinding 2018-08-13 09:54:17 +02:00
relocate_kernel.S parisc: add kexec syscall support 2019-09-08 15:37:04 +02:00
setup.c Revert "parisc: Mark sched_clock unstable only if clocks are not syncronized" 2022-05-08 20:01:11 +02:00
signal.c ptrace: Cleanups for v5.18 2022-03-28 17:29:53 -07:00
signal32.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
signal32.h parisc: Add vDSO support 2022-03-11 19:49:30 +01:00
smp.c parisc: Find a new timesync master if current CPU is removed 2022-03-29 21:37:13 +02:00
stacktrace.c parisc: Fix implicit declaration of function '__kernel_text_address' 2021-11-13 22:10:56 +01:00
sys_parisc.c parisc: enhance warning regarding usage of O_NONBLOCK 2021-11-01 07:36:00 +01:00
sys_parisc32.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
syscall.S parisc: Add lws_atomic_xchg and lws_atomic_store syscalls 2022-01-07 01:29:21 +01:00
time.c parisc: Mark cr16 clock unstable on all SMP machines 2022-05-08 20:01:12 +02:00
toc.c parisc: Fix missing prototype for 'toc_intr' warning in toc.c 2022-01-20 20:39:19 +01:00
toc_asm.S parisc: Enable TOC (transfer of contents) feature unconditionally 2022-01-11 11:57:37 +01:00
topology.c parisc: Move store_cpu_topology() into text section 2022-03-29 21:37:12 +02:00
traps.c parisc: Fix typos in comments 2022-05-08 20:01:12 +02:00
unaligned.c parisc/unaligned: Enhance user-space visible output 2022-03-11 19:49:31 +01:00
unwind.c parisc: Move thread_info into task struct 2021-11-01 07:35:59 +01:00
vdso.c parisc: Add vDSO support 2022-03-11 19:49:30 +01:00
vmlinux.lds.S Revert "parisc: Fix backtrace to always include init funtion names" 2021-11-22 07:37:31 +01:00