diff options
author | Nicholas Piggin <npiggin@gmail.com> | 2025-05-12 13:10:15 +1000 |
---|---|---|
committer | Cédric Le Goater <clg@redhat.com> | 2025-07-21 08:03:52 +0200 |
commit | bde8c148bb22b99cb84cda800fa555851b8cb358 (patch) | |
tree | c6fa0b664464a51ba50338464e45416de6c4c204 /hw/intc | |
parent | d1023a296c8297454fc4b207d58707c0a5e62e0a (diff) | |
download | qemu-bde8c148bb22b99cb84cda800fa555851b8cb358.zip qemu-bde8c148bb22b99cb84cda800fa555851b8cb358.tar.gz qemu-bde8c148bb22b99cb84cda800fa555851b8cb358.tar.bz2 |
ppc/xive: Fix PHYS NSR ring matching
Test that the NSR exception bit field is equal to the pool ring value,
rather than any common bits set, which is more correct (although there
is no practical bug because the LSI NSR type is not implemented and
POOL/PHYS NSR are encoded with exclusive bits).
Fixes: 4c3ccac636 ("pnv/xive: Add special handling for pool targets")
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Glenn Miles <milesg@linux.ibm.com>
Reviewed-by: Michael Kowal <kowal@linux.ibm.com>
Reviewed-by: Caleb Schlossin <calebs@linux.ibm.com>
Tested-by: Gautam Menghani <gautam@linux.ibm.com>
Link: https://lore.kernel.org/qemu-devel/20250512031100.439842-7-npiggin@gmail.com
Signed-off-by: Cédric Le Goater <clg@redhat.com>
Diffstat (limited to 'hw/intc')
-rw-r--r-- | hw/intc/xive.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/hw/intc/xive.c b/hw/intc/xive.c index 120376f..bc829be 100644 --- a/hw/intc/xive.c +++ b/hw/intc/xive.c @@ -54,7 +54,8 @@ static uint64_t xive_tctx_accept(XiveTCTX *tctx, uint8_t ring) uint8_t *alt_regs; /* POOL interrupt uses IPB in QW2, POOL ring */ - if ((ring == TM_QW3_HV_PHYS) && (nsr & (TM_QW3_NSR_HE_POOL << 6))) { + if ((ring == TM_QW3_HV_PHYS) && + ((nsr & TM_QW3_NSR_HE) == (TM_QW3_NSR_HE_POOL << 6))) { alt_ring = TM_QW2_HV_POOL; } else { alt_ring = ring; |