Commit c185c0c7 authored by Keqian Zhu's avatar Keqian Zhu Committed by zhuyanting
Browse files

arm/virt: Add cpu_hotplug_enabled field



Some conditions must be satisfied to support CPU hotplug, including
ACPI, GED, 64bit CPU, GICv3.

Signed-off-by: default avatarKeqian Zhu <zhukeqian1@huawei.com>
Signed-off-by: default avatarSalil Mehta <salil.mehta@huawei.com>
parent dc5d776f
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -1645,6 +1645,7 @@ static void machvirt_init(MachineState *machine)
{
    VirtMachineState *vms = VIRT_MACHINE(machine);
    VirtMachineClass *vmc = VIRT_MACHINE_GET_CLASS(machine);
    MachineState *ms = MACHINE(machine);
    MachineClass *mc = MACHINE_GET_CLASS(machine);
    const CPUArchIdList *possible_cpus;
    MemoryRegion *sysmem = get_system_memory();
@@ -1655,6 +1656,7 @@ static void machvirt_init(MachineState *machine)
    bool has_ged = !vmc->no_ged;
    unsigned int smp_cpus = machine->smp.cpus;
    unsigned int max_cpus = machine->smp.max_cpus;
    ObjectClass *cpu_class;

    /*
     * In accelerated mode, the memory map is computed earlier in kvm_type()
@@ -1760,6 +1762,11 @@ static void machvirt_init(MachineState *machine)

    create_fdt(vms);

    cpu_class = object_class_by_name(ms->cpu_type);
    vms->cpu_hotplug_enabled = has_ged && firmware_loaded &&
        acpi_enabled && vms->gic_version == 3 &&
        !!object_class_dynamic_cast(cpu_class, TYPE_AARCH64_CPU);

    possible_cpus = mc->possible_cpu_arch_ids(machine);
    for (n = 0; n < possible_cpus->len; n++) {
        Object *cpuobj;
+1 −0
Original line number Diff line number Diff line
@@ -126,6 +126,7 @@ typedef struct {
    bool highmem_ecam;
    bool its;
    bool virt;
    bool cpu_hotplug_enabled;
    int32_t gic_version;
    VirtIOMMUType iommu;
    struct arm_boot_info bootinfo;