LoongArch cpu hotplug is based on ACPI GED device, there is a little
change about ipi and extioi device, the value of num-cpu property is
maximum cpu number rather than present cpu number.
It can be verified with qemu command:
qemu-system-loongarch64 -smp 2,maxcpus=16,sockets=4,cores=4,threads=1
and vcpu can be added or remove with hmp command:
device_add la464-loongarch-cpu,socket-id=0,core-id=2,thread-id=0,id=cpu-2
device_del cpu-2
---
v2 ... v3:
1. Use qdev_realize_and_unref() with qdev_realize() and object_unref().
2. Set vcpus_count with 1 since vcpu object is created for every thread.
3. Remove property hw-id, use internal variable hw_id to differentiate
cold-plug cpus and hot-plug cpus.
4. Add generic function virt_init_cpu_irq() to init interrupt pin
of CPU object, used by both cold-plug and hot-plug CPUs
v1 ... v2:
1. Add new property hw-id, property hw-id is set for cold-added CPUs,
and property socket-id/core-id/thread-id is set for hot-added CPUs.
The two properties can be generated from each other.
2. Use general hotplug api such as hotplug_handler_pre_plug etc
3. Reorganize the patch order, split the patch set into 4 small
patches.
---
Bibo Mao (5):
hw/loongarch/virt: Add CPU topology support
hw/loongarch/virt: Implement cpu plug interface
hw/loongarch/virt: Add generic function to init interrupt pin of CPU
hw/loongarch/virt: Update the ACPI table for hotplug cpu
hw/loongarch/virt: Enable cpu hotplug feature on virt machine
docs/system/loongarch/virt.rst | 31 +++
hw/loongarch/Kconfig | 1 +
hw/loongarch/acpi-build.c | 35 +++-
hw/loongarch/virt.c | 349 +++++++++++++++++++++++++++++----
include/hw/loongarch/virt.h | 3 +
target/loongarch/cpu.c | 25 +++
target/loongarch/cpu.h | 17 ++
7 files changed, 416 insertions(+), 45 deletions(-)
base-commit: 92ec7805190313c9e628f8fc4eb4f932c15247bd
--
2.39.3