On Tue, 2019-08-06 at 17:25:38 UTC, =?utf-8?q?C=C3=A9dric_Le_Goater?= wrote: > When a vCPU is brought done, the XIVE VP is first disabled and then > the event notification queues are freed. When freeing the queues, we > check for possible escalation interrupts and free them also. > > But when a XIVE VP is disabled, the underlying XIVE ENDs also are > disabled in OPAL. When an END is disabled, its ESB pages (ESn and ESe) > are disabled and loads return all 1s. Which means that any access on > the ESB page of the escalation interrupt will return invalid values. > > When an interrupt is freed, the shutdown handler computes a 'saved_p' > field from the value returned by a load in xive_do_source_set_mask(). > This value is incorrect for escalation interrupts for the reason > described above. > > This has no impact on Linux/KVM today because we don't make use of it > but we will introduce in future changes a xive_get_irqchip_state() > handler. This handler will use the 'saved_p' field to return the state > of an interrupt and 'saved_p' being incorrect, softlockup will occur. > > Fix the vCPU cleanup sequence by first freeing the escalation > interrupts if any, then disable the XIVE VP and last free the queues. > > Signed-off-by: Cédric Le Goater <clg@xxxxxxxx> Applied to powerpc topic/ppc-kvm, thanks. https://git.kernel.org/powerpc/c/237aed48c642328ff0ab19b63423634340224a06 cheers