Message ID | 20240328153333.2522667-1-peter.maydell@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | hw/intc/arm_gicv3: ICC_HPPIR* return SPURIOUS if int group is disabled | expand |
On 3/28/24 05:33, Peter Maydell wrote: > If the group of the highest priority pending interrupt is disabled > via ICC_IGRPEN*, the ICC_HPPIR* registers should return > INTID_SPURIOUS, not the interrupt ID. (See the GIC architecture > specification pseudocode functions ICC_HPPIR1_EL1[] and > HighestPriorityPendingInterrupt().) > > Make HPPIR reads honour the group disable, the way we already do > when determining whether to preempt in icc_hppi_can_preempt(). > > Cc:qemu-stable@nongnu.org > Signed-off-by: Peter Maydell<peter.maydell@linaro.org> > --- > Pre-existing bug which I happened to notice while working > on review of the FEAT_NMI patches. I don't suppose real world > code disables interrupt groups which it's actually using, which > is why nobody's noticed it. Still, it's a safe bugfix so might > as well go to stable too. > --- > hw/intc/arm_gicv3_cpuif.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
diff --git a/hw/intc/arm_gicv3_cpuif.c b/hw/intc/arm_gicv3_cpuif.c index e1a60d8c15b..67d8fd07b7f 100644 --- a/hw/intc/arm_gicv3_cpuif.c +++ b/hw/intc/arm_gicv3_cpuif.c @@ -1067,7 +1067,7 @@ static uint64_t icc_hppir0_value(GICv3CPUState *cs, CPUARMState *env) */ bool irq_is_secure; - if (cs->hppi.prio == 0xff) { + if (icc_no_enabled_hppi(cs)) { return INTID_SPURIOUS; } @@ -1104,7 +1104,7 @@ static uint64_t icc_hppir1_value(GICv3CPUState *cs, CPUARMState *env) */ bool irq_is_secure; - if (cs->hppi.prio == 0xff) { + if (icc_no_enabled_hppi(cs)) { return INTID_SPURIOUS; }
If the group of the highest priority pending interrupt is disabled via ICC_IGRPEN*, the ICC_HPPIR* registers should return INTID_SPURIOUS, not the interrupt ID. (See the GIC architecture specification pseudocode functions ICC_HPPIR1_EL1[] and HighestPriorityPendingInterrupt().) Make HPPIR reads honour the group disable, the way we already do when determining whether to preempt in icc_hppi_can_preempt(). Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- Pre-existing bug which I happened to notice while working on review of the FEAT_NMI patches. I don't suppose real world code disables interrupt groups which it's actually using, which is why nobody's noticed it. Still, it's a safe bugfix so might as well go to stable too. --- hw/intc/arm_gicv3_cpuif.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)