At the moment the ITS is not properly reset. On System reset or reboot, previous ITS register values and caches are left unchanged. Some of the registers might point to some guest RAM tables which are not valid anymore. This leads to state inconsistencies that are detected by the kernel save/restore code. And eventually this may cause qemu abort.
This series adds vITS reset modality: - the 2 first patches bring a minimalist reset through individual register writes. However, with kernel versions < 4.15, this reset is not complete (vITS caches are not voided). - With kernel versions >= 4.15 we can rely on a new ITS KVM device reset IOTCL. The last 2 patches introduce the full reset. Patches 1-2 have all kernel dependencies resolved. Patches 3-4' dependencies were pulled for v4.15-rc0 but as the tag is not set, the kernel header update still is partial. Best Regards Eric The series is available at: https://github.com/eauger/qemu/tree/2.11.0-rc2-its-reset-v3 History: v2 -> v3: - don't call post_load on reset (no iidr check anymore) v1 -> v2: - Clarify why abort should be removed for save. Leave abort for restore. - Adopt the same reset infra as vgic - introduce "hw/intc/arm_gicv3_its: Implement a minimalist reset" which perform individual register writes. This is sufficient to fix the issues without ioctl Eric Auger (4): hw/intc/arm_gicv3_its: Don't call post_load on reset hw/intc/arm_gicv3_its: Implement a minimalist reset linux-headers: Partial header update for ITS reset hw/intc/arm_gicv3_its: Implement full reset hw/intc/arm_gicv3_its_common.c | 2 -- hw/intc/arm_gicv3_its_kvm.c | 52 ++++++++++++++++++++++++++++++++++++++---- linux-headers/asm-arm/kvm.h | 1 + linux-headers/asm-arm64/kvm.h | 1 + 4 files changed, 50 insertions(+), 6 deletions(-) -- 2.5.5