linux_dsm_epyc7002/arch/arm64/include/asm
Suzuki K Poulose 116c81f427 arm64: Work around systems with mismatched cache line sizes
Systems with differing CPU i-cache/d-cache line sizes can cause
problems with the cache management by software when the execution
is migrated from one to another. Usually, the application reads
the cache size on a CPU and then uses that length to perform cache
operations. However, if it gets migrated to another CPU with a smaller
cache line size, things could go completely wrong. To prevent such
cases, always use the smallest cache line size among the CPUs. The
kernel CPU feature infrastructure already keeps track of the safe
value for all CPUID registers including CTR. This patch works around
the problem by :

For kernel, dynamically patch the kernel to read the cache size
from the system wide copy of CTR_EL0.

For applications, trap read accesses to CTR_EL0 (by clearing the SCTLR.UCT)
and emulate the mrs instruction to return the system wide safe value
of CTR_EL0.

For faster access (i.e, avoiding to lookup the system wide value of CTR_EL0
via read_system_reg), we keep track of the pointer to table entry for
CTR_EL0 in the CPU feature infrastructure.

Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Andre Przywara <andre.przywara@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-09-09 15:03:29 +01:00
..
xen ARM64: XEN: Add a function to initialize Xen specific UEFI runtime services 2016-07-06 10:34:46 +01:00
acenv.h
acpi.h arm64: mark reserved memblock regions explicitly in iomem 2016-08-25 18:00:31 +01:00
alternative.h arm64: fix "dc cvau" cache operation on errata-affected core 2016-07-01 11:26:20 +01:00
arch_gicv3.h irqchip/gic-v3: Make sure read from ICC_IAR1_EL1 is visible on redestributor 2016-02-11 10:20:02 +00:00
arch_timer.h arm64: arch_timer: simplify accessors 2016-09-09 11:41:13 +01:00
arm-cci.h
asm-offsets.h
assembler.h arm64: Work around systems with mismatched cache line sizes 2016-09-09 15:03:29 +01:00
atomic_ll_sc.h locking/atomic, arch/arm64: Implement atomic{,64}_fetch_{add,sub,and,andnot,or,xor}{,_relaxed,_acquire,_release}() 2016-06-16 10:48:21 +02:00
atomic_lse.h locking/atomic, arch/arm64: Implement atomic{,64}_fetch_{add,sub,and,andnot,or,xor}{,_relaxed,_acquire,_release}() for LSE instructions 2016-06-16 10:48:22 +02:00
atomic.h locking/atomic: Remove linux/atomic.h:atomic_fetch_or() 2016-06-16 10:48:32 +02:00
barrier.h locking/barriers, arch/arm64: Implement LDXR+WFE based smp_cond_load_acquire() 2016-07-07 09:10:53 +02:00
bitops.h
bitrev.h
boot.h arm64: allow kernel Image to be loaded anywhere in physical memory 2016-02-18 18:16:53 +00:00
brk-imm.h arm64: move brk immediate argument definitions to separate header 2016-02-23 17:43:25 +00:00
bug.h arm64: move brk immediate argument definitions to separate header 2016-02-23 17:43:25 +00:00
cache.h arm64: Increase the max granular size 2015-10-28 19:09:17 +00:00
cacheflush.h arm64: mm: convert __dma_* routines to use start, size 2016-08-22 10:00:48 +01:00
cachetype.h arm64: cachetype: fix definitions of ICACHEF_* flags 2015-10-28 18:32:12 +00:00
checksum.h arm64: Implement optimised IP checksum helpers 2016-06-21 15:09:11 +01:00
cmpxchg.h locking/barriers, arch/arm64: Implement LDXR+WFE based smp_cond_load_acquire() 2016-07-07 09:10:53 +02:00
compat.h arm64: do not include ptrace.h from compat.h 2015-11-17 13:24:36 +00:00
compiler.h
cpu_ops.h
cpu.h arm64: cpuinfo: Expose MIDR_EL1 and REVIDR_EL1 to sysfs 2016-07-12 16:09:37 +01:00
cpufeature.h arm64: Work around systems with mismatched cache line sizes 2016-09-09 15:03:29 +01:00
cpuidle.h
cputype.h arm64: Enable workaround for Cavium erratum 27456 on thunderx-81xx 2016-07-07 18:35:21 +01:00
dcc.h arm64: dcc: simplify accessors 2016-09-09 11:41:13 +01:00
debug-monitors.h arm64: Kprobes with single stepping support 2016-07-19 15:03:20 +01:00
device.h
dma-mapping.h arm64: Allow for different DMA and CPU bus offsets 2016-06-06 13:48:54 -07:00
dmi.h
efi.h arm64 updates for 4.8: 2016-07-27 11:16:05 -07:00
elf.h arm64: Define AT_VECTOR_SIZE_ARCH for ARCH_DLINFO 2016-07-29 10:45:58 +01:00
esr.h arm64: Work around systems with mismatched cache line sizes 2016-09-09 15:03:29 +01:00
exception.h arch, ftrace: for KASAN put hard/soft IRQ entries into separate sections 2016-03-25 16:37:42 -07:00
exec.h
fb.h
fixmap.h arm64: Remove fixmap include fragility 2016-02-26 15:22:53 +00:00
fpsimd.h
fpsimdmacros.h
ftrace.h arm64: Fix misspellings in comments. 2016-03-04 18:19:17 +00:00
futex.h arm64: switch to relative exception tables 2016-02-24 14:57:26 +00:00
hardirq.h arm64: kernel: implement ACPI parking protocol 2016-02-16 15:12:32 +00:00
hugetlb.h arm64: hugetlb: add support for PTE contiguous bit 2015-12-21 17:26:00 +00:00
hw_breakpoint.h arm64: simplify sysreg manipulation 2016-09-09 11:43:50 +01:00
hwcap.h arm64/HWCAP: Use system wide safe values 2015-10-21 15:35:58 +01:00
hypervisor.h
insn.h arm64: insn: Add helpers for adrp offsets 2016-09-09 15:03:28 +01:00
io.h arm64/io: Allow I/O writes to use {W,X}ZR 2016-09-08 11:04:13 +01:00
irq_work.h
irq.h arm64: remove irq_count and do_softirq_own_stack() 2015-12-21 17:26:01 +00:00
irqflags.h arm64: debug: remove unused local_dbg_{enable, disable} macros 2016-07-19 16:59:40 +01:00
jump_label.h locking/static_keys: Add a new static_key interface 2015-08-03 11:34:15 +02:00
kasan.h arm64: move kernel image to base of vmalloc area 2016-02-18 18:16:44 +00:00
Kbuild arm64: Create sections.h 2016-08-25 18:00:29 +01:00
kernel-pgtable.h arm64: choose memstart_addr based on minimum sparsemem section alignment 2016-04-14 16:15:08 +01:00
kexec.h arm64/kexec: Add core kexec support 2016-06-27 16:31:25 +01:00
kgdb.h arm64: kgdb: Match pstate size with gdbserver protocol 2016-06-16 19:20:51 +01:00
kprobes.h arm64: Remove stack duplicating code from jprobes 2016-08-11 17:38:16 +01:00
kvm_arm.h KVM: ARM64: Fix typos 2016-06-14 11:16:27 +02:00
kvm_asm.h arm64 updates for 4.7: 2016-05-16 17:17:24 -07:00
kvm_coproc.h
kvm_emulate.h arm64/kvm: use ESR_ELx_EC to extract EC 2016-06-21 17:07:38 +01:00
kvm_host.h KVM: arm/arm64: Extend arch CAP checks to allow per-VM capabilities 2016-07-18 18:10:31 +01:00
kvm_hyp.h arm64: KVM: Refactor kern_hyp_va to deal with multiple offsets 2016-07-03 23:41:27 +02:00
kvm_mmio.h KVM: arm/arm64: Export mmio_read/write_bus 2016-05-20 15:39:42 +02:00
kvm_mmu.h arm/arm64: Get rid of KERN_TO_HYP 2016-07-03 23:41:27 +02:00
kvm_psci.h
linkage.h
lse.h arm64: lse: deal with clobbered IP registers after branch via PLT 2016-02-26 18:35:02 +00:00
memblock.h
memory.h arm64: update stale PAGE_OFFSET comment 2016-06-03 10:16:21 +01:00
mmu_context.h arm64: simplify contextidr_thread_switch 2016-09-09 11:43:50 +01:00
mmu.h arm64: mm: add param to force create_pgd_mapping() to use page mappings 2016-07-01 11:56:26 +01:00
mmzone.h arm64, numa: Add NUMA support for arm64 platforms. 2016-04-15 18:06:09 +01:00
module.h arm64: add support for kernel ASLR 2016-02-24 14:57:27 +00:00
neon.h
numa.h arm64, ACPI, NUMA: NUMA support based on SRAT and SLIT 2016-05-30 14:27:09 +02:00
opcodes.h arm64: opcodes.h: Add arm big-endian config options before including arm header 2016-03-29 16:04:57 +01:00
page.h arm64: move {PAGE,CONT}_SHIFT into Kconfig 2016-06-03 10:57:18 +01:00
paravirt.h arm64: introduce CONFIG_PARAVIRT, PARAVIRT_TIME_ACCOUNTING and pv_time_ops 2015-12-21 14:40:54 +00:00
pci.h PCI: Move pci_dma_* helpers to common code 2016-03-07 10:40:02 -06:00
percpu.h
perf_event.h arm64: perf: Move PMU register related defines to asm/perf_event.h 2016-03-29 16:04:57 +01:00
pgalloc.h arm64: get rid of superfluous __GFP_REPEAT 2016-06-24 17:23:52 -07:00
pgtable-hwdef.h arm64: simplify sysreg manipulation 2016-09-09 11:43:50 +01:00
pgtable-prot.h arm64: Introduce execute-only page access permissions 2016-08-25 18:00:29 +01:00
pgtable-types.h arm64: always use STRICT_MM_TYPECHECKS 2016-05-03 09:58:38 +01:00
pgtable.h arm64: hibernate: Support DEBUG_PAGEALLOC 2016-08-25 18:00:30 +01:00
probes.h arm64: kprobes instruction simulation support 2016-07-19 15:03:21 +01:00
proc-fns.h
processor.h arm64: remove duplicate macro __KERNEL__ check 2016-09-01 11:54:19 +01:00
ptdump.h arm64: mm: dump: make page table dumping reusable 2016-06-21 15:09:11 +01:00
ptrace.h arm64 updates for 4.8: 2016-07-27 11:16:05 -07:00
seccomp.h
sections.h arm64: vmlinux.ld: Add mmuoff data sections and move mmuoff text into idmap 2016-08-25 18:00:30 +01:00
shmparam.h arm64: fix COMPAT_SHMLBA definition for large pages 2015-12-02 14:00:10 +00:00
signal32.h
smp_plat.h arm64: remove dead-code depending on CONFIG_UP_LATE_INIT 2015-07-29 18:32:09 +01:00
smp.h arm64: smp: Add function to determine if cpus are stuck in the kernel 2016-06-27 16:24:51 +01:00
sparsemem.h
spinlock_types.h
spinlock.h arm64: spinlock: Ensure forward-progress in spin_unlock_wait 2016-06-15 11:23:14 +01:00
stackprotector.h
stacktrace.h arm64: ftrace: fix a stack tracer's output under function graph tracer 2015-12-21 17:26:02 +00:00
stage2_pgtable-nopmd.h kvm: arm64: Get rid of fake page table levels 2016-04-21 14:58:21 +02:00
stage2_pgtable-nopud.h kvm: arm64: Get rid of fake page table levels 2016-04-21 14:58:21 +02:00
stage2_pgtable.h kvm: arm64: Get rid of fake page table levels 2016-04-21 14:58:21 +02:00
stat.h
string.h arm64: add KASAN support 2015-10-12 17:46:36 +01:00
suspend.h arm64: hibernate: Resume when hibernate image created on non-boot CPU 2016-08-26 11:21:25 +01:00
sync_bitops.h
syscall.h
sysreg.h arm64: Work around systems with mismatched cache line sizes 2016-09-09 15:03:29 +01:00
system_misc.h arm64: cleanup unused UDBG_* define 2016-08-31 13:45:46 +01:00
thread_info.h arm64: simplify sysreg manipulation 2016-09-09 11:43:50 +01:00
timex.h
tlb.h arm64: tlbflush: avoid flushing when fullmm == 1 2015-10-07 11:56:21 +01:00
tlbflush.h arm64: tlb: remove redundant barrier from __flush_tlb_pgtable 2015-10-07 11:56:33 +01:00
topology.h arm64, numa: Add NUMA support for arm64 platforms. 2016-04-15 18:06:09 +01:00
traps.h arm64: Create sections.h 2016-08-25 18:00:29 +01:00
uaccess.h Implements HARDENED_USERCOPY verification of copy_to_user/copy_from_user 2016-08-08 14:48:14 -07:00
unistd32.h arm64: unistd32.h: wire up missing syscalls for compat tasks 2016-06-01 18:48:20 +01:00
unistd.h arm64: unistd32.h: wire up missing syscalls for compat tasks 2016-06-01 18:48:20 +01:00
vdso_datapage.h arm64: Add support for CLOCK_MONOTONIC_RAW in clock_gettime() vDSO 2016-07-12 16:06:32 +01:00
vdso.h
virt.h arm64/kvm: use {read,write}_sysreg() 2016-09-09 11:42:27 +01:00
word-at-a-time.h arm64: switch to relative exception tables 2016-02-24 14:57:26 +00:00