accel/kvm: Add pre-park vCPU support
For that KVM do not support dynamic adjustment of vCPU count, we must pre-park all possible vCPU at start. Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com> Signed-off-by: Salil Mehta <salil.mehta@huawei.com> (cherry picked from commit 000c4a3d545146ee38ea4334fee3a93669c11b28)
This commit is contained in:
parent
a76764d7b7
commit
57a390f44f
64
accel-kvm-Add-pre-park-vCPU-support.patch
Normal file
64
accel-kvm-Add-pre-park-vCPU-support.patch
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
From c950cda47386360e37a89dfa7029d83e33888a40 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Keqian Zhu <zhukeqian1@huawei.com>
|
||||||
|
Date: Fri, 10 Apr 2020 13:04:40 +0800
|
||||||
|
Subject: [PATCH] accel/kvm: Add pre-park vCPU support
|
||||||
|
|
||||||
|
For that KVM do not support dynamic adjustment of vCPU count,
|
||||||
|
we must pre-park all possible vCPU at start.
|
||||||
|
|
||||||
|
Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com>
|
||||||
|
Signed-off-by: Salil Mehta <salil.mehta@huawei.com>
|
||||||
|
---
|
||||||
|
accel/kvm/kvm-all.c | 23 +++++++++++++++++++++++
|
||||||
|
include/sysemu/kvm.h | 1 +
|
||||||
|
2 files changed, 24 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
|
||||||
|
index 8a98446b7c..f2ce5cd45a 100644
|
||||||
|
--- a/accel/kvm/kvm-all.c
|
||||||
|
+++ b/accel/kvm/kvm-all.c
|
||||||
|
@@ -433,6 +433,29 @@ void kvm_destroy_vcpu(CPUState *cpu)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+int kvm_create_parked_vcpu(unsigned long vcpu_id)
|
||||||
|
+{
|
||||||
|
+ KVMState *s = kvm_state;
|
||||||
|
+ struct KVMParkedVcpu *vcpu = NULL;
|
||||||
|
+ int ret;
|
||||||
|
+
|
||||||
|
+ DPRINTF("kvm_create_parked_vcpu\n");
|
||||||
|
+
|
||||||
|
+ ret = kvm_vm_ioctl(s, KVM_CREATE_VCPU, (void *)vcpu_id);
|
||||||
|
+ if (ret < 0) {
|
||||||
|
+ DPRINTF("kvm_create_vcpu failed\n");
|
||||||
|
+ goto err;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ vcpu = g_malloc0(sizeof(*vcpu));
|
||||||
|
+ vcpu->vcpu_id = vcpu_id;
|
||||||
|
+ vcpu->kvm_fd = ret;
|
||||||
|
+ QLIST_INSERT_HEAD(&s->kvm_parked_vcpus, vcpu, node);
|
||||||
|
+
|
||||||
|
+err:
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static int kvm_get_vcpu(KVMState *s, unsigned long vcpu_id)
|
||||||
|
{
|
||||||
|
struct KVMParkedVcpu *cpu;
|
||||||
|
diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
|
||||||
|
index 7b22aeb6ae..2623775c27 100644
|
||||||
|
--- a/include/sysemu/kvm.h
|
||||||
|
+++ b/include/sysemu/kvm.h
|
||||||
|
@@ -221,6 +221,7 @@ int kvm_has_pit_state2(void);
|
||||||
|
int kvm_has_many_ioeventfds(void);
|
||||||
|
int kvm_has_gsi_routing(void);
|
||||||
|
int kvm_has_intx_set_mask(void);
|
||||||
|
+int kvm_create_parked_vcpu(unsigned long vcpu_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* kvm_arm_supports_user_irq
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user