From nobody Mon Apr 29 05:07:26 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1512652835533522.0962218140797; Thu, 7 Dec 2017 05:20:35 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 86B6E4903D; Thu, 7 Dec 2017 13:20:33 +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 40D7B7C549; Thu, 7 Dec 2017 13:20:33 +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 B9FA44BB79; Thu, 7 Dec 2017 13:20:13 +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 vB7DKCYX011076 for ; Thu, 7 Dec 2017 08:20:12 -0500 Received: by smtp.corp.redhat.com (Postfix) id E03DD69416; Thu, 7 Dec 2017 13:20:12 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.105]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B3BC86940C for ; Thu, 7 Dec 2017 13:20:09 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 860561000E7; Thu, 7 Dec 2017 14:20:08 +0100 (CET) From: Jiri Denemark To: libvir-list@redhat.com Date: Thu, 7 Dec 2017 14:20:06 +0100 Message-Id: <49e46c086e1bd2a70cee7937887b011512b7edf3.1512652445.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 1/2] qemu: Separate fetching CPU definitions from filling qemuCaps 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-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Thu, 07 Dec 2017 13:20:34 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" virQEMUCapsProbeQMPCPUDefinitions is now a small wrapper which fills in qemuCaps with CPU models fetched by virQEMUCapsFetchCPUDefinitions. Signed-off-by: Jiri Denemark --- src/qemu/qemu_capabilities.c | 59 +++++++++++++++++++++++++++-------------= ---- src/qemu/qemu_capabilities.h | 1 + 2 files changed, 38 insertions(+), 22 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 29714855b0..8c65de956e 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2956,30 +2956,19 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemu= Caps, } =20 =20 -int -virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps, - qemuMonitorPtr mon, - bool tcg) +virDomainCapsCPUModelsPtr +virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon) { - virDomainCapsCPUModelsPtr models; - qemuMonitorCPUDefInfoPtr *cpus; - int ncpus; - int ret =3D -1; + virDomainCapsCPUModelsPtr models =3D NULL; + qemuMonitorCPUDefInfoPtr *cpus =3D NULL; + int ncpus =3D 0; size_t i; =20 - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_DEFINITIONS)) - return 0; - if ((ncpus =3D qemuMonitorGetCPUDefinitions(mon, &cpus)) < 0) - return -1; + goto error; =20 if (!(models =3D virDomainCapsCPUModelsNew(ncpus))) - goto cleanup; - - if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) - qemuCaps->tcgCPUModels =3D models; - else - qemuCaps->kvmCPUModels =3D models; + goto error; =20 for (i =3D 0; i < ncpus; i++) { virDomainCapsCPUUsable usable =3D VIR_DOMCAPS_CPU_USABLE_UNKNOWN; @@ -2991,18 +2980,44 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qe= muCaps, =20 if (virDomainCapsCPUModelsAddSteal(models, &cpus[i]->name, usable, &cpus[i]->blockers) < 0) - goto cleanup; + goto error; } =20 - ret =3D 0; - cleanup: for (i =3D 0; i < ncpus; i++) qemuMonitorCPUDefInfoFree(cpus[i]); VIR_FREE(cpus); - return ret; + return models; + + error: + virObjectUnref(models); + models =3D NULL; + goto cleanup; } =20 + +int +virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps, + qemuMonitorPtr mon, + bool tcg) +{ + virDomainCapsCPUModelsPtr models =3D NULL; + + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_DEFINITIONS)) + return 0; + + if (!(models =3D virQEMUCapsFetchCPUDefinitions(mon))) + return -1; + + if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) + qemuCaps->tcgCPUModels =3D models; + else + qemuCaps->kvmCPUModels =3D models; + + return 0; +} + + static int virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps, qemuMonitorPtr mon, diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 9f239a0ecf..e73dbaa557 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -485,6 +485,7 @@ int virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCap= s, virDomainCapsCPUUsable usable); virDomainCapsCPUModelsPtr virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemu= Caps, virDomainVirtType t= ype); +virDomainCapsCPUModelsPtr virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mo= n); =20 typedef enum { /* Host CPU definition reported in domain capabilities. */ --=20 2.15.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 05:07:26 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1512652860567587.3346704345694; Thu, 7 Dec 2017 05:21:00 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 003644A700; Thu, 7 Dec 2017 13:20:59 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D43A37A3BF; Thu, 7 Dec 2017 13:20:58 +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 B6A91180474A; Thu, 7 Dec 2017 13:20:42 +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 vB7DKCd6011075 for ; Thu, 7 Dec 2017 08:20:12 -0500 Received: by smtp.corp.redhat.com (Postfix) id DFFE86269B; Thu, 7 Dec 2017 13:20:12 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.105]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B3B7763BDC for ; Thu, 7 Dec 2017 13:20:09 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 89514104532; Thu, 7 Dec 2017 14:20:08 +0100 (CET) From: Jiri Denemark To: libvir-list@redhat.com Date: Thu, 7 Dec 2017 14:20:07 +0100 Message-Id: <28cb812b2aa941bcf0a86fe324a556d6e8ded1c6.1512652445.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 2/2] qemu: Make sure host-model uses CPU model supported by QEMU 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-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Thu, 07 Dec 2017 13:20:59 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" When reconnecting to a running domain started by old libvirt, which did not change host-model into a custom CPU definition, we replace the CPU definition with a specific CPU model from host capabilities. However, that CPU model may not be supported by the running qemu process. We need to translate the CPU model to one of the models which libvirt could have used when starting the domain. https://bugzilla.redhat.com/show_bug.cgi?id=3D1521202 Signed-off-by: Jiri Denemark --- src/qemu/qemu_process.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 93a24cde15..a0f430f89f 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3853,6 +3853,30 @@ qemuProcessUpdateAndVerifyCPU(virQEMUDriverPtr drive= r, } =20 =20 +static virDomainCapsCPUModelsPtr +qemuProcessFetchCPUDefinitions(virQEMUDriverPtr driver, + virDomainObjPtr vm, + qemuDomainAsyncJob asyncJob) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + virDomainCapsCPUModelsPtr models =3D NULL; + + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + goto error; + + models =3D virQEMUCapsFetchCPUDefinitions(priv->mon); + + if (qemuDomainObjExitMonitor(driver, vm) < 0) + goto error; + + return models; + + error: + virObjectUnref(models); + return NULL; +} + + static int qemuProcessUpdateCPU(virQEMUDriverPtr driver, virDomainObjPtr vm, @@ -3860,6 +3884,7 @@ qemuProcessUpdateCPU(virQEMUDriverPtr driver, { virCPUDataPtr cpu =3D NULL; virCPUDataPtr disabled =3D NULL; + virDomainCapsCPUModelsPtr models =3D NULL; int ret =3D -1; =20 if (qemuProcessFetchGuestCPU(driver, vm, asyncJob, &cpu, &disabled) < = 0) @@ -3868,11 +3893,16 @@ qemuProcessUpdateCPU(virQEMUDriverPtr driver, if (qemuProcessUpdateLiveGuestCPU(vm, cpu, disabled) < 0) goto cleanup; =20 + if (!(models =3D qemuProcessFetchCPUDefinitions(driver, vm, asyncJob))= || + virCPUTranslate(vm->def->os.arch, vm->def->cpu, models) < 0) + goto cleanup; + ret =3D 0; =20 cleanup: virCPUDataFree(cpu); virCPUDataFree(disabled); + virObjectUnref(models); return ret; } =20 --=20 2.15.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list