From: Gavin Shan <gshan@redhat.com>
Sent: Wednesday, September 27, 2023 7:52 AM
To: Salil Mehta <salil.mehta@huawei.com>; qemu-devel@nongnu.org; qemu-
arm@nongnu.org
Cc: maz@kernel.org; jean-philippe@linaro.org; Jonathan Cameron
<jonathan.cameron@huawei.com>; lpieralisi@kernel.org;
peter.maydell@linaro.org; richard.henderson@linaro.org;
imammedo@redhat.com; andrew.jones@linux.dev; david@redhat.com;
philmd@linaro.org; eric.auger@redhat.com; will@kernel.org; ardb@kernel.org;
oliver.upton@linux.dev; pbonzini@redhat.com; mst@redhat.com;
rafael@kernel.org; borntraeger@linux.ibm.com; alex.bennee@linaro.org;
linux@armlinux.org.uk; darren@os.amperecomputing.com;
ilkka@os.amperecomputing.com; vishnu@os.amperecomputing.com;
karl.heubaum@oracle.com; miguel.luis@oracle.com; salil.mehta@opnsrc.net;
zhukeqian <zhukeqian1@huawei.com>; wangxiongfeng (C)
<wangxiongfeng2@huawei.com>; wangyanan (Y) <wangyanan55@huawei.com>;
jiakernel2@gmail.com; maobibo@loongson.cn; lixianglai@loongson.cn
Subject: Re: [PATCH RFC V2 05/37] accel/kvm: Extract common KVM vCPU
{creation,parking} code
Hi Salil,
On 9/26/23 20:04, Salil Mehta wrote:
KVM vCPU creation is done once during the initialization of the VM when Qemu
threads are spawned. This is common to all the architectures. If the
architecture
supports vCPU hot-{un}plug then this KVM vCPU creation could be deferred to
later point as well. Some architectures might in any case create KVM vCPUs for
the yet-to-be plugged vCPUs (i.e. QoM Object & thread does not exists) during VM
init time and park them.
Hot-unplug of vCPU results in destruction of the vCPU objects in QOM but
the KVM vCPU objects in the Host KVM are not destroyed and their representative
KVM vCPU objects in Qemu are parked.
Signed-off-by: Salil Mehta <salil.mehta@huawei.com>
---
accel/kvm/kvm-all.c | 61 ++++++++++++++++++++++++++++++++++----------
include/sysemu/kvm.h | 2 ++
2 files changed, 49 insertions(+), 14 deletions(-)
The most important point seems missed in the commit log: The KVM vCPU objects,
including those hotpluggable objects, need to be in place before in-host GICv3
is initialized. So we need expose kvm_create_vcpu() to make those KVM vCPU
objects in place, even for those non-present vCPUs.