Next patch is going to add more conditions to allow a CPU core hotunplug. Let's put it into a separated function to avoid crowding the body of spapr_core_unplug_request().
Signed-off-by: Daniel Henrique Barboza <danielhb...@gmail.com> --- hw/ppc/spapr.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 2c403b574e..a2f01c21aa 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -3706,22 +3706,35 @@ static void spapr_core_unplug(HotplugHandler *hotplug_dev, DeviceState *dev) qdev_unrealize(dev); } -static -void spapr_core_unplug_request(HotplugHandler *hotplug_dev, DeviceState *dev, - Error **errp) +static int spapr_core_unplug_possible(HotplugHandler *hotplug_dev, CPUCore *cc, + Error **errp) { - SpaprMachineState *spapr = SPAPR_MACHINE(OBJECT(hotplug_dev)); int index; - SpaprDrc *drc; - CPUCore *cc = CPU_CORE(dev); if (!spapr_find_cpu_slot(MACHINE(hotplug_dev), cc->core_id, &index)) { error_setg(errp, "Unable to find CPU core with core-id: %d", cc->core_id); - return; + return -1; } + if (index == 0) { error_setg(errp, "Boot CPU core may not be unplugged"); + return -1; + } + + return 0; +} + +static +void spapr_core_unplug_request(HotplugHandler *hotplug_dev, DeviceState *dev, + Error **errp) +{ + ERRP_GUARD(); + SpaprMachineState *spapr = SPAPR_MACHINE(OBJECT(hotplug_dev)); + SpaprDrc *drc; + CPUCore *cc = CPU_CORE(dev); + + if (spapr_core_unplug_possible(hotplug_dev, cc, errp) < 0) { return; } -- 2.26.2