ppc/xive: Always recompute the PIPR when pushing an OS context
commita66257a287f6e2832fb6ecd7587da4933b39cfc4
authorFrederic Barrat <fbarrat@linux.ibm.com>
Fri, 29 Apr 2022 07:16:19 +0000 (29 09:16 +0200)
committerDaniel Henrique Barboza <danielhb413@gmail.com>
Thu, 5 May 2022 18:36:17 +0000 (5 15:36 -0300)
treec88e83252c56477856c9f2d2414286e55db5b871
parent97252353c1f6ecbb54385c9272378b5788749a16
ppc/xive: Always recompute the PIPR when pushing an OS context

The Post Interrupt Priority Register (PIPR) is not restored like the
other OS-context related fields of the TIMA when pushing an OS context
on the CPU. It's not needed because it can be calculated from the
Interrupt Pending Buffer (IPB), which is saved and restored. The PIPR
must therefore always be recomputed when pushing an OS context.

This patch fixes a path on P9 and P10 where it was not done. If there
was a pending interrupt when the OS context was pulled, the IPB was
saved correctly. When pushing back the context, the code in
xive_tctx_need_resend() was checking for a interrupt raised while the
context was not on the CPU, saved in the NVT. If one was found, then
it was merged with the saved IPB and the PIPR updated and everything
was fine. However, if there was no interrupt found in the NVT, then
xive_tctx_ipb_update() was not being called and the PIPR was not
updated. This patch fixes it by always calling xive_tctx_ipb_update().

Note that on P10 (xive2.c) and because of the above, there's no longer
any need to check the CPPR value so it can go away.

Reviewed-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com>
Message-Id: <20220429071620.177142-2-fbarrat@linux.ibm.com>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
hw/intc/xive.c
hw/intc/xive2.c