From nobody Sun Feb 8 14:59:28 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.39 as permitted sender) client-ip=209.132.183.39; envelope-from=libvir-list-bounces@redhat.com; helo=mx6-phx2.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.39 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by mx.zohomail.com with SMTPS id 1489510942092875.0358604274461; Tue, 14 Mar 2017 10:02:22 -0700 (PDT) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v2EGwWpC017532; Tue, 14 Mar 2017 12:58:32 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v2EGvuqq002646 for ; Tue, 14 Mar 2017 12:57:56 -0400 Received: from virval.usersys.redhat.com (dhcp129-92.brq.redhat.com [10.34.129.92]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v2EGvt90008610 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 14 Mar 2017 12:57:56 -0400 Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 8DAC71062D7; Tue, 14 Mar 2017 17:57:53 +0100 (CET) From: Jiri Denemark To: libvir-list@redhat.com Date: Tue, 14 Mar 2017 17:57:49 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 10/12] qemu: Ask QEMU for filtered CPU features X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" qemuMonitorGetGuestCPU can now optionally create CPU data from filtered-features in addition to feature-words. Signed-off-by: Jiri Denemark --- src/qemu/qemu_monitor.c | 11 ++++++++--- src/qemu/qemu_monitor.h | 3 ++- src/qemu/qemu_monitor_json.c | 25 +++++++++++++++++++++++-- src/qemu/qemu_monitor_json.h | 3 ++- src/qemu/qemu_process.c | 2 +- tests/qemumonitorjsontest.c | 4 ++-- 6 files changed, 38 insertions(+), 10 deletions(-) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index d71f84c80..70e9724c5 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -4000,6 +4000,7 @@ qemuMonitorSetDomainLog(qemuMonitorPtr mon, * @mon: Pointer to the monitor * @arch: arch of the guest * @data: returns the cpu data + * @disabled: returns the CPU data for features which were disabled by QEMU * * Retrieve the definition of the guest CPU from a running qemu instance. * @@ -4009,15 +4010,19 @@ qemuMonitorSetDomainLog(qemuMonitorPtr mon, int qemuMonitorGetGuestCPU(qemuMonitorPtr mon, virArch arch, - virCPUDataPtr *data) + virCPUDataPtr *data, + virCPUDataPtr *disabled) { - VIR_DEBUG("arch=3D'%s' data=3D'%p'", virArchToString(arch), data); + VIR_DEBUG("arch=3D%s data=3D%p disabled=3D%p", + virArchToString(arch), data, disabled); =20 QEMU_CHECK_MONITOR_JSON(mon); =20 *data =3D NULL; + if (disabled) + *disabled =3D NULL; =20 - return qemuMonitorJSONGetGuestCPU(mon, arch, data); + return qemuMonitorJSONGetGuestCPU(mon, arch, data, disabled); } =20 =20 diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 847e9458a..575d72edd 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1020,7 +1020,8 @@ void qemuMonitorSetDomainLog(qemuMonitorPtr mon, =20 int qemuMonitorGetGuestCPU(qemuMonitorPtr mon, virArch arch, - virCPUDataPtr *data); + virCPUDataPtr *data, + virCPUDataPtr *disabled); =20 int qemuMonitorRTCResetReinjection(qemuMonitorPtr mon); =20 diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 733daf096..553544aea 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -6728,6 +6728,7 @@ qemuMonitorJSONCheckCPUx86(qemuMonitorPtr mon) * @mon: Pointer to the monitor * @arch: arch of the guest * @data: returns the cpu data of the guest + * @disabled: returns the CPU data for features which were disabled by QEMU * * Retrieve the definition of the guest CPU from a running qemu instance. * @@ -6737,8 +6738,11 @@ qemuMonitorJSONCheckCPUx86(qemuMonitorPtr mon) int qemuMonitorJSONGetGuestCPU(qemuMonitorPtr mon, virArch arch, - virCPUDataPtr *data) + virCPUDataPtr *data, + virCPUDataPtr *disabled) { + virCPUDataPtr cpuEnabled =3D NULL; + virCPUDataPtr cpuDisabled =3D NULL; int rc; =20 if (ARCH_IS_X86(arch)) { @@ -6747,13 +6751,30 @@ qemuMonitorJSONGetGuestCPU(qemuMonitorPtr mon, else if (!rc) return -2; =20 - return qemuMonitorJSONGetCPUx86Data(mon, "feature-words", data); + if (qemuMonitorJSONGetCPUx86Data(mon, "feature-words", + &cpuEnabled) < 0) + goto error; + + if (disabled && + qemuMonitorJSONGetCPUx86Data(mon, "filtered-features", + &cpuDisabled) < 0) + goto error; + + *data =3D cpuEnabled; + if (disabled) + *disabled =3D cpuDisabled; + return 0; } =20 virReportError(VIR_ERR_INTERNAL_ERROR, _("CPU definition retrieval isn't supported for '%s'"), virArchToString(arch)); return -1; + + error: + virCPUDataFree(cpuEnabled); + virCPUDataFree(cpuDisabled); + return -1; } =20 int diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index 59d9f098c..2bc2d6ea8 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -475,7 +475,8 @@ int qemuMonitorJSONGetCPUx86Data(qemuMonitorPtr mon, =20 int qemuMonitorJSONGetGuestCPU(qemuMonitorPtr mon, virArch arch, - virCPUDataPtr *data); + virCPUDataPtr *data, + virCPUDataPtr *disabled); =20 int qemuMonitorJSONRTCResetReinjection(qemuMonitorPtr mon); =20 diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 894679373..f2aa134d4 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3846,7 +3846,7 @@ qemuProcessVerifyGuestCPU(virQEMUDriverPtr driver, if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) goto cleanup; =20 - rc =3D qemuMonitorGetGuestCPU(priv->mon, def->os.arch, &cpu); + rc =3D qemuMonitorGetGuestCPU(priv->mon, def->os.arch, &cpu, NULL); =20 if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 402c87d45..d0f9381b3 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -2395,7 +2395,7 @@ testQemuMonitorJSONGetCPUData(const void *opaque) =20 if (qemuMonitorJSONGetGuestCPU(qemuMonitorTestGetMonitor(test), VIR_ARCH_X86_64, - &cpuData) < 0) + &cpuData, NULL) < 0) goto cleanup; =20 if (!(actual =3D virCPUDataFormat(cpuData))) @@ -2438,7 +2438,7 @@ testQemuMonitorJSONGetNonExistingCPUData(const void *= opaque) =20 rv =3D qemuMonitorJSONGetGuestCPU(qemuMonitorTestGetMonitor(test), VIR_ARCH_X86_64, - &cpuData); + &cpuData, NULL); if (rv !=3D -2) { virReportError(VIR_ERR_INTERNAL_ERROR, "Unexpected return value %d, expecting -2", rv); --=20 2.12.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list