Mike Kowal, can you please review this? Thanks,
Glenn On Mon, 2026-08-24 at 12:33 +0530, Gautam Menghani wrote: > When a KVM guest is migrated to another LPAR while a stress-ng workload > is running, lockups are seen when the guest resumes on the destination > LPAR. This root cause is that if there was a pending interrupt for a cpu > on the source machine but it was not presented yet when the migration > started, the interrupt is not retriggered on the destination LPAR. This > is evident when running 'info pic' on the destination LPAR: > > $ virsh qemu-monitor-command --hmp migrate 'info pic' | grep -e OS -e MSI > CPU[0000]: OS 00 ff 00 ff ff 00 ff ff 80000400 > CPU[0001]: OS 00 ff 00 ff ff 00 ff ff 80000401 > CPU[0002]: OS 00 ff 00 ff ff 00 ff ff 80000402 > CPU[0003]: OS 00 ff 00 ff ff 00 ff ff 80000403 > CPU[0004]: OS 00 ff 00 ff ff 00 ff ff 80000404 > CPU[0005]: OS 00 ff 00 ff ff 00 ff ff 80000405 > CPU[0006]: OS 80 ff 02 ff ff 00 ff 06 80000406 > CPU[0007]: OS 00 ff 00 ff ff 00 ff ff 80000407 > 00000000 MSI -- 00000010 0/6 3071/16384 @3710000 ^1 [ 80000010 > 80000010 80000010 80000010 80000010 ^00000000 ] > 00000001 MSI -- 00000010 1/6 1852/16384 @3980000 ^1 [ 80000010 > 80000033 80000033 80000033 80000033 ^00000000 ] > 00000002 MSI -- 00000010 2/6 4424/16384 @40c0000 ^1 [ 80000020 > 80000020 80000020 80000010 80000010 ^00000000 ] > 00000003 MSI -- 00000010 3/6 1913/16384 @4220000 ^1 [ 80000010 > 80000032 80000010 80000010 80000010 ^00000000 ] > 00000004 MSI -- 00000010 4/6 2946/16384 @4360000 ^1 [ 80000010 > 80000010 80000010 80000010 80000010 ^00000000 ] > 00000005 MSI -- 00000010 5/6 2313/16384 @44a0000 ^1 [ 80000010 > 80000010 80000010 80000010 80000010 ^00000000 ] > 00000006 MSI P- 00000010 6/6 5825/16384 @45f0000 ^1 [ 80000024 > 80000024 80000024 80000010 80000016 ^00000000 ] > 00000007 MSI -- 00000010 7/6 2346/16384 @4760000 ^1 [ 80000032 > 80000032 80000010 80000032 80000032 ^00000000 ] > > Fix this by calling xive_tctx_pipr_set() in > vmstate_xive_tctx_post_load(), which ends up calling qemu_irq_raise() to > present the interrupt. > > Signed-off-by: Gautam Menghani <[email protected]> > --- > hw/intc/xive.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/hw/intc/xive.c b/hw/intc/xive.c > index f473e6ac77..712498d4af 100644 > --- a/hw/intc/xive.c > +++ b/hw/intc/xive.c > @@ -1080,6 +1080,9 @@ static int vmstate_xive_tctx_post_load(void *opaque, > int version_id) > error_report_err(local_err); > return ret; > } > + } else { > + uint8_t pipr = tctx->regs[TM_QW1_OS + TM_PIPR]; > + xive_tctx_pipr_set(tctx, TM_QW1_OS, pipr, 0); > } > > return 0;
