Thread (23 messages) 23 messages, 3 authors, 2021-11-30

Re: [RFC PATCH v2 03/11] KVM: Introduce kvm_vm_has_run_once

From: Raghavendra Rao Ananta <hidden>
Date: 2021-11-23 18:48:39
Also in: kvm, kvmarm, lkml

On Mon, Nov 22, 2021 at 8:31 AM Marc Zyngier [off-list ref] wrote:
On Sat, 13 Nov 2021 01:22:26 +0000,
Raghavendra Rao Ananta [off-list ref] wrote:
quoted
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 <redacted>
---
 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).
Yes, I looked into kvm_lock_all_vcpus(), but the fact that the series
would call the function with the current vcpu lock held caused me to
back off..
Perhaps I can come up with a similar function, kvm_lock_all_vcpus_except(vcpu) ?

Regards,
Raghavendra
        M.

--
Without deviation from the norm, progress is not possible.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help