mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-06-30 17:22:33 +00:00
Initially enable vcpu hotplug in qemu for arm base on Salli's work[1]. Fixes:#3280 Signed-off-by: Huang Shijie <shijie8@gmail.com> [1] https://github.com/salil-mehta/qemu/tree/virt-cpuhp-armv8/rfc-v1
80 lines
2.9 KiB
Diff
80 lines
2.9 KiB
Diff
From cbc35b3747ff8c50e64e3b8aeecf1b782ee27cad Mon Sep 17 00:00:00 2001
|
|
From: Huang Shijie <shijie8@gmail.com>
|
|
Date: Mon, 22 Nov 2021 17:51:11 +0800
|
|
Subject: [PATCH 01/28] arm/cpuhp: Add QMP vcpu params validation support
|
|
|
|
From Salil Mehta <salil.mehta@huawei.com>
|
|
For now, vcpu hotplug is only supported with single socket single thread,
|
|
single die. NUMA is not supported either and everthing falls into single
|
|
node. Work to properly support these could be taken later once community
|
|
agrees with the base framework changes being presented to support ARM vcpu
|
|
hotplug in QEMU. Hence, these checks.
|
|
|
|
Co-developed-by: Keqian Zhu <zhukeqian1@huawei.com>
|
|
Signed-off-by: Salil Mehta <salil.mehta@huawei.com>
|
|
Signed-off-by: Huang Shijie <shijie8@gmail.com>
|
|
---
|
|
hw/arm/virt.c | 39 +++++++++++++++++++++++++++++++++++++++
|
|
1 file changed, 39 insertions(+)
|
|
|
|
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
|
|
index 81eda46b0b..99d59fada2 100644
|
|
--- a/hw/arm/virt.c
|
|
+++ b/hw/arm/virt.c
|
|
@@ -2564,6 +2564,44 @@ static HotplugHandler *virt_machine_get_hotplug_handler(MachineState *machine,
|
|
return NULL;
|
|
}
|
|
|
|
+static void virt_smp_parse(MachineState *ms, SMPConfiguration *config, Error **errp)
|
|
+{
|
|
+ unsigned cpus = config->has_cpus ? config->cpus : 1;
|
|
+ unsigned sockets = config->has_sockets ? config->sockets: 1;
|
|
+ unsigned cores = config->has_cores ? config->cores : cpus;
|
|
+ unsigned threads = config->has_threads ? config->threads: 1;
|
|
+ unsigned int max_cpus;
|
|
+
|
|
+ if (sockets > 1 || threads > 1) {
|
|
+ error_report("does not support more than one socket or thread");
|
|
+ exit(1);
|
|
+ }
|
|
+
|
|
+ if (cores != cpus) {
|
|
+ error_report("cpu topology: "
|
|
+ "sockets (%u) * cores (%u) * threads (%u) < "
|
|
+ "smp_cpus (%u)",
|
|
+ sockets, cores, threads, cpus);
|
|
+ exit(1);
|
|
+ }
|
|
+
|
|
+ max_cpus = config->has_maxcpus ? config->maxcpus : cpus;
|
|
+ if (sockets * cores * threads > max_cpus) {
|
|
+ error_report("cpu topology: "
|
|
+ "sockets (%u) * cores (%u) * threads (%u) > "
|
|
+ "maxcpus (%u)",
|
|
+ sockets, cores, threads,
|
|
+ max_cpus);
|
|
+ exit(1);
|
|
+ }
|
|
+
|
|
+ ms->smp.max_cpus = max_cpus;
|
|
+ ms->smp.sockets = sockets;
|
|
+ ms->smp.cpus = cpus;
|
|
+ ms->smp.cores = cores;
|
|
+ ms->smp.threads = threads;
|
|
+}
|
|
+
|
|
/*
|
|
* for arm64 kvm_type [7-0] encodes the requested number of bits
|
|
* in the IPA address space
|
|
@@ -2641,6 +2679,7 @@ static void virt_machine_class_init(ObjectClass *oc, void *data)
|
|
mc->auto_enable_numa_with_memhp = true;
|
|
mc->auto_enable_numa_with_memdev = true;
|
|
mc->default_ram_id = "mach-virt.ram";
|
|
+ mc->smp_parse = virt_smp_parse;
|
|
|
|
object_class_property_add(oc, "acpi", "OnOffAuto",
|
|
virt_get_acpi, virt_set_acpi,
|
|
--
|
|
2.30.2
|
|
|