arm64: Add handling of CNTVCTSS traps
authorMarc Zyngier <maz@kernel.org>
Sun, 17 Oct 2021 12:42:24 +0000 (13:42 +0100)
committerWill Deacon <will@kernel.org>
Tue, 19 Oct 2021 09:56:20 +0000 (10:56 +0100)
Since CNTVCTSS obey the same control bits as CNTVCT, add the necessary
decoding to the hook table. Note that there is no known user of
this at the moment.

Acked-by: Will Deacon <will@kernel.org>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20211017124225.3018098-17-maz@kernel.org
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/include/asm/esr.h
arch/arm64/kernel/traps.c

index 29f97eb..a305ce2 100644 (file)
 #define ESR_ELx_SYS64_ISS_SYS_CNTVCT   (ESR_ELx_SYS64_ISS_SYS_VAL(3, 3, 2, 14, 0) | \
                                         ESR_ELx_SYS64_ISS_DIR_READ)
 
+#define ESR_ELx_SYS64_ISS_SYS_CNTVCTSS (ESR_ELx_SYS64_ISS_SYS_VAL(3, 3, 6, 14, 0) | \
+                                        ESR_ELx_SYS64_ISS_DIR_READ)
+
 #define ESR_ELx_SYS64_ISS_SYS_CNTFRQ   (ESR_ELx_SYS64_ISS_SYS_VAL(3, 3, 0, 14, 0) | \
                                         ESR_ELx_SYS64_ISS_DIR_READ)
 
 #define ESR_ELx_CP15_64_ISS_SYS_CNTVCT (ESR_ELx_CP15_64_ISS_SYS_VAL(1, 14) | \
                                         ESR_ELx_CP15_64_ISS_DIR_READ)
 
+#define ESR_ELx_CP15_64_ISS_SYS_CNTVCTSS (ESR_ELx_CP15_64_ISS_SYS_VAL(9, 14) | \
+                                        ESR_ELx_CP15_64_ISS_DIR_READ)
+
 #define ESR_ELx_CP15_32_ISS_SYS_CNTFRQ (ESR_ELx_CP15_32_ISS_SYS_VAL(0, 0, 14, 0) |\
                                         ESR_ELx_CP15_32_ISS_DIR_READ)
 
index b03e383..16710ca 100644 (file)
@@ -654,6 +654,12 @@ static const struct sys64_hook sys64_hooks[] = {
                .handler = cntvct_read_handler,
        },
        {
+               /* Trap read access to CNTVCTSS_EL0 */
+               .esr_mask = ESR_ELx_SYS64_ISS_SYS_OP_MASK,
+               .esr_val = ESR_ELx_SYS64_ISS_SYS_CNTVCTSS,
+               .handler = cntvct_read_handler,
+       },
+       {
                /* Trap read access to CNTFRQ_EL0 */
                .esr_mask = ESR_ELx_SYS64_ISS_SYS_OP_MASK,
                .esr_val = ESR_ELx_SYS64_ISS_SYS_CNTFRQ,
@@ -729,6 +735,11 @@ static const struct sys64_hook cp15_64_hooks[] = {
                .esr_val = ESR_ELx_CP15_64_ISS_SYS_CNTVCT,
                .handler = compat_cntvct_read_handler,
        },
+       {
+               .esr_mask = ESR_ELx_CP15_64_ISS_SYS_MASK,
+               .esr_val = ESR_ELx_CP15_64_ISS_SYS_CNTVCTSS,
+               .handler = compat_cntvct_read_handler,
+       },
        {},
 };