Re: [kvm-unit-tests v3 10/13] powerpc: Add support for more interrupts including HV interrupts

Joel Stanley
2023-04-05T23:45:45Z

Hi Nick,

On Mon, 27 Mar 2023 at 12:55, Nicholas Piggin <npiggin@gmail.com> wrote:
>
> 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.
>
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
> powerpc/cstart64.S | 79 ++++++++++++++++++++++++++++++++++++++--------
> 1 file changed, 65 insertions(+), 14 deletions(-)
>
> diff --git a/powerpc/cstart64.S b/powerpc/cstart64.S

> +handler_trampoline:
> + mfctr r0
> + std r0,_CTR(r1)
> +
> + ld r0, P_HANDLER(0)
> + mtctr r0
> +
> + /* nip and msr */
> + mfsrr0 r0

I tried building the tests on a power8 box with binutils 2.34 and gas complains:

powerpc/cstart64.S: Assembler messages:
powerpc/cstart64.S:337: Error: unrecognized opcode: `mfhsrr0'
powerpc/cstart64.S:340: Error: unrecognized opcode: `mfhsrr1'

It appears this mnemonic is only supported for power10 (and were only
added in binutils 2.36):

$ git grep -i mfhsrr
opcodes/ppc-opc.c:{"mfhsrr0", XSPR(31,339,314), XSPR_MASK, POWER10,
EXT, {RS}},
opcodes/ppc-opc.c:{"mfhsrr1", XSPR(31,339,315), XSPR_MASK, POWER10,
EXT, {RS}},

I replaced it with mfspr and the tests ran fine:

@@ -334,10 +338,10 @@ handler_htrampoline:
mtctr r0

/* nip and msr */
- mfhsrr0 r0
+ mfspr r0, SPRN_HSRR0
std r0, _NIP(r1)

- mfhsrr1 r0
+ mfspr r0, SPRN_HSRR1
std r0, _MSR(r1)

Cheers,

Joel