Module Name: src
Committed By: ryo
Date: Sun May 29 23:39:59 UTC 2022
Modified Files:
src/sys/arch/aarch64/aarch64: idle_machdep.S vectors.S
Log Message:
ESR_EL1 and FAR_EL1 are not required in interrupt trapframe and their values
are meaningless.
To identify it as an interrupt trap frame, store -1 and 0.
To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/aarch64/aarch64/idle_machdep.S
cvs rdiff -u -r1.26 -r1.27 src/sys/arch/aarch64/aarch64/vectors.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/aarch64/aarch64/idle_machdep.S
diff -u src/sys/arch/aarch64/aarch64/idle_machdep.S:1.11 src/sys/arch/aarch64/aarch64/idle_machdep.S:1.12
--- src/sys/arch/aarch64/aarch64/idle_machdep.S:1.11 Sun Oct 10 08:59:45 2021
+++ src/sys/arch/aarch64/aarch64/idle_machdep.S Sun May 29 23:39:59 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: idle_machdep.S,v 1.11 2021/10/10 08:59:45 skrll Exp $ */
+/* $NetBSD: idle_machdep.S,v 1.12 2022/05/29 23:39:59 ryo Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
#include <aarch64/locore.h>
#include "assym.h"
-RCSID("$NetBSD: idle_machdep.S,v 1.11 2021/10/10 08:59:45 skrll Exp $");
+RCSID("$NetBSD: idle_machdep.S,v 1.12 2022/05/29 23:39:59 ryo Exp $");
#ifdef ARM_INTR_IMPL
#include ARM_INTR_IMPL
@@ -68,6 +68,9 @@ ENTRY(cpu_idle)
stp x29, x30, [sp, #TF_X29] /* save x29,x30 */
#ifdef DDB
add x29, sp, #TF_X29 /* link frame for backtrace */
+ mov x0, #-1
+ str x0, [sp, #TF_ESR]
+ str xzr, [sp, #TF_FAR]
#endif
/* fill the minimum required trapframe */
Index: src/sys/arch/aarch64/aarch64/vectors.S
diff -u src/sys/arch/aarch64/aarch64/vectors.S:1.26 src/sys/arch/aarch64/aarch64/vectors.S:1.27
--- src/sys/arch/aarch64/aarch64/vectors.S:1.26 Fri May 6 06:09:50 2022
+++ src/sys/arch/aarch64/aarch64/vectors.S Sun May 29 23:39:59 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: vectors.S,v 1.26 2022/05/06 06:09:50 ryo Exp $ */
+/* $NetBSD: vectors.S,v 1.27 2022/05/29 23:39:59 ryo Exp $ */
#include <aarch64/asm.h>
#include <aarch64/locore.h>
@@ -11,7 +11,7 @@
#include "opt_dtrace.h"
#include "opt_gic.h"
-RCSID("$NetBSD: vectors.S,v 1.26 2022/05/06 06:09:50 ryo Exp $")
+RCSID("$NetBSD: vectors.S,v 1.27 2022/05/29 23:39:59 ryo Exp $")
ARMV8_DEFINE_OPTIONS
@@ -29,7 +29,7 @@ RCSID("$NetBSD: vectors.S,v 1.26 2022/05
/*
* Template for the handler functions.
*/
-.macro vector_func, func, el, label, tpidr
+.macro vector_func, func, el, intr_p, label, tpidr
.align 7 /* cacheline-aligned */
ENTRY_NBTI(\func)
@@ -76,8 +76,13 @@ ENTRY_NBTI(\func)
mrs x22, spsr_el1
str x22, [sp, #TF_SPSR]
+ .if \intr_p == 1
+ mov x23, #-1
+ mov x24, xzr
+ .else
mrs x23, esr_el1
mrs x24, far_el1
+ .endif
.if TF_ESR + 8 == TF_FAR
stp x23, x24, [sp, #TF_ESR]
@@ -126,25 +131,25 @@ END(\func)
/*
* The functions.
*/
-vector_func el1t_sync_handler, 1, trap_el1t_sync
-vector_func el1t_irq_handler, 1, trap_el1t_irq
-vector_func el1t_fiq_handler, 1, trap_el1t_fiq
-vector_func el1t_error_handler, 1, trap_el1t_error
-
-vector_func el1h_sync_handler, 1, trap_el1h_sync
-vector_func el1h_intr_handler, 1, cpu_irq
-vector_func el1h_fiq_handler, 1, cpu_fiq
-vector_func el1h_error_handler, 1, trap_el1h_error
-
-vector_func el0_sync_handler, 0, trap_el0_sync
-vector_func el0_intr_handler, 0, cpu_irq
-vector_func el0_fiq_handler, 0, cpu_fiq
-vector_func el0_error_handler, 0, trap_el0_error
-
-vector_func el0_32sync_handler, 0, trap_el0_32sync, ro
-vector_func el0_32intr_handler, 0, cpu_irq, ro
-vector_func el0_32fiq_handler, 0, cpu_fiq, ro
-vector_func el0_32error_handler, 0, trap_el0_32error, ro
+vector_func el1t_sync_handler, 1, 0, trap_el1t_sync
+vector_func el1t_irq_handler, 1, 1, trap_el1t_irq
+vector_func el1t_fiq_handler, 1, 1, trap_el1t_fiq
+vector_func el1t_error_handler, 1, 0, trap_el1t_error
+
+vector_func el1h_sync_handler, 1, 0, trap_el1h_sync
+vector_func el1h_intr_handler, 1, 1, cpu_irq
+vector_func el1h_fiq_handler, 1, 1, cpu_fiq
+vector_func el1h_error_handler, 1, 0, trap_el1h_error
+
+vector_func el0_sync_handler, 0, 0, trap_el0_sync
+vector_func el0_intr_handler, 0, 1, cpu_irq
+vector_func el0_fiq_handler, 0, 1, cpu_fiq
+vector_func el0_error_handler, 0, 0, trap_el0_error
+
+vector_func el0_32sync_handler, 0, 0, trap_el0_32sync, ro
+vector_func el0_32intr_handler, 0, 1, cpu_irq, ro
+vector_func el0_32fiq_handler, 0, 1, cpu_fiq, ro
+vector_func el0_32error_handler, 0, 0, trap_el0_32error, ro
/*
* The vector table. Must be aligned to 2048.