On Sat, 13 Nov 2021 01:22:26 +0000, Raghavendra Rao Ananta <rananta@xxxxxxxxxx> wrote: > > The upcoming patches need a way to detect if the VM, as > a whole, has started. Hence, unionize kvm_vcpu_has_run_once() > of all the vcpus of the VM and build kvm_vm_has_run_once() > to achieve the functionality. > > No functional change intended. > > Signed-off-by: Raghavendra Rao Ananta <rananta@xxxxxxxxxx> > --- > include/linux/kvm_host.h | 2 ++ > virt/kvm/kvm_main.c | 17 +++++++++++++++++ > 2 files changed, 19 insertions(+) > > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > index b373929c71eb..102e00c0e21c 100644 > --- a/include/linux/kvm_host.h > +++ b/include/linux/kvm_host.h > @@ -1854,4 +1854,6 @@ static inline bool kvm_vcpu_has_run_once(struct kvm_vcpu *vcpu) > return vcpu->has_run_once; > } > > +bool kvm_vm_has_run_once(struct kvm *kvm); > + > #endif > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index 1ec8a8e959b2..3d8d96e8f61d 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -4339,6 +4339,23 @@ static int kvm_vm_ioctl_get_stats_fd(struct kvm *kvm) > return fd; > } > > +bool kvm_vm_has_run_once(struct kvm *kvm) > +{ > + int i, ret = false; > + struct kvm_vcpu *vcpu; > + > + mutex_lock(&kvm->lock); > + > + kvm_for_each_vcpu(i, vcpu, kvm) { > + ret = kvm_vcpu_has_run_once(vcpu); > + if (ret) > + break; > + } > + > + mutex_unlock(&kvm->lock); > + return ret; > +} This is horribly racy. Nothing prevents a vcpu from running behind your back. If you want any sort of guarantee, look at what we do in kvm_vgic_create(). Alexandru has patches that extract it to make it generally available (at least for arm64). M. -- Without deviation from the norm, progress is not possible. _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm