LoongArch cpu hotplug is based on ACPI GED device, it depends on patchset where TYPE_HOTPLUG_HANDLER interface is added in ipi and extioi interrupt controller class for cpu hotplug event notification. https://lore.kernel.org/qemu-devel/0d920309-c7ba-48d8-b46d-04ac1e38e...@linaro.org/T/#t
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 --- v4 ... v5: 1. Use new calculation logic about physical cpu id, the max core-id and thread-id is aligned up with power of 2. 2. Remove num-cpu property with ipi and extioi interrupt controller, TYPE_HOTPLUG_HANDLER interface is added with the interrupt controllers for cpu hotplug event notification. v3 ... v4: 1. For cold-plug CPUs, move socket-id/core-id/thread-id property setting from preplug function to CPU object creating loop, since there is topo information calculation already in CPU object creating loop. 2. Init interrupt pin of CPU object in cpu plug interface for both cold-plug CPUs and hot-plug CPUs. 3. Apply the patch based on latest qemu version. 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 (7): hw/loongarch/virt: Add CPU topology support hw/loongarch/virt: Add topo properties on CPU object hw/loongarch/virt: Add basic cpu plug interface framework hw/loongarch/virt: Implement cpu unplug interface hw/loongarch/virt: Implement cpu plug interface hw/loongarch/virt: Update the ACPI table for hotplug cpu hw/loongarch/virt: Enable cpu hotplug feature on virt machine hw/loongarch/Kconfig | 1 + hw/loongarch/virt-acpi-build.c | 35 +++- hw/loongarch/virt.c | 284 ++++++++++++++++++++++++++++++--- include/hw/loongarch/virt.h | 1 + target/loongarch/cpu.c | 23 +++ target/loongarch/cpu.h | 11 ++ 6 files changed, 333 insertions(+), 22 deletions(-) -- 2.39.3