On Mon, 31 Oct 2022 23:08:32 +0000, Gavin Shan <gshan@xxxxxxxxxx> wrote: > > > In order to cover Marc's concern, I would introduce a different helper > kvm_vgic_save_its_tables_in_progress(), which simply returns > 'bool struct vgic_dist::save_its_tables_in_progress'. The newly added > field is set and cleared in vgic_its_ctrl(). All these changes will be > folded to PATCH[v7 6/9]. Oliver and Marc, could you please let me know > if the changes sounds good? > > static int vgic_its_ctrl(struct kvm *kvm, struct vgic_its *its, u64 attr) > { > const struct vgic_its_abi *abi = vgic_its_get_abi(its); > struct vgic_dist *dist = &kvm->arch.vgic; > int ret = 0; > : > switch (attr) { > case KVM_DEV_ARM_ITS_CTRL_RESET: > vgic_its_reset(kvm, its); > break; > case KVM_DEV_ARM_ITS_SAVE_TABLES: > dist->save_its_tables_in_progress = true; > ret = abi->save_tables(its); > dist->save_its_tables_in_progress = false; > break; > case KVM_DEV_ARM_ITS_RESTORE_TABLES: > ret = abi->restore_tables(its); > break; > } > : > } Yes, this is the sort of thing I had in mind. This should make the whole patch rather trivial, and you could implement kvm_arch_allow_write_without_running_vcpu() as returning this flag. M. -- Without deviation from the norm, progress is not possible.