mirror_ubuntu-kernels/arch/arm64/include/asm
Mark Rutland bde8fff82e arm64: initialize all of CNTHCTL_EL2
In __init_el2_timers we initialize CNTHCTL_EL2.{EL1PCEN,EL1PCTEN} with a
RMW sequence, leaving all other bits UNKNOWN.

In general, we should initialize all bits in a register rather than
using an RMW sequence, since most bits are UNKNOWN out of reset, and as
new bits are added to the reigster their reset value might not result in
expected behaviour.

In the case of CNTHCTL_EL2, FEAT_ECV added a number of new control bits
in previously RES0 bits, which reset to UNKNOWN values, and may cause
issues for EL1 and EL0:

* CNTHCTL_EL2.ECV enables the CNTPOFF_EL2 offset (which itself resets to
  an UNKNOWN value) at EL0 and EL1. Since the offset could reset to
  distinct values across CPUs, when the control bit resets to 1 this
  could break timekeeping generally.

* CNTHCTL_EL2.{EL1TVT,EL1TVCT} trap EL0 and EL1 accesses to the EL1
  virtual timer/counter registers to EL2. When reset to 1, this could
  cause unexpected traps to EL2.

Initializing these bits to zero avoids these problems, and all other
bits in CNTHCTL_EL2 other than EL1PCEN and EL1PCTEN can safely be reset
to zero.

This patch ensures we initialize CNTHCTL_EL2 accordingly, only setting
EL1PCEN and EL1PCTEN, and setting all other bits to zero.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Marc Zyngier <maz@kernel.org>
Cc: Oliver Upton <oupton@google.com>
Cc: Will Deacon <will@kernel.org>
Reviewed-by: Oliver Upton <oupton@google.com>
Acked-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20210818161535.52786-1-mark.rutland@arm.com
Signed-off-by: Will Deacon <will@kernel.org>
2021-08-19 10:02:10 +01:00
..
vdso powerpc updates for 5.13 2021-04-30 12:22:28 -07:00
xen xen/arm: introduce XENFEAT_direct_mapped and XENFEAT_not_direct_mapped 2021-04-23 11:33:50 +02:00
acenv.h
acpi.h arm64/acpi: disallow AML memory opregions to access kernel memory 2020-07-14 18:02:03 +01:00
alternative-macros.h Merge branch 'for-next/insn' into for-next/core 2021-06-24 14:03:24 +01:00
alternative.h arm64: alternatives: Split up alternative.h 2020-11-09 21:49:34 +00:00
arch_gicv3.h arm64: Rename arm64-internal cache maintenance functions 2021-05-25 19:27:49 +01:00
arch_timer.h arm64: vdso: Avoid ISB after reading from cntvct_el0 2021-03-24 16:48:41 +00:00
archrandom.h arm64: Add support for SMCCC TRNG entropy source 2021-01-21 17:42:46 +00:00
arm_dsu_pmu.h
arm-cci.h
asm_pointer_auth.h arm64: Conditionally configure PTR_AUTH key of the kernel. 2021-06-15 11:32:31 +01:00
asm-bug.h
asm-offsets.h
asm-prototypes.h kasan: arm64: support specialized outlined tag mismatch checks 2021-05-26 23:31:26 +01:00
asm-uaccess.h arm64: vmlinux.ld.S: add assertion for reserved_pg_dir offset 2021-02-03 20:43:45 +00:00
assembler.h Merge branch 'for-next/caches' into for-next/core 2021-06-24 13:33:02 +01:00
atomic_ll_sc.h arm64: Move the LSE gas support detection to Kconfig 2020-01-15 12:50:48 +00:00
atomic_lse.h arm64: lse: fix LSE atomics with LLVM's integrated assembler 2020-01-16 17:25:10 +00:00
atomic.h locking/atomic: make ARCH_ATOMIC a Kconfig symbol 2021-05-26 13:20:49 +02:00
barrier.h arm64: Fix stale link in the arch_counter_enforce_ordering() comment 2021-05-18 10:47:13 +01:00
bitops.h
bitrev.h
boot.h arm64: get rid of TEXT_OFFSET 2020-09-07 15:00:52 +01:00
brk-imm.h arm64: kprobes: Use BRK instead of single-step when executing instructions out-of-line 2020-11-03 14:03:38 +00:00
bug.h
cache.h Revert "arm64: cache: Lower ARCH_DMA_MINALIGN to 64 (L1_CACHE_BYTES)" 2021-07-12 13:37:34 +01:00
cacheflush.h set_memory: allow querying whether set_direct_map_*() is actually enabled 2021-07-08 11:48:20 -07:00
checksum.h arm64: csum: cast to the proper type 2021-03-15 10:57:21 +00:00
clocksource.h arm64: Introduce asm/vdso/clocksource.h 2020-03-21 15:23:55 +01:00
cmpxchg.h arm64: fix unreachable code issue with cmpxchg 2019-09-17 12:11:50 +01:00
compat.h compat: lift compat_s64 and compat_u64 to <asm-generic/compat.h> 2020-09-17 13:00:46 -04:00
compiler.h CFI: Move function_nocfi() into compiler.h 2021-06-14 09:12:09 -07:00
cpu_ops.h arm64: fix some spelling mistakes in the comments by codespell 2020-09-07 14:18:50 +01:00
cpu.h arm64: cpuinfo: Split AArch32 registers out into a separate struct 2021-06-11 13:25:40 +01:00
cpufeature.h arm64: Allow mismatched 32-bit EL0 support 2021-06-11 13:25:40 +01:00
cpuidle.h arm64: Add cpuidle context save/restore helpers 2021-06-17 18:00:39 +01:00
cputype.h arm64: cputype: Add CPU implementor & types for the Apple M1 cores 2021-04-08 20:18:38 +09:00
current.h
daifflags.h arm64: entry: always set GIC_PRIO_PSR_I_SET during entry 2021-05-05 18:13:58 +01:00
dcc.h
debug-monitors.h arm64: kprobes: Use BRK instead of single-step when executing instructions out-of-line 2020-11-03 14:03:38 +00:00
device.h arm64: Remove dev->archdata.iommu pointer 2020-06-30 11:59:49 +02:00
dmi.h
efi.h arm64: Rename arm64-internal cache maintenance functions 2021-05-25 19:27:49 +01:00
el2_setup.h arm64: initialize all of CNTHCTL_EL2 2021-08-19 10:02:10 +01:00
elf.h Split the old READ_IMPLIES_EXEC workaround from executable PT_GNU_STACK 2020-06-05 13:45:21 -07:00
esr.h arm64: mte: add in-kernel MTE helpers 2020-12-22 12:55:07 -08:00
exception.h arm64: entry: make NMI entry/exit functions static 2021-06-07 11:35:56 +01:00
exec.h arm64: uaccess: remove set_fs() 2020-12-02 19:49:11 +00:00
extable.h arm64: Improve diagnostics when trapping BRK with FAULT_BRK_IMM 2020-09-18 16:35:54 +01:00
fb.h
fixmap.h arm64/fixmap: make notes of fixed_addresses more precisely 2020-08-08 19:25:04 +01:00
fpsimd.h arm64/sve: Skip flushing Z registers with 128 bit vectors 2021-05-26 20:04:28 +01:00
fpsimdmacros.h arm64/sve: Split _sve_flush macro into separate Z and predicate flushes 2021-05-26 20:04:28 +01:00
ftrace.h arm64: implement ftrace with regs 2019-11-06 14:17:35 +00:00
futex.h arm64: uaccess: rename privileged uaccess routines 2020-12-02 19:49:10 +00:00
hardirq.h arm64: irqstat: Get rid of duplicated declaration 2020-11-23 10:31:05 +01:00
hugetlb.h mm/hugetlb: change parameters of arch_make_huge_pte() 2021-06-30 20:47:26 -07:00
hw_breakpoint.h arm64: remove pointless __KERNEL__ guards 2019-08-05 11:06:33 +01:00
hwcap.h Merge branch 'for-next/mte' into for-next/core 2020-10-02 12:16:11 +01:00
hyp_image.h KVM: arm64: Allow using kvm_nvhe_sym() in hyp code 2021-03-19 12:01:20 +00:00
hypervisor.h arm/arm64: Probe for the presence of KVM hypervisor 2021-03-31 09:16:55 +01:00
image.h
insn-def.h arm64: insn: avoid circular include dependency 2021-06-21 11:58:03 +01:00
insn.h arm64: insn: avoid circular include dependency 2021-06-21 11:58:03 +01:00
io.h asm-generic/io.h: implement pci_remap_cfgspace using ioremap_np 2021-04-08 20:18:38 +09:00
irq_work.h arm64: smp: Add missing prototype for some smp.c functions 2021-03-29 10:41:42 +01:00
irq.h arm64: irq: allow FIQs to be handled 2021-03-24 20:19:30 +00:00
irqflags.h arm64: Always keep DAIF.[IF] in sync 2021-03-24 20:19:30 +00:00
jump_label.h
kasan.h arm64: kasan: simplify and inline MTE functions 2021-02-26 09:41:03 -08:00
Kbuild set_memory: allow querying whether set_direct_map_*() is actually enabled 2021-07-08 11:48:20 -07:00
kernel-pgtable.h arm64/mm: Rename ARM64_SWAPPER_USES_SECTION_MAPS 2021-06-21 18:22:23 +01:00
kexec.h arm64: Use ELF fields defined in 'struct kimage' 2021-03-08 12:06:28 -07:00
kfence.h set_memory: allow querying whether set_direct_map_*() is actually enabled 2021-07-08 11:48:20 -07:00
kgdb.h
kprobes.h arm64: kprobes: Remove redundant kprobe_step_ctx 2020-11-10 17:12:30 +00:00
kvm_arm.h KVM: arm64: Save/restore MTE registers 2021-06-22 14:08:05 +01:00
kvm_asm.h arm64 updates for 5.14 2021-06-28 14:04:24 -07:00
kvm_emulate.h KVM: arm64: Introduce MTE VM feature 2021-06-22 14:08:05 +01:00
kvm_host.h KVM/arm64 updates for v5.14. 2021-06-25 11:24:24 -04:00
kvm_hyp.h Merge branch 'kvm-arm64/nvhe-panic-info' into kvmarm-master/next 2021-04-13 15:38:03 +01:00
kvm_mmu.h Merge branch arm64/for-next/caches into kvmarm-master/next 2021-06-18 17:30:39 +01:00
kvm_mte.h KVM: arm64: Save/restore MTE registers 2021-06-22 14:08:05 +01:00
kvm_pgtable.h KVM: arm64: Introduce two cache maintenance callbacks 2021-06-18 12:34:52 +01:00
kvm_ptrauth.h KVM: arm64: Update context references from host to hyp 2020-09-15 18:39:02 +01:00
kvm_ras.h
kvm_types.h KVM: arm64: Use common KVM implementation of MMU memory caches 2020-07-09 13:29:43 -04:00
linkage.h arm64: Add assembly annotations for weak-PI-alias madness 2021-06-01 18:34:38 +01:00
lse.h arm64: lse: Fix LSE atomics with LLVM 2020-02-18 18:10:49 +00:00
memory.h Merge branch 'akpm' (patches from Andrew) 2021-07-02 12:08:10 -07:00
mman.h arm64: mte: Validate the PROT_MTE request via arch_validate_flags() 2020-09-04 12:46:07 +01:00
mmu_context.h arm64/mm: Fix ttbr0 values stored in struct thread_info for software-pan 2021-06-15 19:03:24 +01:00
mmu.h KVM: arm64: Move BP hardening helpers into spectre.h 2020-11-16 10:40:18 +00:00
mmzone.h
module.h arch: split MODULE_ARCH_VERMAGIC definitions out to <asm/vermagic.h> 2020-04-23 10:50:26 +09:00
module.lds.h kasan: arm64: support specialized outlined tag mismatch checks 2021-05-26 23:31:26 +01:00
mte-def.h KVM: arm64: Add ioctl to fetch/store tags in a guest 2021-06-22 14:08:06 +01:00
mte-kasan.h kasan: speed up mte_set_mem_tag_range 2021-05-25 19:21:58 +01:00
mte.h ARM: 2021-06-28 15:40:51 -07:00
neon-intrinsics.h
neon.h
numa.h numa: Move numa implementation to common code 2021-01-14 15:08:55 -08:00
page-def.h arm64/mm: Unify CONT_PTE_SHIFT 2020-09-11 16:33:43 +01:00
page.h Merge branch 'akpm' (patches from Andrew) 2021-07-02 12:08:10 -07:00
paravirt.h x86/paravirt: Switch time pvops functions to use static_call() 2021-03-11 16:17:52 +01:00
patching.h arm64: insn: decouple patching from insn code 2021-06-11 11:19:27 +01:00
pci.h arm64: Enable PCI write-combine resources under sysfs 2020-09-18 14:05:13 +01:00
percpu.h KVM: arm64: Support per_cpu_ptr in nVHE hyp code 2020-12-04 10:08:34 +00:00
perf_event.h arm64: perf: Add more support on caps under sysfs 2021-06-03 09:53:17 +01:00
pgalloc.h mm/thp: define default pmd_pgtable() 2021-07-01 11:06:03 -07:00
pgtable-hwdef.h arm64/mm: Drop SECTION_[SHIFT|SIZE|MASK] 2021-06-15 12:08:39 +01:00
pgtable-prot.h arm64: mm: Remove unused support for Normal-WT memory type 2021-06-01 18:53:53 +01:00
pgtable-types.h arm64: add support for folded p4d page tables 2020-06-04 19:06:21 -07:00
pgtable.h mm: rename p4d_page_vaddr to p4d_pgtable and make it return pud_t * 2021-07-08 11:48:22 -07:00
pointer_auth.h arm64: Conditionally configure PTR_AUTH key of the kernel. 2021-06-15 11:32:31 +01:00
preempt.h sched/core: Initialize the idle task with preemption disabled 2021-05-12 13:01:45 +02:00
probes.h arm64/fpsimd: add <asm/insn.h> to <asm/kprobes.h> to fix fpsimd build 2020-11-23 10:59:00 +00:00
proc-fns.h arm64: mm: convert cpu_do_switch_mm() to C 2020-02-27 14:30:50 +00:00
processor.h Merge branch 'for-next/ptrauth' into for-next/core 2021-06-24 14:06:23 +01:00
ptdump.h arm64: Add __init section marker to some functions 2021-04-08 17:45:10 +01:00
ptrace.h arm64: fix compat syscall return truncation 2021-08-03 10:35:03 +01:00
pvclock-abi.h KVM: arm64: Implement PV_TIME_FEATURES call 2019-10-21 19:20:27 +01:00
rwonce.h arm64: lto: Strengthen READ_ONCE() to acquire when CONFIG_LTO=y 2020-11-09 21:49:34 +00:00
scs.h arm64: scs: Drop unused 'tmp' argument to scs_{load, save} asm macros 2021-05-27 17:55:33 +01:00
sdei.h Merge branch 'for-next/entry' into for-next/core 2021-06-24 14:01:55 +01:00
seccomp.h arm64: Enable seccomp architecture tracking 2020-11-20 11:16:34 -08:00
sections.h KVM: arm64: Introduce a BSS section for use at Hyp 2021-03-19 12:01:20 +00:00
set_memory.h set_memory: allow querying whether set_direct_map_*() is actually enabled 2021-07-08 11:48:20 -07:00
setup.h arm64: Extract early FDT mapping from kaslr_early_init() 2021-02-09 13:47:50 +00:00
shmparam.h
signal32.h arm64: remove pointless __KERNEL__ guards 2019-08-05 11:06:33 +01:00
signal.h arm64: expose FAR_EL1 tag bits in siginfo 2020-11-23 18:17:39 +00:00
simd.h arm64: fpsimd: Make sure SVE setup is complete before SIMD is used 2020-01-14 17:11:21 +00:00
smp_plat.h arm64: Add missing header <asm/smp.h> in two files 2021-07-12 13:37:34 +01:00
smp.h arm64: smp: remove stack from secondary_data 2021-05-26 22:45:46 +01:00
sparsemem.h arm64: Force SPARSEMEM_VMEMMAP as the only memory management model 2021-04-23 14:18:21 +01:00
spectre.h Merge remote-tracking branch 'origin/kvm-arm64/csv3' into kvmarm-master/queue 2020-12-03 19:12:24 +00:00
spinlock_types.h
spinlock.h locking/arch: Move qrwlock.h include after qspinlock.h 2021-02-11 07:59:54 -05:00
stack_pointer.h
stackprotector.h arm64: Defer enabling pointer authentication on boot core 2021-02-09 13:50:57 +00:00
stacktrace.h arm64: stacktrace: fix comment 2021-08-03 10:39:35 +01:00
stage2_pgtable.h KVM: arm64: Remove unused page-table code 2020-09-11 15:51:15 +01:00
stat.h
string.h kasan, arm64: expand CONFIG_KASAN checks 2020-12-22 12:55:08 -08:00
suspend.h arm64: Preserve register x18 when CPU is suspended 2020-05-15 16:35:50 +01:00
sync_bitops.h
syscall_wrapper.h arm64: simplify syscall wrapper ifdeffery 2019-10-14 10:55:00 +01:00
syscall.h arm64: fix compat syscall return truncation 2021-08-03 10:35:03 +01:00
sysreg.h ARM: 2021-06-28 15:40:51 -07:00
system_misc.h ARM: 9095/1: ARM64: Remove arm_pm_restart() 2021-06-13 18:16:47 +01:00
thread_info.h arm64/process.c: fix Wmissing-prototypes build warnings 2021-03-25 09:50:16 +00:00
timex.h
tlb.h arm64: tlb: fix the TTL value of tlb_get_level 2021-06-23 14:52:57 +01:00
tlbflush.h arm64: use a common .arch preamble for inline assembly 2020-08-28 11:15:15 +01:00
topology.h arch_topology: Allow multiple entities to provide sched_freq_tick() callback 2021-03-10 10:55:37 +05:30
trans_pgd.h arm64: trans_pgd: hibernate: idmap the single page that holds the copy page routines 2021-01-27 15:41:12 +00:00
traps.h arm64: expose FAR_EL1 tag bits in siginfo 2020-11-23 18:17:39 +00:00
uaccess.h arm64: mte: Enable TCO in functions that can read beyond buffer limits 2021-04-11 10:56:39 +01:00
unistd32.h quota: Wire up quotactl_fd syscall 2021-06-07 12:11:24 +02:00
unistd.h arch: Wire up Landlock syscalls 2021-04-22 12:22:11 -07:00
uprobes.h
vdso.h arm64/vdso: Add time namespace page 2020-07-24 13:15:20 +01:00
vermagic.h arch: split MODULE_ARCH_VERMAGIC definitions out to <asm/vermagic.h> 2020-04-23 10:50:26 +09:00
virt.h arm64: Provide an 'upgrade to VHE' stub hypercall 2021-02-08 12:51:26 +00:00
vmalloc.h mm/vmalloc: provide fallback arch huge vmap support functions 2021-04-30 11:20:40 -07:00
vmap_stack.h mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
word-at-a-time.h arm64 updates for 5.13: 2021-04-26 10:25:03 -07:00
xor.h