2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2025-01-22 04:24:02 +08:00
linux-next/arch/parisc/kernel
Helge Deller 3847dab774 parisc: Add alternative coding infrastructure
This patch adds the necessary code to patch a running kernel at runtime
to improve performance.

The current implementation offers a few optimizations variants:

- When running a SMP kernel on a single UP processor, unwanted assembler
  statements like locking functions are overwritten with NOPs. When
  multiple instructions shall be skipped, one branch instruction is used
  instead of multiple nop instructions.

- In the UP case, some pdtlb and pitlb instructions are patched to
  become pdtlb,l and pitlb,l which only flushes the CPU-local tlb
  entries instead of broadcasting the flush to other CPUs in the system
  and thus may improve performance.

- fic and fdc instructions are skipped if no I- or D-caches are
  installed.  This should speed up qemu emulation and cacheless systems.

- If no cache coherence is needed for IO operations, the relevant fdc
  and sync instructions in the sba and ccio drivers are replaced by
  nops.

- On systems which share I- and D-TLBs and thus don't have a seperate
  instruction TLB, the pitlb instruction is replaced by a nop.

Live-patching is done early in the boot process, just after having run
the system inventory. No drivers are running and thus no external
interrupts should arrive. So the hope is that no TLB exceptions will
occur during the patching. If this turns out to be wrong we will
probably need to do the patching in real-mode.

Signed-off-by: Helge Deller <deller@gmx.de>
2018-10-17 17:22:26 +02:00
..
.gitignore parisc: add arch/parisc/kernel/.gitignore 2008-10-10 16:32:28 +00:00
asm-offsets.c parisc: Drop per_cpu uaccess related exception_data struct 2017-05-10 17:46:13 +02:00
audit.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
cache.c parisc: Add alternative coding infrastructure 2018-10-17 17:22:26 +02:00
compat_audit.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
drivers.c parisc: Convert printk(KERN_LEVEL) to pr_lvl() 2018-06-28 17:14:44 +02:00
entry.S parisc: Add alternative coding infrastructure 2018-10-17 17:22:26 +02:00
firmware.c parisc: Add wrapper for pdc_instr() firmware function 2017-09-22 19:46:44 +02:00
ftrace.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
hardware.c parisc: Move various functions and strings to init section 2018-03-27 18:52:21 +02:00
head.S parisc: Check if secondary CPUs want own PDC calls 2018-03-02 10:04:46 +01:00
hpmc.S parisc: Fix exported address of os_hpmc handler 2018-10-17 08:18:01 +02:00
inventory.c parisc: Add Page Deallocation Table (PDT) support 2017-05-12 09:14:15 +02:00
irq.c parisc: Increase thread and stack size to 32kb 2017-07-31 08:41:26 +02:00
Makefile parisc: Fix missing binfmt_elf32.o build error 2018-04-14 11:17:59 +02:00
module.c parisc64: Add .opd based function descriptor dereference 2018-01-09 10:45:38 +01: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: Add alternative coding infrastructure 2018-10-17 17:22:26 +02:00
parisc_ksyms.c parisc: Export __cmpxchg_u64 unconditionally 2017-10-19 08:48:45 +02:00
pci-dma.c parisc: use generic dma_noncoherent_ops 2018-08-13 09:30:32 +02:00
pci.c parisc: Fix section mismatches 2018-05-02 21:47:35 +02:00
pdc_chassis.c proc: introduce proc_create_single{,_data} 2018-05-16 07:23:35 +02:00
pdc_cons.c treewide: Switch DEFINE_TIMER callbacks to struct timer_list * 2017-11-21 15:57:05 -08:00
pdt.c mm/memory_failure: Remove unused trapno from memory_failure 2018-01-23 12:17:42 -06:00
perf_asm.S Revert "parisc: fix trivial section name warnings" 2008-06-13 10:49:45 -04:00
perf_images.h
perf.c parisc: Static initialization of spinlocks in perf and unwind code 2017-08-22 16:34:33 +02:00
process.c parisc: Fix and improve kernel stack unwinding 2018-08-13 09:54:17 +02:00
processor.c parisc: Add hardware description to stack traces 2018-08-21 14:46:26 +02:00
ptrace.c parisc: Add HAVE_REGS_AND_STACK_ACCESS_API feature 2018-08-13 09:30:50 +02:00
real2.S parisc: Fix and improve kernel stack unwinding 2018-08-13 09:54:17 +02:00
setup.c parisc: Add alternative coding infrastructure 2018-10-17 17:22:26 +02:00
signal32.c signal: Unify and correct copy_siginfo_to_user32 2018-01-15 19:56:20 -06:00
signal32.h signal: Unify and correct copy_siginfo_to_user32 2018-01-15 19:56:20 -06:00
signal.c parisc: Add alternative coding infrastructure 2018-10-17 17:22:26 +02:00
smp.c parisc: Move setup_profiling_timer() out of init section 2018-05-18 16:21:49 +02:00
stacktrace.c parisc: Consolidate unwind initialization calls 2018-08-17 17:00:08 +02: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
sys_parisc.c parisc: Restore possibility to execute 64-bit applications 2018-08-17 16:45:24 +02:00
syscall_table.S parisc: Wire up io_pgetevents syscall 2018-06-28 17:43:00 +02:00
syscall.S parisc: Release spinlocks using ordered store 2018-10-17 08:18:01 +02:00
time.c parisc: time: Convert read_persistent_clock() to read_persistent_clock64() 2018-04-20 20:18:21 +02:00
topology.c parisc: Add CPU topology support 2017-11-17 15:27:22 +01:00
traps.c parisc: Fix address in HPMC IVA 2018-10-17 08:18:01 +02:00
unaligned.c signal/parisc: Use force_sig_fault where appropriate 2018-04-25 10:44:06 -05:00
unwind.c parisc: Fix boot failure of 64-bit kernel 2018-08-21 14:32:44 +02:00
vmlinux.lds.S parisc: Add alternative coding infrastructure 2018-10-17 17:22:26 +02:00