From nobody Sun Feb 8 20:53:38 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1644346393; cv=none; d=zohomail.com; s=zohoarc; b=lvM8BBJ5b35s1tdknxEuvu7OFT8BhleOBpBpiksg4oTLUJqip35mNS4aEsbSE/d702XG9EL5Bx14CeNC4U7kq6XFLcR9aDL+MImKjc11Cei7+Mn1s3mNBl2O+lFe1qBJX5w2nvJT448nO3gtacw+Rgs3qCoKDSw35fCzXVEsh20= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1644346393; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=O9EjaZI5tGLrHeqQySar+QCrT5LIWBsfIUhMQuDt1XI=; b=MJFpWFr0TRBgEqgJhygkrB0uPwoVKfYbL1XtXaVm6bnoNojW7hTSf8Z0QQ1yCloXB8tqD+73ReYVYhlCeRmMO4L38joeSDf+oWdb2fvwSHuS6cxxsTtNdpUz9niHNIDwSxMVsEWJwXP77wb8HZdO3xwEMP7giOgTn9NdRGaxHnU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1644346393736998.8646241859309; Tue, 8 Feb 2022 10:53:13 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-308-Eez_fImiNLS2vvF6FstEgQ-1; Tue, 08 Feb 2022 13:53:11 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 4B68F1091DA7; Tue, 8 Feb 2022 18:53:05 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 01CD08588E; Tue, 8 Feb 2022 18:53:05 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id C60064A70A; Tue, 8 Feb 2022 18:53:04 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 217BsgYF032460 for ; Mon, 7 Feb 2022 06:54:42 -0500 Received: by smtp.corp.redhat.com (Postfix) id 2FBDA6F95F; Mon, 7 Feb 2022 11:54:42 +0000 (UTC) Received: from speedmetal.redhat.com (unknown [10.40.208.41]) by smtp.corp.redhat.com (Postfix) with ESMTP id 475426F948 for ; Mon, 7 Feb 2022 11:54:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1644346393; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=O9EjaZI5tGLrHeqQySar+QCrT5LIWBsfIUhMQuDt1XI=; b=BBfMMAoAL614DpaXbrzslQ5RyE4l+PTSX9EHuDtejkvV3NjIcmNczBPyef7WT77XME6nfj x4PToTdJDR13oHOs6abN+Ph1tSPNTI0/P+x3fOUWkzoVSptJ1yf/Dy8DWpO8iTMBQXFdWX s0z3SlExwK2QSb3ptTxla68MCKfxoqs= X-MC-Unique: Eez_fImiNLS2vvF6FstEgQ-1 From: Peter Krempa To: libvir-list@redhat.com Subject: [PATCH 3/7] qemu: monitor: Don't hardcode QOM path of first CPU Date: Mon, 7 Feb 2022 12:53:55 +0100 Message-Id: <545cf5f8cc6c3e7d5b93d272af341f60f9a41bf3.1644234805.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com 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: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1644346395806100004 Content-Type: text/plain; charset="utf-8" Convert all code using the 'QOM_CPU_PATH' macro to accept the QOM path as an argument. For now the new helper for fetching the path 'qemuProcessGetVCPUQOMPath' will always return the same hard-coded value. Signed-off-by: Peter Krempa --- src/qemu/qemu_monitor.c | 17 ++++++++++------ src/qemu/qemu_monitor.h | 3 +++ src/qemu/qemu_monitor_json.c | 38 ++++++++++++++++++++++-------------- src/qemu/qemu_monitor_json.h | 3 +++ src/qemu/qemu_process.c | 15 ++++++++++++-- tests/qemumonitorjsontest.c | 2 ++ 6 files changed, 55 insertions(+), 23 deletions(-) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index babf9e62fb..a79ccabdca 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3887,6 +3887,7 @@ qemuMonitorSetDomainLog(qemuMonitor *mon, /** * qemuMonitorJSONGetGuestCPUx86: * @mon: Pointer to the monitor + * @cpuQOMPath: QOM path of a CPU to probe * @data: returns the cpu data * @disabled: returns the CPU data for features which were disabled by QEMU * @@ -3897,10 +3898,11 @@ qemuMonitorSetDomainLog(qemuMonitor *mon, */ int qemuMonitorGetGuestCPUx86(qemuMonitor *mon, + const char *cpuQOMPath, virCPUData **data, virCPUData **disabled) { - VIR_DEBUG("data=3D%p disabled=3D%p", data, disabled); + VIR_DEBUG("cpuQOMPath=3D%s data=3D%p disabled=3D%p", cpuQOMPath, data,= disabled); QEMU_CHECK_MONITOR(mon); @@ -3908,7 +3910,7 @@ qemuMonitorGetGuestCPUx86(qemuMonitor *mon, if (disabled) *disabled =3D NULL; - return qemuMonitorJSONGetGuestCPUx86(mon, data, disabled); + return qemuMonitorJSONGetGuestCPUx86(mon, cpuQOMPath, data, disabled); } @@ -3916,6 +3918,7 @@ qemuMonitorGetGuestCPUx86(qemuMonitor *mon, * qemuMonitorGetGuestCPU: * @mon: Pointer to the monitor * @arch: CPU architecture + * @cpuQOMPath: QOM path of a CPU to probe * @translate: callback for translating CPU feature names from QEMU to lib= virt * @opaque: data for @translate callback * @enabled: returns the CPU data for all enabled features @@ -3929,13 +3932,14 @@ qemuMonitorGetGuestCPUx86(qemuMonitor *mon, int qemuMonitorGetGuestCPU(qemuMonitor *mon, virArch arch, + const char *cpuQOMPath, qemuMonitorCPUFeatureTranslationCallback translate, void *opaque, virCPUData **enabled, virCPUData **disabled) { - VIR_DEBUG("arch=3D%s translate=3D%p opaque=3D%p enabled=3D%p disabled= =3D%p", - virArchToString(arch), translate, opaque, enabled, disabled); + VIR_DEBUG("arch=3D%s cpuQOMPath=3D%s translate=3D%p opaque=3D%p enable= d=3D%p disabled=3D%p", + virArchToString(arch), cpuQOMPath, translate, opaque, enable= d, disabled); QEMU_CHECK_MONITOR(mon); @@ -3943,7 +3947,7 @@ qemuMonitorGetGuestCPU(qemuMonitor *mon, if (disabled) *disabled =3D NULL; - return qemuMonitorJSONGetGuestCPU(mon, arch, translate, opaque, + return qemuMonitorJSONGetGuestCPU(mon, arch, cpuQOMPath, translate, op= aque, enabled, disabled); } @@ -4416,11 +4420,12 @@ qemuMonitorGetJobInfo(qemuMonitor *mon, */ int qemuMonitorGetCPUMigratable(qemuMonitor *mon, + const char *cpuQOMPath, bool *migratable) { QEMU_CHECK_MONITOR(mon); - return qemuMonitorJSONGetCPUMigratable(mon, migratable); + return qemuMonitorJSONGetCPUMigratable(mon, cpuQOMPath, migratable); } diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 9b2e4e1421..11ecda97de 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1348,6 +1348,7 @@ void qemuMonitorSetDomainLog(qemuMonitor *mon, virFreeCallback destroy); int qemuMonitorGetGuestCPUx86(qemuMonitor *mon, + const char *cpuQOMPath, virCPUData **data, virCPUData **disabled); @@ -1356,6 +1357,7 @@ typedef const char *(*qemuMonitorCPUFeatureTranslatio= nCallback)(const char *name int qemuMonitorGetGuestCPU(qemuMonitor *mon, virArch arch, + const char *cpuQOMPath, qemuMonitorCPUFeatureTranslationCallback transl= ate, void *opaque, virCPUData **enabled, @@ -1489,6 +1491,7 @@ int qemuMonitorGetJobInfo(qemuMonitor *mon, int qemuMonitorGetCPUMigratable(qemuMonitor *mon, + const char *cpuQOMPath, bool *migratable); int diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index d81456bcad..8e1501d91f 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -48,8 +48,6 @@ VIR_LOG_INIT("qemu.qemu_monitor_json"); -#define QOM_CPU_PATH "/machine/unattached/device[0]" - #define LINE_ENDING "\r\n" VIR_ENUM_IMPL(qemuMonitorJob, @@ -7026,6 +7024,7 @@ qemuMonitorJSONParseCPUx86Features(virJSONValue *data) static int qemuMonitorJSONGetCPUx86Data(qemuMonitor *mon, + const char *cpuQOMPath, const char *property, virCPUData **cpudata) { @@ -7034,7 +7033,7 @@ qemuMonitorJSONGetCPUx86Data(qemuMonitor *mon, virJSONValue *data; if (!(cmd =3D qemuMonitorJSONMakeCommand("qom-get", - "s:path", QOM_CPU_PATH, + "s:path", cpuQOMPath, "s:property", property, NULL))) return -1; @@ -7058,7 +7057,8 @@ qemuMonitorJSONGetCPUx86Data(qemuMonitor *mon, * of a guest CPU, and 1 if the feature is supported. */ static int -qemuMonitorJSONCheckCPUx86(qemuMonitor *mon) +qemuMonitorJSONCheckCPUx86(qemuMonitor *mon, + const char *cpuQOMPath) { g_autoptr(virJSONValue) cmd =3D NULL; g_autoptr(virJSONValue) reply =3D NULL; @@ -7067,7 +7067,7 @@ qemuMonitorJSONCheckCPUx86(qemuMonitor *mon) size_t n; if (!(cmd =3D qemuMonitorJSONMakeCommand("qom-list", - "s:path", QOM_CPU_PATH, + "s:path", cpuQOMPath, NULL))) return -1; @@ -7102,6 +7102,7 @@ qemuMonitorJSONCheckCPUx86(qemuMonitor *mon) /** * qemuMonitorJSONGetGuestCPUx86: * @mon: Pointer to the monitor + * @cpuQOMPath: QOM path of a CPU to probe * @data: returns the cpu data of the guest * @disabled: returns the CPU data for features which were disabled by QEMU * @@ -7112,6 +7113,7 @@ qemuMonitorJSONCheckCPUx86(qemuMonitor *mon) */ int qemuMonitorJSONGetGuestCPUx86(qemuMonitor *mon, + const char *cpuQOMPath, virCPUData **data, virCPUData **disabled) { @@ -7119,17 +7121,17 @@ qemuMonitorJSONGetGuestCPUx86(qemuMonitor *mon, g_autoptr(virCPUData) cpuDisabled =3D NULL; int rc; - if ((rc =3D qemuMonitorJSONCheckCPUx86(mon)) < 0) + if ((rc =3D qemuMonitorJSONCheckCPUx86(mon, cpuQOMPath)) < 0) return -1; else if (!rc) return -2; - if (qemuMonitorJSONGetCPUx86Data(mon, "feature-words", + if (qemuMonitorJSONGetCPUx86Data(mon, cpuQOMPath, "feature-words", &cpuEnabled) < 0) return -1; if (disabled && - qemuMonitorJSONGetCPUx86Data(mon, "filtered-features", + qemuMonitorJSONGetCPUx86Data(mon, cpuQOMPath, "filtered-features", &cpuDisabled) < 0) return -1; @@ -7142,6 +7144,7 @@ qemuMonitorJSONGetGuestCPUx86(qemuMonitor *mon, static int qemuMonitorJSONGetCPUProperties(qemuMonitor *mon, + const char *cpuQOMPath, char ***props) { g_autoptr(virJSONValue) cmd =3D NULL; @@ -7150,7 +7153,7 @@ qemuMonitorJSONGetCPUProperties(qemuMonitor *mon, *props =3D NULL; if (!(cmd =3D qemuMonitorJSONMakeCommand("qom-list", - "s:path", QOM_CPU_PATH, + "s:path", cpuQOMPath, NULL))) return -1; @@ -7166,6 +7169,7 @@ qemuMonitorJSONGetCPUProperties(qemuMonitor *mon, static int qemuMonitorJSONGetCPUData(qemuMonitor *mon, + const char *cpuQOMPath, qemuMonitorCPUFeatureTranslationCallback transla= te, void *opaque, virCPUData *data) @@ -7174,13 +7178,13 @@ qemuMonitorJSONGetCPUData(qemuMonitor *mon, g_auto(GStrv) props =3D NULL; char **p; - if (qemuMonitorJSONGetCPUProperties(mon, &props) < 0) + if (qemuMonitorJSONGetCPUProperties(mon, cpuQOMPath, &props) < 0) return -1; for (p =3D props; p && *p; p++) { const char *name =3D *p; - if (qemuMonitorJSONGetObjectProperty(mon, QOM_CPU_PATH, name, &pro= p) < 0) + if (qemuMonitorJSONGetObjectProperty(mon, cpuQOMPath, name, &prop)= < 0) return -1; if (!prop.val.b) @@ -7199,6 +7203,7 @@ qemuMonitorJSONGetCPUData(qemuMonitor *mon, static int qemuMonitorJSONGetCPUDataDisabled(qemuMonitor *mon, + const char *cpuQOMPath, qemuMonitorCPUFeatureTranslationCallback= translate, void *opaque, virCPUData *data) @@ -7206,7 +7211,7 @@ qemuMonitorJSONGetCPUDataDisabled(qemuMonitor *mon, g_auto(GStrv) props =3D NULL; char **p; - if (qemuMonitorJSONGetStringListProperty(mon, QOM_CPU_PATH, + if (qemuMonitorJSONGetStringListProperty(mon, cpuQOMPath, "unavailable-features", &prop= s) < 0) return -1; @@ -7228,6 +7233,7 @@ qemuMonitorJSONGetCPUDataDisabled(qemuMonitor *mon, * qemuMonitorJSONGetGuestCPU: * @mon: Pointer to the monitor * @arch: CPU architecture + * @cpuQOMPath: QOM path of a CPU to probe * @translate: callback for translating CPU feature names from QEMU to lib= virt * @opaque: data for @translate callback * @enabled: returns the CPU data for all enabled features @@ -7241,6 +7247,7 @@ qemuMonitorJSONGetCPUDataDisabled(qemuMonitor *mon, int qemuMonitorJSONGetGuestCPU(qemuMonitor *mon, virArch arch, + const char *cpuQOMPath, qemuMonitorCPUFeatureTranslationCallback transl= ate, void *opaque, virCPUData **enabled, @@ -7253,11 +7260,11 @@ qemuMonitorJSONGetGuestCPU(qemuMonitor *mon, !(cpuDisabled =3D virCPUDataNew(arch))) return -1; - if (qemuMonitorJSONGetCPUData(mon, translate, opaque, cpuEnabled) < 0) + if (qemuMonitorJSONGetCPUData(mon, cpuQOMPath, translate, opaque, cpuE= nabled) < 0) return -1; if (disabled && - qemuMonitorJSONGetCPUDataDisabled(mon, translate, opaque, cpuDisab= led) < 0) + qemuMonitorJSONGetCPUDataDisabled(mon, cpuQOMPath, translate, opaq= ue, cpuDisabled) < 0) return -1; *enabled =3D g_steal_pointer(&cpuEnabled); @@ -8671,13 +8678,14 @@ qemuMonitorJSONGetJobInfo(qemuMonitor *mon, int qemuMonitorJSONGetCPUMigratable(qemuMonitor *mon, + const char *cpuQOMPath, bool *migratable) { g_autoptr(virJSONValue) cmd =3D NULL; g_autoptr(virJSONValue) reply =3D NULL; if (!(cmd =3D qemuMonitorJSONMakeCommand("qom-get", - "s:path", QOM_CPU_PATH, + "s:path", cpuQOMPath, "s:property", "migratable", NULL))) return -1; diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index be66c545c9..309d1fb409 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -648,12 +648,14 @@ qemuMonitorJSONGetDeviceAliases(qemuMonitor *mon, int qemuMonitorJSONGetGuestCPUx86(qemuMonitor *mon, + const char *cpuQOMPath, virCPUData **data, virCPUData **disabled); int qemuMonitorJSONGetGuestCPU(qemuMonitor *mon, virArch arch, + const char *cpuQOMPath, qemuMonitorCPUFeatureTranslationCallback transl= ate, void *opaque, virCPUData **enabled, @@ -846,6 +848,7 @@ qemuMonitorJSONSetDBusVMStateIdList(qemuMonitor *mon, int qemuMonitorJSONGetCPUMigratable(qemuMonitor *mon, + const char *cpuQOMPath, bool *migratable); int diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index d080ab1c49..10e76583cf 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4224,6 +4224,14 @@ qemuProcessTranslateCPUFeatures(const char *name, } +/* returns the QOM path to the first vcpu */ +static const char * +qemuProcessGetVCPUQOMPath(void) +{ + return "/machine/unattached/device[0]"; +} + + static int qemuProcessFetchGuestCPU(virQEMUDriver *driver, virDomainObj *vm, @@ -4234,6 +4242,7 @@ qemuProcessFetchGuestCPU(virQEMUDriver *driver, qemuDomainObjPrivate *priv =3D vm->privateData; g_autoptr(virCPUData) dataEnabled =3D NULL; g_autoptr(virCPUData) dataDisabled =3D NULL; + const char *cpuQOMPath =3D qemuProcessGetVCPUQOMPath(); bool generic; int rc; @@ -4251,10 +4260,11 @@ qemuProcessFetchGuestCPU(virQEMUDriver *driver, if (generic) { rc =3D qemuMonitorGetGuestCPU(priv->mon, vm->def->os.arch, + cpuQOMPath, qemuProcessTranslateCPUFeatures, priv-= >qemuCaps, &dataEnabled, &dataDisabled); } else { - rc =3D qemuMonitorGetGuestCPUx86(priv->mon, &dataEnabled, &dataDis= abled); + rc =3D qemuMonitorGetGuestCPUx86(priv->mon, cpuQOMPath, &dataEnabl= ed, &dataDisabled); } qemuDomainObjExitMonitor(driver, vm); @@ -8455,6 +8465,7 @@ qemuProcessRefreshCPUMigratability(virQEMUDriver *dri= ver, { qemuDomainObjPrivate *priv =3D vm->privateData; virDomainDef *def =3D vm->def; + const char *cpuQOMPath =3D qemuProcessGetVCPUQOMPath(); bool migratable; int rc; @@ -8473,7 +8484,7 @@ qemuProcessRefreshCPUMigratability(virQEMUDriver *dri= ver, if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) return -1; - rc =3D qemuMonitorGetCPUMigratable(priv->mon, &migratable); + rc =3D qemuMonitorGetCPUMigratable(priv->mon, cpuQOMPath, &migratable); qemuDomainObjExitMonitor(driver, vm); if (rc < 0) diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 48e2a457ab..7987182a82 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -2186,6 +2186,7 @@ testQemuMonitorJSONGetCPUData(const void *opaque) return -1; if (qemuMonitorJSONGetGuestCPUx86(qemuMonitorTestGetMonitor(test), + "dummy", &cpuData, NULL) < 0) return -1; @@ -2221,6 +2222,7 @@ testQemuMonitorJSONGetNonExistingCPUData(const void *= opaque) return -1; rv =3D qemuMonitorJSONGetGuestCPUx86(qemuMonitorTestGetMonitor(test), + "dummy", &cpuData, NULL); if (rv !=3D -2) { virReportError(VIR_ERR_INTERNAL_ERROR, --=20 2.34.1