Message ID | 20250211030834.3276732-1-maobibo@loongson.cn (mailing list archive) |
---|---|
Headers | show |
Series | hw/loongarch/virt: Add cpu hotplug support | expand |
Slightly ping. Hope to merge to qemu 10.0 if possible :) Regards Bibo Mao On 2025/2/11 上午11:08, Bibo Mao wrote: > 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-04ac1e38efc7@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(-) >