[libvirt] [PATCH v2 07/23] qemu: monitor: Add support for calling query-hotpluggable-cpus
John Ferlan
jferlan at redhat.com
Fri Aug 19 17:27:33 UTC 2016
On 08/19/2016 10:38 AM, Peter Krempa wrote:
> Add support for retrieving information regarding hotpluggable cpu units
> supported by qemu. Data returned by the command carries information
> needed to figure out the granularity of hotplug, the necessary cpu type
> name and the topology information.
>
> Note that qemu doesn't specify any particular order of the entries thus
> it's necessary sort them by socket_id, core_id and thread_id to the
> order libvirt expects.
> ---
>
> Notes:
> v2:
> - fixed alias string in comment
> - already ACKed
>
> src/qemu/qemu_monitor.h | 16 ++++
> src/qemu/qemu_monitor_json.c | 170 +++++++++++++++++++++++++++++++++++++++++++
> src/qemu/qemu_monitor_json.h | 5 ++
> 3 files changed, 191 insertions(+)
>
[...]
> +
> +/**
> + * [{
> + * "props": {
> + * "core-id": 0,
> + * "thread-id": 0,
> + * "socket-id": 0
> + * },
> + * "vcpus-count": 1,
> + * "qom-path": "/machine/unattached/device[0]",
> + * "type": "qemu64-x86_64-cpu"
> + * },
> + * {...}
> + * ]
> + */
> +static int
> +qemuMonitorJSONProcessHotpluggableCpusReply(virJSONValuePtr vcpu,
> + struct qemuMonitorQueryHotpluggableCpusEntry *entry)
> +{
> + virJSONValuePtr props;
> + const char *tmp;
> +
> + if (!(tmp = virJSONValueObjectGetString(vcpu, "type"))) {
> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("query-hotpluggable-cpus didn't return device type"));
> + return -1;
> + }
> +
> + if (VIR_STRDUP(entry->type, tmp) < 0)
> + return -1;
> +
> + if (virJSONValueObjectGetNumberUint(vcpu, "vcpus-count", &entry->vcpus) < 0) {
> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("query-hotpluggable-cpus didn't return vcpus-count"));
> + return -1;
> + }
> +
> + if (!(props = virJSONValueObjectGetObject(vcpu, "props"))) {
> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("query-hotpluggable-cpus didn't return device props"));
> + return -1;
> + }
> +
> + entry->node_id = -1;
> + entry->socket_id = -1;
> + entry->core_id = -1;
> + entry->thread_id = -1;
> +
> + ignore_value(virJSONValueObjectGetNumberInt(props, "node-id", &entry->node_id));
> + ignore_value(virJSONValueObjectGetNumberInt(props, "socket-id", &entry->socket_id));
> + ignore_value(virJSONValueObjectGetNumberInt(props, "core-id", &entry->core_id));
> + ignore_value(virJSONValueObjectGetNumberInt(props, "thread-id", &entry->thread_id));
> +
> + if (entry->node_id == -1 && entry->socket_id == -1 &&
> + entry->core_id == -1 && entry->thread_id == -1) {
> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("query-hotpluggable-cpus entry doesn't report "
> + "topology information"));
> + return -1;
> + }
> +
> + /* qom path is not present unless the vCPU is online */
> + if ((tmp = virJSONValueObjectGetString(vcpu, "qom-path"))) {
> + if (VIR_STRDUP(entry->qom_path, tmp) < 0)
> + return -1;
> +
> + /* alias is the part after last slash having a "vcpu" prefix */
> + if ((tmp = strrchr(tmp, '/')) && STRPREFIX(tmp + 1, "vcpu")) {
> + if (VIR_STRDUP(entry->alias, tmp + 1) < 0)
> + return -1;
Hmm... Just trying to understand... The example above has:
"qom-path": "/machine/unattached/device[0]",
So "/vcpuX" shows up when?
IOW: How does an entry look that has that vcpu string in it?
Ah - I see a couple patches later in the tests:
qom_path='/machine/peripheral/vcpu0'
I was also wondering why you extract this, but I see in later patches...
John
> + }
> + }
> +
> + return 0;
> +}
> +
> +
[...]
More information about the libvir-list
mailing list