[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4 07/16] pc: implement query-hotpluggable-cpus
From: |
Michael S. Tsirkin |
Subject: |
Re: [Qemu-devel] [PATCH v4 07/16] pc: implement query-hotpluggable-cpus callback |
Date: |
Mon, 18 Jul 2016 23:46:18 +0300 |
On Thu, Jul 14, 2016 at 06:54:36PM +0200, Igor Mammedov wrote:
> it returns a list of present/possible to hotplug CPU
> objects with a list of properties to use with
> device_add.
>
> in PC case returned list would looks like:
> -> { "execute": "query-hotpluggable-cpus" }
> <- {"return": [
> {
> "type": "qemu64-x86_64-cpu", "vcpus-count": 1,
> "props": {"core-id": 0, "socket-id": 1, "thread-id": 0}
> },
> {
> "qom-path": "/machine/unattached/device[0]",
> "type": "qemu64-x86_64-cpu", "vcpus-count": 1,
> "props": {"core-id": 0, "socket-id": 0, "thread-id": 0}
> }
> ]}
>
> Signed-off-by: Igor Mammedov <address@hidden>
> Reviewed-by: Eduardo Habkost <address@hidden>
Shouldn't QMP maintainer be Cc'd?
> ---
> v2:
> - add -id suffix to socket/core/thread properties to match fixed schema
> ---
> hw/i386/pc.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
> qmp-commands.hx | 15 +++++++++++++++
> 2 files changed, 60 insertions(+)
>
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 75a92d0..feb71f9 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -2184,6 +2184,50 @@ static CPUArchIdList
> *pc_possible_cpu_arch_ids(MachineState *machine)
> return list;
> }
>
> +static HotpluggableCPUList *pc_query_hotpluggable_cpus(MachineState *machine)
> +{
> + int i;
> + CPUState *cpu;
> + HotpluggableCPUList *head = NULL;
> + PCMachineState *pcms = PC_MACHINE(machine);
> + const char *cpu_type;
> +
> + cpu = pcms->possible_cpus->cpus[0].cpu;
> + assert(cpu); /* BSP is always present */
> + cpu_type = object_class_get_name(OBJECT_CLASS(CPU_GET_CLASS(cpu)));
> +
> + for (i = 0; i < pcms->possible_cpus->len; i++) {
> + X86CPUTopoInfo topo;
> + HotpluggableCPUList *list_item = g_new0(typeof(*list_item), 1);
> + HotpluggableCPU *cpu_item = g_new0(typeof(*cpu_item), 1);
> + CpuInstanceProperties *cpu_props = g_new0(typeof(*cpu_props), 1);
> + const uint32_t apic_id = pcms->possible_cpus->cpus[i].arch_id;
> +
> + x86_topo_ids_from_apicid(apic_id, smp_cores, smp_threads, &topo);
> +
> + cpu_item->type = g_strdup(cpu_type);
> + cpu_item->vcpus_count = 1;
> + cpu_props->has_socket_id = true;
> + cpu_props->socket_id = topo.pkg_id;
> + cpu_props->has_core_id = true;
> + cpu_props->core_id = topo.core_id;
> + cpu_props->has_thread_id = true;
> + cpu_props->thread_id = topo.smt_id;
> + cpu_item->props = cpu_props;
> +
> + cpu = pcms->possible_cpus->cpus[i].cpu;
> + if (cpu) {
> + cpu_item->has_qom_path = true;
> + cpu_item->qom_path = object_get_canonical_path(OBJECT(cpu));
> + }
> +
> + list_item->value = cpu_item;
> + list_item->next = head;
> + head = list_item;
> + }
> + return head;
> +}
> +
> static void x86_nmi(NMIState *n, int cpu_index, Error **errp)
> {
> /* cpu index isn't used */
> @@ -2224,6 +2268,7 @@ static void pc_machine_class_init(ObjectClass *oc, void
> *data)
> mc->get_hotplug_handler = pc_get_hotpug_handler;
> mc->cpu_index_to_socket_id = pc_cpu_index_to_socket_id;
> mc->possible_cpu_arch_ids = pc_possible_cpu_arch_ids;
> + mc->query_hotpluggable_cpus = pc_query_hotpluggable_cpus;
> mc->default_boot_order = "cad";
> mc->hot_add_cpu = pc_hot_add_cpu;
> mc->max_cpus = 255;
> diff --git a/qmp-commands.hx b/qmp-commands.hx
> index 6937e83..3afe066 100644
> --- a/qmp-commands.hx
> +++ b/qmp-commands.hx
> @@ -4983,3 +4983,18 @@ Example for pseries machine type started with
> { "props": { "core-id": 0 }, "type": "POWER8-spapr-cpu-core",
> "vcpus-count": 1, "qom-path": "/machine/unattached/device[0]"}
> ]}'
> +
> +Example for pc machine type started with
> +-smp 1,maxcpus=2:
> + -> { "execute": "query-hotpluggable-cpus" }
> + <- {"return": [
> + {
> + "type": "qemu64-x86_64-cpu", "vcpus-count": 1,
> + "props": {"core-id": 0, "socket-id": 1, "thread-id": 0}
> + },
> + {
> + "qom-path": "/machine/unattached/device[0]",
> + "type": "qemu64-x86_64-cpu", "vcpus-count": 1,
> + "props": {"core-id": 0, "socket-id": 0, "thread-id": 0}
> + }
> + ]}
> --
> 2.7.4
- Re: [Qemu-devel] [PATCH v4 04/16] pc: forbid BSP removal, (continued)
- [Qemu-devel] [PATCH v4 06/16] pc: cpu: allow device_add to be used with x86 cpu, Igor Mammedov, 2016/07/14
- [Qemu-devel] [PATCH v4 07/16] pc: implement query-hotpluggable-cpus callback, Igor Mammedov, 2016/07/14
- Re: [Qemu-devel] [PATCH v4 07/16] pc: implement query-hotpluggable-cpus callback,
Michael S. Tsirkin <=
- [Qemu-devel] [PATCH v4 09/16] apic: drop APICCommonState.idx and use APIC ID as index in local_apics[], Igor Mammedov, 2016/07/14
- [Qemu-devel] [PATCH v4 08/16] apic: move MAX_APICS check to 'apic' class, Igor Mammedov, 2016/07/14
- [Qemu-devel] [PATCH v4 11/16] (kvm)apic: add unrealize callbacks, Igor Mammedov, 2016/07/14
- [Qemu-devel] [PATCH v4 10/16] apic: kvm-apic: fix crash due to access to freed memory region, Igor Mammedov, 2016/07/14
- [Qemu-devel] [PATCH v4 13/16] target-i386: cpu: do not ignore error and fix apic parent, Igor Mammedov, 2016/07/14
- [Qemu-devel] [PATCH v4 12/16] apic: use apic_id as apic's migration instance_id, Igor Mammedov, 2016/07/14
- [Qemu-devel] [PATCH v4 14/16] target-i386: fix apic object leak when CPU is deleted, Igor Mammedov, 2016/07/14
- [Qemu-devel] [PATCH v4 15/16] target-i386: add x86_cpu_unrealizefn(), Igor Mammedov, 2016/07/14