It has been known case where no running VCPU context exists when the vgic/its tables are saved. There are other two unknown cases where we don't have the running VCPU context: (a) restore VGICv3 LPI pending status. (b) restoring VGICv3 pending tables. PATCH[1] includes 'kvm_mmu.h' to 'vgic.h' PATCH[2] adds unified helper vgic_write_guest_lock() PATCH[3 - 4] allows no-running-vcpu context for (a) and (b) v3: https://lore.kernel.org/kvmarm/20230126235451.469087-1-gshan@xxxxxxxxxx/T/#t v2: https://lore.kernel.org/kvmarm/Y9Lg1ESUVJov0WpH@xxxxxxxxxx/T/#t v1: https://lore.kernel.org/kvmarm/20230116040405.260935-1-gshan@xxxxxxxxxx/T/#t Changelog ========= v4: * s/vgic3/VGICv3 (Zenghui) * s/save_tables_in_progress/write_tables_in_progress (Zenghui) v3: * Pick Oliver's r-bs * Include 'kvm_mmu.h' to 'vgic.h' (Oliver) v2: * Add unified helper vgic_write_guest_lock() (Oliver) * Dropped two patches to refactor mark_page_dirty_in_slot() (Sean) Gavin Shan (4): KVM: arm64: Include kvm_mmu.h from vgic.h KVM: arm64: Add helper vgic_write_guest_lock() KVM: arm64: Allow no running vcpu on restoring VGICv3 LPI pending status KVM: arm64: Allow no running vcpu on saving VGICv3 pending table Documentation/virt/kvm/api.rst | 10 +++++++--- arch/arm64/kvm/vgic/vgic-debug.c | 1 - arch/arm64/kvm/vgic/vgic-init.c | 1 - arch/arm64/kvm/vgic/vgic-its.c | 14 +++++--------- arch/arm64/kvm/vgic/vgic-kvm-device.c | 1 - arch/arm64/kvm/vgic/vgic-mmio-v3.c | 1 - arch/arm64/kvm/vgic/vgic-v2.c | 1 - arch/arm64/kvm/vgic/vgic-v3.c | 5 ++--- arch/arm64/kvm/vgic/vgic.h | 14 ++++++++++++++ include/kvm/arm_vgic.h | 2 +- 10 files changed, 29 insertions(+), 21 deletions(-) -- 2.23.0