On 2018/3/20 19:22, Peter Maydell wrote: > On 20 March 2018 at 07:26, Shannon Zhao <zhaoshengl...@huawei.com> wrote: >> While we skip the GIC_INTERNAL irqs, we don't change the register offset >> accordingly. This will overlap the GICR registers value and leave the >> last GIC_INTERNAL irq's registers out of update. >> >> Fix this by skipping the registers banked by GICR. >> > > I'm still not entirely sure what the underlying problem > you're trying to fix is... > > Do we fail to correctly migrate a VM without this change? > Does the code work on some host CPU/GIC implementations but > not others? Is this just improving efficiency by avoiding > doing some unnecessary work? > When we reboot a VM and before entering uefi or guest kernel, we expect all these registers staying at the initial state. But currently these registers of the last 32 irqs are not reset. For example, the PRIORITY of irq from 32 to 255 is 0 but the PRIORITY of irq from 256 to 287 is 0xa0(Linux kernel set the PRIORITY to 0xa0 by default).
When migrating a VM, since we don't save and restore the registers of the last 32 irq, so the PRIORITY is 0 while we expecting 0xa0. And also it will overlap the PRIORITY of SGIs and PPIs. We don't fail to migrate a vm since currently we don't use the last 32 irqs in virt machine. But the bug is still there. Thanks, -- Shannon