From: Nicholas Piggin <npiggin@gmail.com>
To: kvm@vger.kernel.org
Cc: Laurent Vivier <lvivier@redhat.com>,
Thomas Huth <thuth@redhat.com>,
linuxppc-dev@lists.ozlabs.org,
Nicholas Piggin <npiggin@gmail.com>
Subject: [kvm-unit-tests v4 09/12] powerpc: Add support for more interrupts including HV interrupts
Date: Thu, 8 Jun 2023 17:58:23 +1000 [thread overview]
Message-ID: <20230608075826.86217-10-npiggin@gmail.com> (raw)
In-Reply-To: <20230608075826.86217-1-npiggin@gmail.com>
Interrupt vectors were not being populated for all architected
interrupt types, which could lead to crashes rather than a message for
unhandled interrupts.
0x20 sized vectors require some reworking of the code to fit. This
also adds support for HV / HSRR type interrupts which will be used in
a later change.
Acked-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
Since v3:
- Build fix [Joel]
lib/powerpc/asm/ppc_asm.h | 3 ++
powerpc/cstart64.S | 79 ++++++++++++++++++++++++++++++++-------
2 files changed, 68 insertions(+), 14 deletions(-)
diff --git a/lib/powerpc/asm/ppc_asm.h b/lib/powerpc/asm/ppc_asm.h
index 6299ff53..46b4be00 100644
--- a/lib/powerpc/asm/ppc_asm.h
+++ b/lib/powerpc/asm/ppc_asm.h
@@ -35,6 +35,9 @@
#endif /* __BYTE_ORDER__ */
+#define SPR_HSRR0 0x13A
+#define SPR_HSRR1 0x13B
+
/* Machine State Register definitions: */
#define MSR_EE_BIT 15 /* External Interrupts Enable */
#define MSR_SF_BIT 63 /* 64-bit mode */
diff --git a/powerpc/cstart64.S b/powerpc/cstart64.S
index 34e39341..b7514100 100644
--- a/powerpc/cstart64.S
+++ b/powerpc/cstart64.S
@@ -184,14 +184,6 @@ call_handler:
mfcr r0
std r0,_CCR(r1)
- /* nip and msr */
-
- mfsrr0 r0
- std r0, _NIP(r1)
-
- mfsrr1 r0
- std r0, _MSR(r1)
-
/* restore TOC pointer */
LOAD_REG_IMMEDIATE(r31, SPAPR_KERNEL_LOAD_ADDR)
@@ -238,6 +230,7 @@ call_handler:
.section .text.ex
+/* [H]VECTOR must not be more than 8 instructions to fit in 0x20 vectors */
.macro VECTOR vec
. = \vec
@@ -246,19 +239,28 @@ call_handler:
subi r1,r1, INT_FRAME_SIZE
/* save r0 and ctr to call generic handler */
-
SAVE_GPR(0,r1)
- mfctr r0
- std r0,_CTR(r1)
+ li r0,\vec
+ std r0,_TRAP(r1)
- ld r0, P_HANDLER(0)
- mtctr r0
+ b handler_trampoline
+.endm
+
+.macro HVECTOR vec
+ . = \vec
+
+ mtsprg1 r1 /* save r1 */
+ mfsprg0 r1 /* get exception stack address */
+ subi r1,r1, INT_FRAME_SIZE
+
+ /* save r0 and ctr to call generic handler */
+ SAVE_GPR(0,r1)
li r0,\vec
std r0,_TRAP(r1)
- bctr
+ b handler_htrampoline
.endm
. = 0x100
@@ -268,12 +270,61 @@ __start_interrupts:
VECTOR(0x100)
VECTOR(0x200)
VECTOR(0x300)
+VECTOR(0x380)
VECTOR(0x400)
+VECTOR(0x480)
VECTOR(0x500)
VECTOR(0x600)
VECTOR(0x700)
VECTOR(0x800)
VECTOR(0x900)
+HVECTOR(0x980)
+VECTOR(0xa00)
+VECTOR(0xc00)
+VECTOR(0xd00)
+HVECTOR(0xe00)
+HVECTOR(0xe20)
+HVECTOR(0xe40)
+HVECTOR(0xe60)
+HVECTOR(0xe80)
+HVECTOR(0xea0)
+VECTOR(0xf00)
+VECTOR(0xf20)
+VECTOR(0xf40)
+VECTOR(0xf60)
+HVECTOR(0xf80)
+
+handler_trampoline:
+ mfctr r0
+ std r0,_CTR(r1)
+
+ ld r0, P_HANDLER(0)
+ mtctr r0
+
+ /* nip and msr */
+ mfsrr0 r0
+ std r0, _NIP(r1)
+
+ mfsrr1 r0
+ std r0, _MSR(r1)
+
+ bctr
+
+handler_htrampoline:
+ mfctr r0
+ std r0,_CTR(r1)
+
+ ld r0, P_HANDLER(0)
+ mtctr r0
+
+ /* nip and msr */
+ mfspr r0, SPR_HSRR0
+ std r0, _NIP(r1)
+
+ mfspr r0, SPR_HSRR1
+ std r0, _MSR(r1)
+
+ bctr
.align 7
.globl __end_interrupts
--
2.40.1
next prev parent reply other threads:[~2023-06-08 8:07 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-08 7:58 [kvm-unit-tests v4 00/12] powerpc: updates, P10, PNV support Nicholas Piggin
2023-06-08 7:58 ` [kvm-unit-tests v4 01/12] powerpc: Report instruction address and MSR in unhandled exception error Nicholas Piggin
2023-06-21 14:53 ` Thomas Huth
2023-06-08 7:58 ` [kvm-unit-tests v4 02/12] powerpc: Add some checking to exception handler install Nicholas Piggin
2023-06-21 14:54 ` Thomas Huth
2023-06-08 7:58 ` [kvm-unit-tests v4 03/12] powerpc: Abstract H_CEDE calls into a sleep functions Nicholas Piggin
2023-07-03 13:13 ` Thomas Huth
2023-06-08 7:58 ` [kvm-unit-tests v4 04/12] powerpc: Add ISA v3.1 (POWER10) support to SPR test Nicholas Piggin
2023-06-08 7:58 ` [kvm-unit-tests v4 05/12] powerpc: Extract some common helpers and defines to headers Nicholas Piggin
2023-06-08 7:58 ` [kvm-unit-tests v4 06/12] powerpc/sprs: Specify SPRs with data rather than code Nicholas Piggin
2023-06-08 7:58 ` [kvm-unit-tests v4 07/12] powerpc/spapr_vpa: Add basic VPA tests Nicholas Piggin
2023-06-08 7:58 ` [kvm-unit-tests v4 08/12] powerpc: Expand exception handler vector granularity Nicholas Piggin
2023-06-08 7:58 ` Nicholas Piggin [this message]
2023-06-08 7:58 ` [kvm-unit-tests v4 10/12] powerpc: Discover runtime load address dynamically Nicholas Piggin
2023-06-08 7:58 ` [kvm-unit-tests v4 11/12] powerpc: Support powernv machine with QEMU TCG Nicholas Piggin
2023-06-08 7:58 ` [kvm-unit-tests v4 12/12] powerpc/sprs: Test hypervisor registers on powernv machine Nicholas Piggin
2023-06-14 1:09 ` [kvm-unit-tests v4 00/12] powerpc: updates, P10, PNV support Joel Stanley
2023-06-15 3:02 ` Nicholas Piggin
2023-06-15 8:11 ` Joel Stanley
2023-07-03 13:27 ` Thomas Huth
2023-07-30 10:10 ` Nicholas Piggin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230608075826.86217-10-npiggin@gmail.com \
--to=npiggin@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=lvivier@redhat.com \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).