android_kernel_motorola_sm6225/arch
Andrew Murray 7c591abd56 KVM: arm64: limit PMU version to PMUv3 for ARMv8.1
commit c854188ea01062f5a5fd7f05658feb1863774eaa upstream.

We currently expose the PMU version of the host to the guest via
emulation of the DFR0_EL1 and AA64DFR0_EL1 debug feature registers.
However many of the features offered beyond PMUv3 for 8.1 are not
supported in KVM. Examples of this include support for the PMMIR
registers (added in PMUv3 for ARMv8.4) and 64-bit event counters
added in (PMUv3 for ARMv8.5).

Let's trap the Debug Feature Registers in order to limit
PMUVer/PerfMon in the Debug Feature Registers to PMUv3 for ARMv8.1
to avoid unexpected behaviour.

Both ID_AA64DFR0.PMUVer and ID_DFR0.PerfMon follow the "Alternative ID
scheme used for the Performance Monitors Extension version" where 0xF
means an IMPLEMENTATION DEFINED PMU is implemented, and values 0x0-0xE
are treated as with an unsigned field (with 0x0 meaning no PMU is
present). As we don't expect to expose an IMPLEMENTATION DEFINED PMU,
and our cap is below 0xF, we can treat these fields as unsigned when
applying the cap.

Signed-off-by: Andrew Murray <andrew.murray@arm.com>
Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
[Mark: make field names consistent, use perfmon cap]
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Will Deacon <will@kernel.org>
[yuzenghui@huawei.com: adjust the context in read_id_reg()]
Signed-off-by: Zenghui Yu <yuzenghui@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-12-08 08:43:23 +01:00
..
alpha alpha: remove __init annotation from exported page_is_ram() 2023-08-16 18:13:01 +02:00
arc ARC: define ASM_NL and __ALIGN(_STR) outside #ifdef __ASSEMBLY__ guard 2023-08-11 11:45:11 +02:00
arm arm/xen: fix xen_vcpu_info allocation alignment 2023-12-08 08:43:23 +01:00
arm64 KVM: arm64: limit PMU version to PMUv3 for ARMv8.1 2023-12-08 08:43:23 +01:00
c6x
h8300 h8300: Fix build errors from do_exit() to make_task_dead() transition 2023-02-06 07:49:45 +01:00
hexagon hexagon: Fix function name in die() 2023-02-06 07:49:45 +01:00
ia64 treewide: Remove uninitialized_var() usage 2023-08-11 11:45:01 +02:00
m68k m68k: Fix invalid .section syntax 2023-09-23 10:47:57 +02:00
microblaze exit: Add and use make_task_dead. 2023-02-06 07:49:45 +01:00
mips MIPS: KVM: Fix a build warning about variable set but not used 2023-12-08 08:43:23 +01:00
nds32 exit: Add and use make_task_dead. 2023-02-06 07:49:45 +01:00
nios2 nios2: dts: Fix tse_mac "max-frame-size" property 2023-06-21 15:39:57 +02:00
openrisc openrisc: Properly store r31 to pt_regs on unhandled exceptions 2023-05-17 11:13:19 +02:00
parisc parisc/pgtable: Do not drop upper 5 address bits of physical address 2023-11-28 16:46:35 +00:00
powerpc powerpc/64e: Fix wrong test in __ptep_test_and_clear_young() 2023-10-25 11:16:36 +02:00
riscv riscv: Bump COMMAND_LINE_SIZE value to 1024 2023-04-05 11:15:36 +02:00
s390 s390/pci: fix iommu bitmap allocation 2023-10-25 11:17:02 +02:00
sh sh: bios: Revive earlyprintk support 2023-11-20 10:29:19 +01:00
sparc sparc: fix up arch_cpu_finalize_init() build breakage. 2023-08-16 18:12:59 +02:00
um um: Fix hostaudio build errors 2023-09-23 10:48:09 +02:00
unicore32
x86 KVM: x86: Ignore MSR_AMD64_TW_CFG access 2023-11-28 16:46:34 +00:00
xtensa xtensa: ISS: fix call to split_if_spec 2023-08-11 11:45:23 +02:00
.gitignore
Kconfig init: Provide arch_cpu_finalize_init() 2023-08-08 19:49:17 +02:00