From nobody Sat Oct 24 21:02:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1792469943; cv=none; d=zohomail.com; s=zohoarc; b=STXR71kLYfIqW6wXI0mNGU6HP8KVV14lMxBf6J/K/NJU2CGu/5hiplFTYZpCRPOmwkJuiWZfhRtvqvFTf7Y9rZAulOcs0+IfwC1c7wLcn9Rufk41rg5X3iRBzD3sGkfLSo9icMu5id+rRFXs+bNbeecI8qs67gru/Stvl0GOFXA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792469943; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=uJCk6+P8yehLBhp4YE1J/cUoKxZqPFRoNOCxQQrdMjw=; b=ehVhD9BCh3kUJbTNY/+o7wewvmkleoePieI0jurDG03Ud7uGnZVOCa5f5OUjmLeN9akAyREMxzyfARfIFzBDif8n0HOiXqw2HdMc5KMyoGps/ql97aYL7RBjit0nhxhPRvS6sR8v68Ft5/L/CkscgD0qevnwvz/MlZgJesTYzCU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1792469943527542.4763366267734; Mon, 19 Oct 2026 21:19:03 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 05B4B41B7F; Tue, 20 Oct 2026 00:19:01 -0400 (EDT) Received: from [172.19.199.16] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id DD13441BCD; Tue, 20 Oct 2026 00:15:24 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id AB0833FCB5; Tue, 20 Oct 2026 00:15:07 -0400 (EDT) Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id B2AFB3F8A8 for ; Tue, 20 Oct 2026 00:15:05 -0400 (EDT) Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 69K1EYQv3642956; Tue, 20 Oct 2026 04:15:04 GMT Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4hdw5b8vgq-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 20 Oct 2026 04:15:04 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.11/8.18.1.11) with ESMTP id 69K14u7U794815; Tue, 20 Oct 2026 04:15:03 GMT Received: from smtprelay07.dal12v.mail.ibm.com ([172.16.1.9]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4hcp1ygc2j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 20 Oct 2026 04:15:03 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay07.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 69K4F2gi28377724 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 20 Oct 2026 04:15:02 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B413D5805A; Tue, 20 Oct 2026 04:15:02 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3E7DD58051; Tue, 20 Oct 2026 04:15:02 +0000 (GMT) Received: from localhost.localdomain (unknown [9.61.246.47]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Tue, 20 Oct 2026 04:15:02 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=uJCk6+P8yehLBhp4Y E1J/cUoKxZqPFRoNOCxQQrdMjw=; b=ILRElm98qiYJ8aOc53XIOm1E/PPuZX8kP JuB9jcgaX4D3TGoQwzGe70cfy1HJ0861xaN0nuHSLcCO2r9j1QVIisRDwC1qOGvV /MUjD5taTjjgOCr0KzpYKm8lZr2CP1gUlklJiqvQ5c4snhmgt4w24zOfzyfiqeeX LjJwNAU/9ZoKdBknAd8TgNppNJh7MypBjrYpbfa4eaofymTh4BYuINuINsaw0OpZ zglaHEtKUa8upgmqmas0/Upz6qH27O12lpTaSsyfUuF1UXQ84TPnm5aYqmTdJCu+ +rhR0upWumEkCffKPZMtFvaOsRjfllln0iAmLfJpvSw3QGtN2rVfw== From: Rorie Reyes To: devel@lists.libvirt.org Subject: [PATCH libvirt v2 1/4] qemu: refactor GetCPUModelComparison to return virCPUCompareResult Date: Tue, 20 Oct 2026 00:15:00 -0400 Message-ID: <20261020041459.97188-7-rreyes@linux.ibm.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20261020041459.97188-6-rreyes@linux.ibm.com> References: <20261020041459.97188-6-rreyes@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: fdQ5VD-hw8IlaGqrwfDVONhAoKfvmXvB X-Proofpoint-ORIG-GUID: fdQ5VD-hw8IlaGqrwfDVONhAoKfvmXvB X-Proofpoint-Spam-Info: AW1haW4tMjYxMDIwMDAxNiBTYWx0ZWRfX4OeLmCe3P/HT IlCvZXr3FvPaNTgzFM6/pd7SDv/YiuyvyKbOEn+1XlVoNFxiq8uHObEoNRzTKS/8M4c7pbkn1/j Okip2eDNP+ohuAnLvRCPBtplHQQXD1w= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMDIwMDAxNiBTYWx0ZWRfX9ZHVr/84cxuX qr1LTnz606ieqjlCrI/Ludb9THsHEgIFHtiOVoGRjvKxigAEVyAhd3y3nc0U4NzbVRRF2LqbBVg xTvb5AksivdsZleeGj825efmkiYqVjitj8k+sJ9E9Gg96WDPWzsXmKRxFLWoVSkl/QDPtsOsOIj PLDTWktJV/TUFNaFLT/+4VV4RhHHNiw+nL4b0ViYyqjRa8hB7E4Myd7SrX+zWH0eQZYFEOyK+O4 OdeuhBLZmCBJ86eUvxDdubNxkwNgDT4wWoIr1AkWir+wXcJNqy1Acp3LZoCTWTL7N8f3MQ0Afdd FhvUPu1LNqWmQEEEI8rM5ingfNsyvlKrUPiBD/Aq/j0Yrq0WiDPbszfZYx4I9Bw1ayBkW2prTgF bbc8sFqINDgNbUoxr9mS4O3gJjsK5xJkKGk7GRWInz2mKi0GjzcN/N0ZP/ADXGXH6VkCio3SnYh hDYOKpbncLztxdpcizg== X-Authority-Analysis: v=2.4 cv=Gb2CDgXL c=1 sm=1 tr=0 ts=6ad6eac8 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=660iZSQnnn4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=VnNF1IyMAAAA:8 a=ei_cwDqgWsONg51vAiAA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-10-20_01,2026-10-19_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 malwarescore=0 spamscore=0 phishscore=0 clxscore=1015 bulkscore=0 impostorscore=0 lowpriorityscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2610190000 definitions=main-2610200016 Message-ID-Hash: Y57OUTK3R5XQCYVHNDWAUV5FTPOX2OIY X-Message-ID-Hash: Y57OUTK3R5XQCYVHNDWAUV5FTPOX2OIY X-MailFrom: rreyes@linux.ibm.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: jdenemar@redhat.com, fiuczy@linux.ibm.com, walling@linux.ibm.com, rreyes@linux.ibm.com X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1792469945545158500 Content-Type: text/plain; charset="utf-8" Replace the char **result output parameter with a virCPUCompareResult return value in qemuMonitorJSONGetCPUModelComparison() and its public wrapper qemuMonitorGetCPUModelComparison(). Move the result string to enum mapping (identical/superset/subset/incompatible) into the monitor layer and remove it from qemuConnectCPUModelComparison() in qemu_driver.c. Unknown result strings are reported as errors. The existing unit test is updated to use the new return value and extended with cases for all four result strings (identical, superset, subset, incompatible). Signed-off-by: Rorie Reyes --- src/qemu/qemu_driver.c | 16 ++++----- src/qemu/qemu_monitor.c | 9 +++-- src/qemu/qemu_monitor.h | 5 ++- src/qemu/qemu_monitor_json.c | 34 +++++++++++------- src/qemu/qemu_monitor_json.h | 5 ++- tests/qemumonitorjsontest.c | 67 +++++++++++++++++++++++++++++------- 6 files changed, 90 insertions(+), 46 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 5922065897..2500b6fb50 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -12128,7 +12128,7 @@ qemuConnectCPUModelComparison(virQEMUCaps *qemuCaps, bool failIncompatible) { g_autoptr(qemuProcessQMP) proc =3D NULL; - g_autofree char *result =3D NULL; + virCPUCompareResult result; =20 if (!(proc =3D qemuProcessQMPNew(virQEMUCapsGetBinary(qemuCaps), libDir, runUid, runGid, false))) @@ -12137,21 +12137,17 @@ qemuConnectCPUModelComparison(virQEMUCaps *qemuCa= ps, if (qemuProcessQMPStart(proc) < 0) return VIR_CPU_COMPARE_ERROR; =20 - if (qemuMonitorGetCPUModelComparison(proc->mon, cpu_a, cpu_b, &result)= < 0) - return VIR_CPU_COMPARE_ERROR; - - if (STREQ(result, "identical")) - return VIR_CPU_COMPARE_IDENTICAL; + result =3D qemuMonitorGetCPUModelComparison(proc->mon, cpu_a, cpu_b); =20 - if (STREQ(result, "superset")) - return VIR_CPU_COMPARE_SUPERSET; + if (result =3D=3D VIR_CPU_COMPARE_ERROR) + return VIR_CPU_COMPARE_ERROR; =20 - if (failIncompatible) { + if (failIncompatible && result =3D=3D VIR_CPU_COMPARE_INCOMPATIBLE) { virReportError(VIR_ERR_CPU_INCOMPATIBLE, NULL); return VIR_CPU_COMPARE_ERROR; } =20 - return VIR_CPU_COMPARE_INCOMPATIBLE; + return result; } =20 =20 diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 7d1b9a0bfd..265890922f 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3326,17 +3326,16 @@ qemuMonitorGetCPUModelBaseline(qemuMonitor *mon, } =20 =20 -int +virCPUCompareResult qemuMonitorGetCPUModelComparison(qemuMonitor *mon, virCPUDef *cpu_a, - virCPUDef *cpu_b, - char **result) + virCPUDef *cpu_b) { VIR_DEBUG("cpu_a=3D%p cpu_b=3D%p", cpu_a, cpu_b); =20 - QEMU_CHECK_MONITOR(mon); + QEMU_CHECK_MONITOR_FULL(mon, return VIR_CPU_COMPARE_ERROR); =20 - return qemuMonitorJSONGetCPUModelComparison(mon, cpu_a, cpu_b, result); + return qemuMonitorJSONGetCPUModelComparison(mon, cpu_a, cpu_b); } =20 =20 diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index f711c001fb..c94cfc2b35 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1483,11 +1483,10 @@ qemuMonitorGetCPUModelBaseline(qemuMonitor *mon, virCPUDef *cpu_b, qemuMonitorCPUModelInfo **baseline); =20 -int +virCPUCompareResult qemuMonitorGetCPUModelComparison(qemuMonitor *mon, virCPUDef *cpu_a, - virCPUDef *cpu_b, - char **result); + virCPUDef *cpu_b); =20 qemuMonitorCPUModelInfo * qemuMonitorCPUModelInfoCopy(const qemuMonitorCPUModelInfo *orig); diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 29c42f7dd5..a8932af43c 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -5686,45 +5686,55 @@ qemuMonitorJSONGetCPUModelBaseline(qemuMonitor *mon, } =20 =20 -int +virCPUCompareResult qemuMonitorJSONGetCPUModelComparison(qemuMonitor *mon, virCPUDef *cpu_a, - virCPUDef *cpu_b, - char **result) + virCPUDef *cpu_b) { g_autoptr(virJSONValue) model_a =3D NULL; g_autoptr(virJSONValue) model_b =3D NULL; g_autoptr(virJSONValue) cmd =3D NULL; g_autoptr(virJSONValue) reply =3D NULL; - const char *data_result; + const char *result; virJSONValue *data; =20 if (!(model_a =3D qemuMonitorJSONMakeCPUModel(cpu_a, true, false)) || !(model_b =3D qemuMonitorJSONMakeCPUModel(cpu_b, true, false))) - return -1; + return VIR_CPU_COMPARE_ERROR; =20 if (!(cmd =3D qemuMonitorJSONMakeCommand("query-cpu-model-comparison", "a:modela", &model_a, "a:modelb", &model_b, NULL))) - return -1; + return VIR_CPU_COMPARE_ERROR; =20 if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) - return -1; + return VIR_CPU_COMPARE_ERROR; =20 if (qemuMonitorJSONCheckError(cmd, reply) < 0) - return -1; + return VIR_CPU_COMPARE_ERROR; =20 data =3D virJSONValueObjectGetObject(reply, "return"); =20 - if (!(data_result =3D virJSONValueObjectGetString(data, "result"))) { + if (!(result =3D virJSONValueObjectGetString(data, "result"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("query-cpu-model-comparison reply data was missin= g 'result'")); - return -1; + return VIR_CPU_COMPARE_ERROR; } =20 - *result =3D g_strdup(data_result); - return 0; + if (STREQ(result, "identical")) + return VIR_CPU_COMPARE_IDENTICAL; + + if (STREQ(result, "superset")) + return VIR_CPU_COMPARE_SUPERSET; + + if (STREQ(result, "subset") || STREQ(result, "incompatible")) + return VIR_CPU_COMPARE_INCOMPATIBLE; + + virReportError(VIR_ERR_INTERNAL_ERROR, + _("unknown query-cpu-model-comparison result: '%1$s'"), + result); + return VIR_CPU_COMPARE_ERROR; } =20 =20 diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index 63eded7ecb..e5d3d5d99e 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -439,11 +439,10 @@ qemuMonitorJSONGetCPUModelBaseline(qemuMonitor *mon, qemuMonitorCPUModelInfo **baseline) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4); =20 -int +virCPUCompareResult qemuMonitorJSONGetCPUModelComparison(qemuMonitor *mon, virCPUDef *cpu_a, - virCPUDef *cpu_b, - char **result) + virCPUDef *cpu_b) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3); =20 GHashTable * diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index a38d63c22c..b00d4512d1 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -2647,26 +2647,67 @@ testQemuMonitorJSONqemuMonitorJSONGetCPUModelCompar= ison(const void *opaque) g_autoptr(qemuMonitorTest) test =3D NULL; g_autoptr(virCPUDef) cpu_a =3D virCPUDefNew(); g_autoptr(virCPUDef) cpu_b =3D virCPUDefNew(); - g_autofree char *result =3D NULL; + + cpu_a->model =3D g_strdup("cpu_a"); + cpu_b->model =3D g_strdup("cpu_b"); =20 if (!(test =3D qemuMonitorTestNewSchema(data->xmlopt, data->schema))) return -1; =20 - if (qemuMonitorTestAddItem(test, "query-cpu-model-comparison", - "{\"return\":{\"result\":\"test\"}}") < 0) - return -1; + /* identical */ + { + if (qemuMonitorTestAddItem(test, "query-cpu-model-comparison", + "{\"return\":{\"result\":\"identical\"}= }") < 0) + return -1; =20 - cpu_a->model =3D g_strdup("cpu_a"); - cpu_b->model =3D g_strdup("cpu_b"); + if (qemuMonitorJSONGetCPUModelComparison(qemuMonitorTestGetMonitor= (test), + cpu_a, cpu_b) !=3D VIR_CP= U_COMPARE_IDENTICAL) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + "unexpected result for 'identical'"); + return -1; + } + } =20 - if (qemuMonitorJSONGetCPUModelComparison(qemuMonitorTestGetMonitor(tes= t), - cpu_a, cpu_b, &result) < 0) - return -1; + /* superset */ + { + if (qemuMonitorTestAddItem(test, "query-cpu-model-comparison", + "{\"return\":{\"result\":\"superset\"}}= ") < 0) + return -1; =20 - if (!result || STRNEQ(result, "test")) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - "Compare result not set"); - return -1; + if (qemuMonitorJSONGetCPUModelComparison(qemuMonitorTestGetMonitor= (test), + cpu_a, cpu_b) !=3D VIR_CP= U_COMPARE_SUPERSET) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + "unexpected result for 'superset'"); + return -1; + } + } + + /* subset */ + { + if (qemuMonitorTestAddItem(test, "query-cpu-model-comparison", + "{\"return\":{\"result\":\"subset\"}}")= < 0) + return -1; + + if (qemuMonitorJSONGetCPUModelComparison(qemuMonitorTestGetMonitor= (test), + cpu_a, cpu_b) !=3D VIR_CP= U_COMPARE_INCOMPATIBLE) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + "unexpected result for 'subset'"); + return -1; + } + } + + /* incompatible */ + { + if (qemuMonitorTestAddItem(test, "query-cpu-model-comparison", + "{\"return\":{\"result\":\"incompatible= \"}}") < 0) + return -1; + + if (qemuMonitorJSONGetCPUModelComparison(qemuMonitorTestGetMonitor= (test), + cpu_a, cpu_b) !=3D VIR_CP= U_COMPARE_INCOMPATIBLE) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + "unexpected result for 'incompatible'"); + return -1; + } } =20 return 0; --=20 2.48.1 From nobody Sat Oct 24 21:02:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1792470033; cv=none; d=zohomail.com; s=zohoarc; b=QTa8Ji4Cc67uJ46kNXVIhDakjUNSmPS3sxDiQhsXqS+oc9txIr3PHxJeNFSTwj6qncR5uabZXq9N53NJ8eQdTRJFLhgJmNuC86sYJ3w2oFkv8oSBZ3BfF/yg5NcmPfki6xpZwm2ZDApaizJxXsk5cYzmcOar0BP368SnnabBrlA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792470033; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=DV1IFiUs0NMsJxMSdrQp4BfluWICoQC73LSVE/kd2EI=; b=JQe3lSoar4rric31tHDlu3mC+GluEM8d98RBoWDqvwdTPzCDIeCDoHRtGU0JxkZe39XINHi8gecBiqD9DBn8wJ486R5M0YPSVlz6RIzZ10m2DoFE6FD60OU4FA9Fq1AaKyOE1QWPG4xh7sL6snRMQsUFig87OjYWAJalnGhkFhM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1792470033792652.3645740592369; Mon, 19 Oct 2026 21:20:33 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 4FEF641992; Tue, 20 Oct 2026 00:20:32 -0400 (EDT) Received: from [172.19.199.16] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id E95B041C47; Tue, 20 Oct 2026 00:15:30 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 676EF3FCB5; Tue, 20 Oct 2026 00:15:08 -0400 (EDT) Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 34FF13F383 for ; Tue, 20 Oct 2026 00:15:07 -0400 (EDT) Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 69K1EQo21142526; Tue, 20 Oct 2026 04:15:06 GMT Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4hdw5a0vka-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 20 Oct 2026 04:15:05 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.11/8.18.1.11) with ESMTP id 69K14qoB710587; Tue, 20 Oct 2026 04:15:05 GMT Received: from smtprelay01.wdc07v.mail.ibm.com ([172.16.1.68]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4hcmbk0mdq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 20 Oct 2026 04:15:05 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay01.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 69K4F3Uf57082158 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 20 Oct 2026 04:15:03 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 71E1E5805A; Tue, 20 Oct 2026 04:15:03 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D3DBD58051; Tue, 20 Oct 2026 04:15:02 +0000 (GMT) Received: from localhost.localdomain (unknown [9.61.246.47]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Tue, 20 Oct 2026 04:15:02 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=DV1IFiUs0NMsJxMSd rQp4BfluWICoQC73LSVE/kd2EI=; b=d5IYWnstafh3++1Ip0nv73I4wil3rq62h rnX0YtvXY4asBRoAS99Q+GElayefe0uNI5+W110FcyezRODLZ2AFtH96aChOvHSK 5IE9kAZOmNhZTTfRRz+cxvSjRjRxvhO6SJBf+0vdI9J4/0fnexODbGzd17VVSDk3 ciZYlHN+B1mmpSl1thNfqZ+ZT6DH5RqtMSO3cxo1XMTULNNPWMdkK9m6BdewaJER RqA7AiYOgHdp8IXGuT2xhdklD1yfxWs3Lfd5QMEtJr8ACjinz8HCSIX493VSP0Bk A8RJmhh0FwO50UlidC5jiQqPOGvDl9yFMHM4HQnWLd21uH+H6/uqg== From: Rorie Reyes To: devel@lists.libvirt.org Subject: [PATCH libvirt v2 2/4] qemu: extend GetCPUModelComparison to return responsible-properties Date: Tue, 20 Oct 2026 00:15:01 -0400 Message-ID: <20261020041459.97188-8-rreyes@linux.ibm.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20261020041459.97188-6-rreyes@linux.ibm.com> References: <20261020041459.97188-6-rreyes@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Info: AW1haW4tMjYxMDIwMDAxNiBTYWx0ZWRfXyovpUCz5bMDo rZeguBsBc5qfjc12UMKhnf9cCdgtBZVrvrXLmgtEKYVKc5nW78G6wovG4w2KvceR5ANvtS+jlD/ Lh/sAlTqgZNsy2c0QE8HGYlgjHvP0YQ= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMDIwMDAxNiBTYWx0ZWRfXywbf3LoGCljD j8UIBGU3CFcMs9JwHwarENrf94qjtZrILQpEHOhBdHkb94Vkiatcm0goBvlm93My87oyTrRSK7V khtdmZPfRc4aH6M80qCkpfR15JlFp7uxEcBKRZwrZTd9+PVwC+mB+gFriMAPqx04+Mc4QM6ngUQ RpVPQS3LmAIw7JCKKjXaNPCQfdlNyU1LMuj83iueJZowTtClHX2vuZnw9vgfZNKajao/RR1LaoU YbltvRJB1MKJ+ccr+XdqBwp3l456buXVY8gDkIS/pX+bqn61aZmlAmot1Tpci0kKlPnfpF3TWjb cRArySoECt+qW68xNoqrKpnCbAupBMvpTaPcPkecgQCJV00R+1ov6ZeB3IvbCAwTrnAXyrg2Tuj IrRC7kJYeCX8t1Ebw/1NyAIifzcILWypLpJaqZboKfZtV/5D8il33CfbB9EqNwWR3Dn+dQP/xKU ACdugXwesdivK9TqeQQ== X-Proofpoint-GUID: 9fC2VeJG35aF8zkYOz51GC0nxkI5xZWG X-Authority-Analysis: v=2.4 cv=JIKuIMKb c=1 sm=1 tr=0 ts=6ad6eac9 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=660iZSQnnn4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=BdP5bzPxqyexccjTCaAA:9 X-Proofpoint-ORIG-GUID: 9fC2VeJG35aF8zkYOz51GC0nxkI5xZWG X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-10-20_01,2026-10-19_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 priorityscore=1501 spamscore=0 phishscore=0 bulkscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2610190000 definitions=main-2610200016 Message-ID-Hash: 7YLOAAPTNBJDLUOP6U2CIHCBLMBDVFLQ X-Message-ID-Hash: 7YLOAAPTNBJDLUOP6U2CIHCBLMBDVFLQ X-MailFrom: rreyes@linux.ibm.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: jdenemar@redhat.com, fiuczy@linux.ibm.com, walling@linux.ibm.com, rreyes@linux.ibm.com X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1792470035273158500 Content-Type: text/plain; charset="utf-8" The qemu-cpu-model-comparison QMP command can return a "responsible-properties" array identifying which CPU properties caused an incompatibility result. Expose this through the JSON monitor layer by adding an optional `responsibleProps` output parameter (char ***) to qemuMonitorJSONGetCPUModelComparison() and its public wrapper qemuMonitorGetCPUModelComparison(). When the caller passes a non-NULL pointer the array is populated from the QMP response; passing NULL preserves the existing behaviour. The existing caller in qemuConnectCPUModelComparison() is updated to pass NULL so the build continues to work. Signed-off-by: Rorie Reyes --- src/qemu/qemu_driver.c | 2 +- src/qemu/qemu_monitor.c | 8 +++++--- src/qemu/qemu_monitor.h | 3 ++- src/qemu/qemu_monitor_json.c | 15 ++++++++++++++- src/qemu/qemu_monitor_json.h | 3 ++- tests/qemumonitorjsontest.c | 8 ++++---- 6 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 2500b6fb50..199eedca36 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -12137,7 +12137,7 @@ qemuConnectCPUModelComparison(virQEMUCaps *qemuCaps, if (qemuProcessQMPStart(proc) < 0) return VIR_CPU_COMPARE_ERROR; =20 - result =3D qemuMonitorGetCPUModelComparison(proc->mon, cpu_a, cpu_b); + result =3D qemuMonitorGetCPUModelComparison(proc->mon, cpu_a, cpu_b, N= ULL); =20 if (result =3D=3D VIR_CPU_COMPARE_ERROR) return VIR_CPU_COMPARE_ERROR; diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 265890922f..915ab7c10f 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3329,13 +3329,15 @@ qemuMonitorGetCPUModelBaseline(qemuMonitor *mon, virCPUCompareResult qemuMonitorGetCPUModelComparison(qemuMonitor *mon, virCPUDef *cpu_a, - virCPUDef *cpu_b) + virCPUDef *cpu_b, + char ***responsibleProps) { - VIR_DEBUG("cpu_a=3D%p cpu_b=3D%p", cpu_a, cpu_b); + VIR_DEBUG("cpu_a=3D%p cpu_b=3D%p responsibleProps=3D%p", cpu_a, cpu_b,= responsibleProps); =20 QEMU_CHECK_MONITOR_FULL(mon, return VIR_CPU_COMPARE_ERROR); =20 - return qemuMonitorJSONGetCPUModelComparison(mon, cpu_a, cpu_b); + return qemuMonitorJSONGetCPUModelComparison(mon, cpu_a, cpu_b, + responsibleProps); } =20 =20 diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index c94cfc2b35..f14bd9e04b 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1486,7 +1486,8 @@ qemuMonitorGetCPUModelBaseline(qemuMonitor *mon, virCPUCompareResult qemuMonitorGetCPUModelComparison(qemuMonitor *mon, virCPUDef *cpu_a, - virCPUDef *cpu_b); + virCPUDef *cpu_b, + char ***responsibleProps); =20 qemuMonitorCPUModelInfo * qemuMonitorCPUModelInfoCopy(const qemuMonitorCPUModelInfo *orig); diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index a8932af43c..5dec049479 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -5689,7 +5689,8 @@ qemuMonitorJSONGetCPUModelBaseline(qemuMonitor *mon, virCPUCompareResult qemuMonitorJSONGetCPUModelComparison(qemuMonitor *mon, virCPUDef *cpu_a, - virCPUDef *cpu_b) + virCPUDef *cpu_b, + char ***responsibleProps) { g_autoptr(virJSONValue) model_a =3D NULL; g_autoptr(virJSONValue) model_b =3D NULL; @@ -5697,6 +5698,10 @@ qemuMonitorJSONGetCPUModelComparison(qemuMonitor *mo= n, g_autoptr(virJSONValue) reply =3D NULL; const char *result; virJSONValue *data; + virJSONValue *propsArray; + + if (responsibleProps) + *responsibleProps =3D NULL; =20 if (!(model_a =3D qemuMonitorJSONMakeCPUModel(cpu_a, true, false)) || !(model_b =3D qemuMonitorJSONMakeCPUModel(cpu_b, true, false))) @@ -5722,6 +5727,14 @@ qemuMonitorJSONGetCPUModelComparison(qemuMonitor *mo= n, return VIR_CPU_COMPARE_ERROR; } =20 + propsArray =3D virJSONValueObjectGetArray(data, "responsible-propertie= s"); + + if (responsibleProps && propsArray && + virJSONValueArraySize(propsArray) > 0 && + !(*responsibleProps =3D virJSONValueArrayToStringList(propsArray))= ) { + return VIR_CPU_COMPARE_ERROR; + } + if (STREQ(result, "identical")) return VIR_CPU_COMPARE_IDENTICAL; =20 diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index e5d3d5d99e..ebee30036a 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -442,7 +442,8 @@ qemuMonitorJSONGetCPUModelBaseline(qemuMonitor *mon, virCPUCompareResult qemuMonitorJSONGetCPUModelComparison(qemuMonitor *mon, virCPUDef *cpu_a, - virCPUDef *cpu_b) + virCPUDef *cpu_b, + char ***responsibleProps) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3); =20 GHashTable * diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index b00d4512d1..db44a725ee 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -2661,7 +2661,7 @@ testQemuMonitorJSONqemuMonitorJSONGetCPUModelComparis= on(const void *opaque) return -1; =20 if (qemuMonitorJSONGetCPUModelComparison(qemuMonitorTestGetMonitor= (test), - cpu_a, cpu_b) !=3D VIR_CP= U_COMPARE_IDENTICAL) { + cpu_a, cpu_b, NULL) !=3D = VIR_CPU_COMPARE_IDENTICAL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", "unexpected result for 'identical'"); return -1; @@ -2675,7 +2675,7 @@ testQemuMonitorJSONqemuMonitorJSONGetCPUModelComparis= on(const void *opaque) return -1; =20 if (qemuMonitorJSONGetCPUModelComparison(qemuMonitorTestGetMonitor= (test), - cpu_a, cpu_b) !=3D VIR_CP= U_COMPARE_SUPERSET) { + cpu_a, cpu_b, NULL) !=3D = VIR_CPU_COMPARE_SUPERSET) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", "unexpected result for 'superset'"); return -1; @@ -2689,7 +2689,7 @@ testQemuMonitorJSONqemuMonitorJSONGetCPUModelComparis= on(const void *opaque) return -1; =20 if (qemuMonitorJSONGetCPUModelComparison(qemuMonitorTestGetMonitor= (test), - cpu_a, cpu_b) !=3D VIR_CP= U_COMPARE_INCOMPATIBLE) { + cpu_a, cpu_b, NULL) !=3D = VIR_CPU_COMPARE_INCOMPATIBLE) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", "unexpected result for 'subset'"); return -1; @@ -2703,7 +2703,7 @@ testQemuMonitorJSONqemuMonitorJSONGetCPUModelComparis= on(const void *opaque) return -1; =20 if (qemuMonitorJSONGetCPUModelComparison(qemuMonitorTestGetMonitor= (test), - cpu_a, cpu_b) !=3D VIR_CP= U_COMPARE_INCOMPATIBLE) { + cpu_a, cpu_b, NULL) !=3D = VIR_CPU_COMPARE_INCOMPATIBLE) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", "unexpected result for 'incompatible'"); return -1; --=20 2.48.1 From nobody Sat Oct 24 21:02:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1792470145; cv=none; d=zohomail.com; s=zohoarc; b=gRSo/VRQo1qpcqm159vw5ciG53OMyg9XzPrQsrCkaefqak0NhI3kpzqOqXARt/ChI46y5JsGHdbIUZ1di2W/A57bX2yRVdga6S1HCOIL9u3irNm9TGDZ3BAoFx8KHEzOkkD+93N6wy8cdInEtQbcleg8M7FhSubD2qg96bEsZPY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792470145; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=HgStfIw1MkNT2XN2gAMvW8SlJrTJjJgV83gyUFKxIPQ=; b=ISK2dfpxRa2H/qWUQ82AK8IqUWj/BZ8NMvMMkMNRFq7dN7ICn0hfy3robjo8kHNGAeCQIFloZ0gzJy7ImV65Ev4f6XM5JZ+oPlwbXP1I/RCWVlHewFH6Oqdh5Q8h/Z7aXnx/BKO/Hp5zcxgjNdo/shPwucsbmayhwnSSk4sYKrk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1792470145370359.53279991501597; Mon, 19 Oct 2026 21:22:25 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id C971841B6D; Tue, 20 Oct 2026 00:22:23 -0400 (EDT) Received: from [172.19.199.16] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id 9DEC741CDA; Tue, 20 Oct 2026 00:15:39 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id DE0803F8A8; Tue, 20 Oct 2026 00:15:08 -0400 (EDT) Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id DEA5F3F8A8 for ; Tue, 20 Oct 2026 00:15:07 -0400 (EDT) Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 69K1EAwB3640725; Tue, 20 Oct 2026 04:15:06 GMT Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4hdw5b8vh4-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 20 Oct 2026 04:15:06 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.11/8.18.1.11) with ESMTP id 69K14tmQ793044; Tue, 20 Oct 2026 04:15:05 GMT Received: from smtprelay02.wdc07v.mail.ibm.com ([172.16.1.69]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4hcmuh0j24-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 20 Oct 2026 04:15:05 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay02.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 69K4F4F720513322 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 20 Oct 2026 04:15:04 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 19CA15805C; Tue, 20 Oct 2026 04:15:04 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8F9D55805F; Tue, 20 Oct 2026 04:15:03 +0000 (GMT) Received: from localhost.localdomain (unknown [9.61.246.47]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Tue, 20 Oct 2026 04:15:03 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pp1; bh=HgStfI w1MkNT2XN2gAMvW8SlJrTJjJgV83gyUFKxIPQ=; b=Ayio/R1UDkHPnW0ExKkHkv pV8L5Ox7Eqr30h8Fsp7yhByukEc+8KmuTEY4JdWDcXRjVmnk2zeLZWyFcs/gYXoM CGK1ud6zlbE5iU7psqKfFaDqTfMMowFZ+NYPoyUjbu76/4afxlDlqc9Z9EyXvIe7 0fH78asRdVmM0Or4mYzHqRIluFVShNcIYQMm9koj7bmh4c05Th/Kl8PWwRyvbNHa wU9Ox1x7eQqElxwYR9m8NeQ+sv2GcDDtAVC4SSl+kpfWY3iVsrRakmens1BEuzfp 5GHdLFXDpfZa9lDEtBrXYMxlTET1EEQRsPMGVygvNUjrVjXzIC82bwKldwDNu8AQ == From: Rorie Reyes To: devel@lists.libvirt.org Subject: [PATCH libvirt v2 3/4] tests: extend qemuMonitorJSONGetCPUModelComparison test coverage Date: Tue, 20 Oct 2026 00:15:02 -0400 Message-ID: <20261020041459.97188-9-rreyes@linux.ibm.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20261020041459.97188-6-rreyes@linux.ibm.com> References: <20261020041459.97188-6-rreyes@linux.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: 9ne-6WpNSPUptQkJAOop5Wl_gSsV26dg X-Proofpoint-ORIG-GUID: 9ne-6WpNSPUptQkJAOop5Wl_gSsV26dg X-Proofpoint-Spam-Info: AW1haW4tMjYxMDIwMDAxNiBTYWx0ZWRfX2rJXMU9JRQQK rge4D1721b06acvS+guzfUcYUKj2J16Ar5slskfuBYMqv80zj61FSdFU3YWTz1ejBSuVSxFwkpB sd3ErUcsyokOaDJ8KQBLvlRUTL7kqVg= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMDIwMDAxNiBTYWx0ZWRfX48wlJWrCDKlb CyhvDxEPkB9WUvdmjyEUn5JlGh2ODQTel256t+yuhKWQ7DiO/7aX0f7YWkDMsaPke6nfk5VK8yR 7FUMBbVkA7/LQAnjBEqH1xhEQsOmutII3dcoOXQ2yRdmlhxRys9SI10FSpHs2184r1BzOrMQIM7 qM/PKrqVGhYgLXFXhp1UIPl9W09pUAIwDeWHMAZc5nUIf1+IuYu3Sr5o0TbTcdo4+RuZ28ZziRk j3TCkgHjcg7k9GsMnr0FSMIFA1DeBOhmOwLKkV/OV8YhCOhJjWBg8DeZV8qiCPNETt5KtwjimiB Imt6vtnpRNc/1VMLojq12UoPGUJ1ZMYBlyUkQ+McWxH884RQqfhJSFce35O2wKTTErBNjCSylKw mZLgAfRF09VvwZ6MV8za6X/exsHPmwgCVn2a+kfaxtsBt74FNzyiwG/XmQVbozXL4wr8AqC8/7S PKoLIGJ6Iph6dUZPuvw== X-Authority-Analysis: v=2.4 cv=Gb2CDgXL c=1 sm=1 tr=0 ts=6ad6eaca cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=IkcTkHD0fZMA:10 a=660iZSQnnn4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=VnNF1IyMAAAA:8 a=wpkt57PzYZZvteNbS40A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-10-20_01,2026-10-19_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 malwarescore=0 spamscore=0 phishscore=0 clxscore=1015 bulkscore=0 impostorscore=0 lowpriorityscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2610190000 definitions=main-2610200016 Message-ID-Hash: OPBHCAEF6NDKQBPUHO4FFCPI5E3X7YZQ X-Message-ID-Hash: OPBHCAEF6NDKQBPUHO4FFCPI5E3X7YZQ X-MailFrom: rreyes@linux.ibm.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: jdenemar@redhat.com, fiuczy@linux.ibm.com, walling@linux.ibm.com, rreyes@linux.ibm.com X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1792470147818158500 Add test cases for the responsible-properties output parameter introduced in the previous patch: - responsible-properties populated correctly from QMP response - responsible-properties NULL when key is absent from response - responsible-properties NULL when array is empty - subset result with responsible-properties Each case is wrapped in its own block so responsibleProps is automatically freed after each subtest. Signed-off-by: Rorie Reyes --- tests/qemumonitorjsontest.c | 100 ++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index db44a725ee..5dc8ba67e6 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -2654,6 +2654,80 @@ testQemuMonitorJSONqemuMonitorJSONGetCPUModelCompari= son(const void *opaque) if (!(test =3D qemuMonitorTestNewSchema(data->xmlopt, data->schema))) return -1; =20 + /* responsible-properties populated correctly */ + { + g_auto(GStrv) responsibleProps =3D NULL; + + if (qemuMonitorTestAddItem(test, "query-cpu-model-comparison", + "{\"return\":{\"result\":\"incompatible= \"," + "\"responsible-properties\":[\"prop_a\"= ,\"prop_b\"]}}") < 0) + return -1; + + if (qemuMonitorJSONGetCPUModelComparison(qemuMonitorTestGetMonitor= (test), + cpu_a, cpu_b, + &responsibleProps) !=3D V= IR_CPU_COMPARE_INCOMPATIBLE) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + "unexpected result for incompatible with props"= ); + return -1; + } + + if (!responsibleProps || + STRNEQ_NULLABLE(responsibleProps[0], "prop_a") || + STRNEQ_NULLABLE(responsibleProps[1], "prop_b") || + responsibleProps[2] !=3D NULL) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + "unexpected responsible-properties"); + return -1; + } + } + + /* responsible-properties absent from response =E2=80=94 must be NULL = */ + { + g_auto(GStrv) responsibleProps =3D NULL; + + if (qemuMonitorTestAddItem(test, "query-cpu-model-comparison", + "{\"return\":{\"result\":\"incompatible= \"}}") < 0) + return -1; + + if (qemuMonitorJSONGetCPUModelComparison(qemuMonitorTestGetMonitor= (test), + cpu_a, cpu_b, + &responsibleProps) !=3D V= IR_CPU_COMPARE_INCOMPATIBLE) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + "unexpected result"); + return -1; + } + + if (responsibleProps) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + "responsible-properties should be NULL when key= absent"); + return -1; + } + } + + /* responsible-properties empty array =E2=80=94 must be NULL */ + { + g_auto(GStrv) responsibleProps =3D NULL; + + if (qemuMonitorTestAddItem(test, "query-cpu-model-comparison", + "{\"return\":{\"result\":\"incompatible= \"," + "\"responsible-properties\":[]}}") < 0) + return -1; + + if (qemuMonitorJSONGetCPUModelComparison(qemuMonitorTestGetMonitor= (test), + cpu_a, cpu_b, + &responsibleProps) !=3D V= IR_CPU_COMPARE_INCOMPATIBLE) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + "unexpected result"); + return -1; + } + + if (responsibleProps) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + "responsible-properties should be NULL for empt= y array"); + return -1; + } + } + /* identical */ { if (qemuMonitorTestAddItem(test, "query-cpu-model-comparison", @@ -2710,6 +2784,32 @@ testQemuMonitorJSONqemuMonitorJSONGetCPUModelCompari= son(const void *opaque) } } =20 + /* subset with responsible-properties */ + { + g_auto(GStrv) responsibleProps =3D NULL; + + if (qemuMonitorTestAddItem(test, "query-cpu-model-comparison", + "{\"return\":{\"result\":\"subset\"," + "\"responsible-properties\":[\"feat_x\"= ]}}") < 0) + return -1; + + if (qemuMonitorJSONGetCPUModelComparison(qemuMonitorTestGetMonitor= (test), + cpu_a, cpu_b, + &responsibleProps) !=3D V= IR_CPU_COMPARE_INCOMPATIBLE) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + "unexpected result for subset with props"); + return -1; + } + + if (!responsibleProps || + STRNEQ_NULLABLE(responsibleProps[0], "feat_x") || + responsibleProps[1] !=3D NULL) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + "unexpected responsible-properties"); + return -1; + } + } + return 0; } =20 --=20 2.48.1 From nobody Sat Oct 24 21:02:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1792470233; cv=none; d=zohomail.com; s=zohoarc; b=VJ7OfWNOnc8LD+7kHXov8rka8uRymovpvrSVZFMR8nWi41AACEgTNVeDpPsNdHcBEJ+bald3JuHu9ox/n4Q9oIFtAo5gzAQ6Nd5xZ1gD12lJm3/tS69Yfr3KlUZh9Y9R6A+yyZe1Ep4BYJRVxVBUUNhjrUAd/AwLsOGQ1B3xQQM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792470233; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=ZKc9NoWvC+ck2BhZTVifIE6jtidJLgwrSyd2GOoz1Do=; b=CQcFGf4I8AE9CqRNIFIczhtgZoZ2IMzXh24AlXLHxAyHD9I/I0j8GmgDML7D9kB59zzEJkbX3g0UIYbT80s3McDJQqzFoyJWHJimATXFtC6yRwdO8DbW0zQ4XAeDcwJnxCcwDd4KNjW3ktNn+DZYwe8pgMZgVpcgGOJTEgo0/44= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1792470233942908.2501859874452; Mon, 19 Oct 2026 21:23:53 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 9FDF041ADF; Tue, 20 Oct 2026 00:23:52 -0400 (EDT) Received: from [172.19.199.16] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id DAF1741B4A; Tue, 20 Oct 2026 00:15:44 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id B9E553F8A8; Tue, 20 Oct 2026 00:15:09 -0400 (EDT) Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 939EF3F383 for ; Tue, 20 Oct 2026 00:15:08 -0400 (EDT) Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 69K1EDZK1255130; Tue, 20 Oct 2026 04:15:07 GMT Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4hdw58gvd7-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 20 Oct 2026 04:15:07 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.11/8.18.1.11) with ESMTP id 69K14r9G710590; Tue, 20 Oct 2026 04:15:06 GMT Received: from smtprelay02.wdc07v.mail.ibm.com ([172.16.1.69]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4hcmbk0mdv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 20 Oct 2026 04:15:06 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay02.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 69K4F4KG28574436 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 20 Oct 2026 04:15:05 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BB20E58060; Tue, 20 Oct 2026 04:15:04 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 49E4C5805A; Tue, 20 Oct 2026 04:15:04 +0000 (GMT) Received: from localhost.localdomain (unknown [9.61.246.47]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Tue, 20 Oct 2026 04:15:04 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pp1; bh=ZKc9No WvC+ck2BhZTVifIE6jtidJLgwrSyd2GOoz1Do=; b=K+hagK6VZMgrK3TH/S93bs kgaJSsYiyo+7z+284mMdzktdp0i7S2qgKaznldfkLIylwlC5+ZRf5TR7qeiQm2dd O70CY/a+NsBJzcKTcj3IWFuW5dWLOI8Hz3g2+gT7nN28ZlqLG1ypYrLidTBjT+ZS JYfsqndTO5VWzpQcRznu8pEJcB/h+9rFVIBgzyYzBlDTJ6qLApKaIWiLmkRf3zoW EdB4SCMQ/nqdAWxQoM4lvCJ/u0RfSApHRCylH6ritzpp9dakunCnVpu1ZXR2sOSg OyaoCkLCR+1dRjuuOrElkGSwOwW44kG6cFz2DbV0nEF56JBpGjhLLXgH6KpZnShA == From: Rorie Reyes To: devel@lists.libvirt.org Subject: [PATCH libvirt v2 4/4] qemu: introduce qemuProcessCheckS390CPU helper Date: Tue, 20 Oct 2026 00:15:03 -0400 Message-ID: <20261020041459.97188-10-rreyes@linux.ibm.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20261020041459.97188-6-rreyes@linux.ibm.com> References: <20261020041459.97188-6-rreyes@linux.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: lR2590lRyYR2UB85ZVDitrI77wRSYap2 X-Proofpoint-Spam-Info: AW1haW4tMjYxMDIwMDAxNiBTYWx0ZWRfX34FO11ujGvYg T8Yt7aCu02yR4P3WLQpcXHmhxYZmbjMVNb7czy8pPka3EP+LA9vcKH/mIfByjbsK5SdbcO8wNHt juqVPF8cBw4vOla5sn2yHOYDHCGS4oY= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMDIwMDAxNiBTYWx0ZWRfXz0gWfL1aarF1 f/VRnH8Gw65zc95cleAU0Uyt+aOzh7kK7cSp4IinhaANNaNvfwgnVHPTBrZ0ZHJ1u5/3Wmeabh3 D4q4XekrY01cGrfkhGHu3367ONIMfUI2hS1TWKiemhpc4HwnCrfqxSFL3NyMLe1E7xWqYUwJ5Qt g+G1Ob4WHamb9EHNt2cm9tReNlruguZP3W0Rk4rTkUZMuROcTtmK51lTGKX1pE82FX+d0lDzg9b UyhUCqzZAN1GbfMCXnrWrPUW8GqGunIslzdU8Cxe+Kz/ntvXcoOVGtSHjfEOYqsRUSTuI72+XmN QgG0FDn6cWh/lDQuoW85lZBCXxcDyLalaEd05bZgARnvCxlKFNxOZgmTumw/57zvzoTj0O3X11M fizN5fUTNZLmdMkPMG/W1dWNjhYMv+jr3qFb5iIGhBKQRsB3BdtIbipWFPJJPFtKRJyKS+9I06g +ZyKgfWnIFsBXiw6SVw== X-Proofpoint-ORIG-GUID: lR2590lRyYR2UB85ZVDitrI77wRSYap2 X-Authority-Analysis: v=2.4 cv=Ob4NnRTY c=1 sm=1 tr=0 ts=6ad6eacb cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=IkcTkHD0fZMA:10 a=660iZSQnnn4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VnNF1IyMAAAA:8 a=dFYDGdVtOYc7WF5ew-0A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-10-20_01,2026-10-19_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 adultscore=0 phishscore=0 spamscore=0 suspectscore=0 lowpriorityscore=0 clxscore=1015 impostorscore=0 priorityscore=1501 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2610190000 definitions=main-2610200016 Message-ID-Hash: T4O34OXWQEDT2MXFVVTYD6UGPBEM4AUC X-Message-ID-Hash: T4O34OXWQEDT2MXFVVTYD6UGPBEM4AUC X-MailFrom: rreyes@linux.ibm.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: jdenemar@redhat.com, fiuczy@linux.ibm.com, walling@linux.ibm.com, rreyes@linux.ibm.com X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1792470235244158500 Add a new helper qemuProcessCheckS390CPU() in qemu_process.c that wraps the QMP query-cpu-model-comparison probe for s390x and returns a virCPUCompareResult directly. The helper filters out the special "type" responsible-property (which signals a CPU generation mismatch rather than a missing feature) before reporting incompatibility to the caller. When reporting incompatibility, the differing properties are listed in the error message when available. If no responsible-properties are returned (or all are filtered out), a generic incompatibility message is reported instead. Wire the helper into qemuProcessUpdateGuestCPU() so that s390x CPU model compatibility is checked for real domain start paths (migration, snapshot restore) when the QEMU_CAPS_QUERY_CPU_MODEL_COMPARISON capability is present. The host CPU is passed as the first argument and the guest CPU as the second, matching qemuConnectCPUModelComparison(). The check is skipped in pretend mode (VIR_QEMU_PROCESS_START_PRETEND) since that path is used for command-line generation and does not involve a running QEMU instance. It is also skipped when the guest CPU definition has no model yet (for example host-model on a fresh start), since that model is resolved from the host CPU later and cannot be incompatible with it. Simplify qemuConnectCPUModelComparison() in qemu_driver.c to delegate directly to qemuProcessCheckS390CPU(). Signed-off-by: Rorie Reyes --- src/qemu/qemu_driver.c | 23 ++----------- src/qemu/qemu_process.c | 75 +++++++++++++++++++++++++++++++++++++++++ src/qemu/qemu_process.h | 9 +++++ 3 files changed, 86 insertions(+), 21 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 199eedca36..ef549a2c02 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -12127,27 +12127,8 @@ qemuConnectCPUModelComparison(virQEMUCaps *qemuCap= s, virCPUDef *cpu_b, bool failIncompatible) { - g_autoptr(qemuProcessQMP) proc =3D NULL; - virCPUCompareResult result; - - if (!(proc =3D qemuProcessQMPNew(virQEMUCapsGetBinary(qemuCaps), - libDir, runUid, runGid, false))) - return VIR_CPU_COMPARE_ERROR; - - if (qemuProcessQMPStart(proc) < 0) - return VIR_CPU_COMPARE_ERROR; - - result =3D qemuMonitorGetCPUModelComparison(proc->mon, cpu_a, cpu_b, N= ULL); - - if (result =3D=3D VIR_CPU_COMPARE_ERROR) - return VIR_CPU_COMPARE_ERROR; - - if (failIncompatible && result =3D=3D VIR_CPU_COMPARE_INCOMPATIBLE) { - virReportError(VIR_ERR_CPU_INCOMPATIBLE, NULL); - return VIR_CPU_COMPARE_ERROR; - } - - return result; + return qemuProcessCheckS390CPU(qemuCaps, libDir, runUid, runGid, + cpu_a, cpu_b, failIncompatible); } =20 =20 diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 3f1960f314..dfb9e0785a 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -6708,6 +6708,20 @@ qemuProcessUpdateGuestCPU(virDomainDef *def, VIR_QEMU_CAPS_HOST_CPU_FULL, true) < 0) return -1; =20 + if (!(flags & VIR_QEMU_PROCESS_START_PRETEND) && + def->cpu->model && + ARCH_IS_S390(hostarch) && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_COMPARISON)= ) { + virCPUDef *hvCPU =3D virQEMUCapsGetHostModel(qemuCaps, def->vi= rtType, + VIR_QEMU_CAPS_HOST_= CPU_REPORTED); + + if (hvCPU && hvCPU->fallback =3D=3D VIR_CPU_FALLBACK_FORBID && + qemuProcessCheckS390CPU(qemuCaps, cfg->libDir, + cfg->user, cfg->group, + hvCPU, def->cpu, true) =3D=3D VIR_= CPU_COMPARE_ERROR) + return -1; + } + /* When starting a fresh domain we disable all features removed fr= om * the specified CPU model to make sure they are only used if * explicitly requested. But when we are restoring a previously ru= nning @@ -10589,6 +10603,67 @@ qemuProcessQMPStart(qemuProcessQMP *proc) } =20 =20 +virCPUCompareResult +qemuProcessCheckS390CPU(virQEMUCaps *qemuCaps, + const char *libDir, + uid_t runUid, + gid_t runGid, + virCPUDef *cpu_a, + virCPUDef *cpu_b, + bool failIncompatible) +{ + g_autoptr(qemuProcessQMP) proc =3D NULL; + g_auto(GStrv) responsibleProps =3D NULL; + virCPUCompareResult result; + + if (!(proc =3D qemuProcessQMPNew(virQEMUCapsGetBinary(qemuCaps), + libDir, runUid, runGid, false))) + return VIR_CPU_COMPARE_ERROR; + + if (qemuProcessQMPStart(proc) < 0) + return VIR_CPU_COMPARE_ERROR; + + result =3D qemuMonitorGetCPUModelComparison(proc->mon, cpu_a, cpu_b, + &responsibleProps); + + if (result =3D=3D VIR_CPU_COMPARE_ERROR) + return VIR_CPU_COMPARE_ERROR; + + if (result =3D=3D VIR_CPU_COMPARE_IDENTICAL || result =3D=3D VIR_CPU_C= OMPARE_SUPERSET) + return result; + + /* result is VIR_CPU_COMPARE_INCOMPATIBLE =E2=80=94 filter out the spe= cial "type" + * property which signals a CPU generation mismatch rather than a miss= ing + * feature and should not be reported as such to the user. */ + if (responsibleProps) { + size_t i, j; + for (i =3D 0, j =3D 0; responsibleProps[i]; i++) { + if (STRNEQ(responsibleProps[i], "type")) + responsibleProps[j++] =3D responsibleProps[i]; + else + g_free(responsibleProps[i]); + } + responsibleProps[j] =3D NULL; + } + + if (failIncompatible) { + if (responsibleProps && responsibleProps[0]) { + g_autofree char *props =3D g_strjoinv(", ", responsibleProps); + + virReportError(VIR_ERR_CPU_INCOMPATIBLE, + _("guest CPU model is not compatible with the d= estination host CPU model, differing properties: %1$s"), + props); + } else { + virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s", + _("guest CPU model is not compatible with the d= estination host CPU model")); + } + return VIR_CPU_COMPARE_ERROR; + } + + return VIR_CPU_COMPARE_INCOMPATIBLE; +} + + void qemuProcessHandleNbdkitExit(qemuNbdkitProcess *nbdkit, virDomainObj *vm) diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h index 5d8f1f89d5..d9dd5e185e 100644 --- a/src/qemu/qemu_process.h +++ b/src/qemu/qemu_process.h @@ -258,6 +258,15 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(qemuProcessQMP, qemuProc= essQMPFree); =20 int qemuProcessQMPStart(qemuProcessQMP *proc); =20 +virCPUCompareResult +qemuProcessCheckS390CPU(virQEMUCaps *qemuCaps, + const char *libDir, + uid_t runUid, + gid_t runGid, + virCPUDef *cpu_a, + virCPUDef *cpu_b, + bool failIncompatible); + void qemuProcessCleanupMigrationJob(virQEMUDriver *driver, virDomainObj *vm); =20 --=20 2.48.1