From nobody Mon Apr 29 00:21:00 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.zoho.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 149209043178768.76296992261018; Thu, 13 Apr 2017 06:33:51 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0082637B2DC; Thu, 13 Apr 2017 13:33:50 +0000 (UTC) Received: from colo-mx.corp.redhat.com (unknown [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C7F947FB97; Thu, 13 Apr 2017 13:33:49 +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 6349865D3A; Thu, 13 Apr 2017 13:33:04 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v3DDX35q013052 for ; Thu, 13 Apr 2017 09:33:03 -0400 Received: by smtp.corp.redhat.com (Postfix) id A2432781F2; Thu, 13 Apr 2017 13:33:03 +0000 (UTC) Received: from virval.usersys.redhat.com (dhcp129-92.brq.redhat.com [10.34.129.92]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 762A678200 for ; Thu, 13 Apr 2017 13:33:00 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id B2BA1100096; Thu, 13 Apr 2017 15:32:59 +0200 (CEST) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 0082637B2DC Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 0082637B2DC From: Jiri Denemark To: libvir-list@redhat.com Date: Thu, 13 Apr 2017 15:32:50 +0200 Message-Id: <0b41954c2bdb7a3a61b889093751aa2c35bdda0c.1492090347.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.13 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 1/9] qemu: Introduce virQEMUCapsSetHostModel 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Thu, 13 Apr 2017 13:33:51 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" A simple helper as a complement to virQEMUCapsGetHostModel. Signed-off-by: Jiri Denemark --- src/qemu/qemu_capabilities.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 3ab99f450..d2b6b7604 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2455,6 +2455,18 @@ virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps, } =20 =20 +static void +virQEMUCapsSetHostModel(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, + virCPUDefPtr cpu) +{ + if (type =3D=3D VIR_DOMAIN_VIRT_KVM) + qemuCaps->kvmCPUModel =3D cpu; + else + qemuCaps->tcgCPUModel =3D cpu; +} + + bool virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, virCapsPtr caps, @@ -3336,10 +3348,7 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, goto error; } =20 - if (type =3D=3D VIR_DOMAIN_VIRT_KVM) - qemuCaps->kvmCPUModel =3D cpu; - else - qemuCaps->tcgCPUModel =3D cpu; + virQEMUCapsSetHostModel(qemuCaps, type, cpu); =20 cleanup: virCPUDefFree(hostCPU); --=20 2.12.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 00:21:00 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.zoho.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 1492090432018400.29577644419123; Thu, 13 Apr 2017 06:33:52 -0700 (PDT) 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 4F1E06E773; Thu, 13 Apr 2017 13:33:50 +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 009BFACD56; Thu, 13 Apr 2017 13:33:49 +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 4CC291853D0B; Thu, 13 Apr 2017 13:33:11 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v3DDX7fL013103 for ; Thu, 13 Apr 2017 09:33:07 -0400 Received: by smtp.corp.redhat.com (Postfix) id 37F46C05B8; Thu, 13 Apr 2017 13:33:07 +0000 (UTC) Received: from virval.usersys.redhat.com (dhcp129-92.brq.redhat.com [10.34.129.92]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0BC6EC05C4 for ; Thu, 13 Apr 2017 13:33:00 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id B4A8B1041A8; Thu, 13 Apr 2017 15:32:59 +0200 (CEST) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 4F1E06E773 Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 4F1E06E773 From: Jiri Denemark To: libvir-list@redhat.com Date: Thu, 13 Apr 2017 15:32:51 +0200 Message-Id: <921a1fd8eeb520d22851e8ed8e75f7431b60ff2f.1492090347.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.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 2/9] qemu: Move qemuCaps CPU data copying into a separate function 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.25]); Thu, 13 Apr 2017 13:33:51 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This introduces virQEMUCapsHostCPUDataCopy which will later be refactored a bit and called twice from virQEMUCapsNewCopy. Signed-off-by: Jiri Denemark --- src/qemu/qemu_capabilities.c | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index d2b6b7604..218fd50b2 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2118,6 +2118,30 @@ virQEMUCapsNew(void) } =20 =20 +static int +virQEMUCapsHostCPUDataCopy(virQEMUCapsPtr dst, + virQEMUCapsPtr src) +{ + if (src->kvmCPUModel && + !(dst->kvmCPUModel =3D virCPUDefCopy(src->kvmCPUModel))) + return -1; + + if (src->tcgCPUModel && + !(dst->tcgCPUModel =3D virCPUDefCopy(src->tcgCPUModel))) + return -1; + + if (src->kvmCPUModelInfo && + !(dst->kvmCPUModelInfo =3D qemuMonitorCPUModelInfoCopy(src->kvmCPU= ModelInfo))) + return -1; + + if (src->tcgCPUModelInfo && + !(dst->tcgCPUModelInfo =3D qemuMonitorCPUModelInfoCopy(src->tcgCPU= ModelInfo))) + return -1; + + return 0; +} + + virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps) { virQEMUCapsPtr ret =3D virQEMUCapsNew(); @@ -2155,20 +2179,7 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qem= uCaps) goto error; } =20 - if (qemuCaps->kvmCPUModel && - !(ret->kvmCPUModel =3D virCPUDefCopy(qemuCaps->kvmCPUModel))) - goto error; - - if (qemuCaps->tcgCPUModel && - !(ret->tcgCPUModel =3D virCPUDefCopy(qemuCaps->tcgCPUModel))) - goto error; - - if (qemuCaps->kvmCPUModelInfo && - !(ret->kvmCPUModelInfo =3D qemuMonitorCPUModelInfoCopy(qemuCaps->k= vmCPUModelInfo))) - goto error; - - if (qemuCaps->tcgCPUModelInfo && - !(ret->tcgCPUModelInfo =3D qemuMonitorCPUModelInfoCopy(qemuCaps->t= cgCPUModelInfo))) + if (virQEMUCapsHostCPUDataCopy(ret, qemuCaps) < 0) goto error; =20 if (VIR_ALLOC_N(ret->machineTypes, qemuCaps->nmachineTypes) < 0) --=20 2.12.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 00:21:00 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.zoho.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 1492090419680540.5261077631326; Thu, 13 Apr 2017 06:33:39 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5A3F77D0C8; Thu, 13 Apr 2017 13:33:38 +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 304AC7C747; Thu, 13 Apr 2017 13:33:38 +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 33A3918523EE; Thu, 13 Apr 2017 13:33:07 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v3DDX4Xd013061 for ; Thu, 13 Apr 2017 09:33:04 -0400 Received: by smtp.corp.redhat.com (Postfix) id EB2E4A27B1; Thu, 13 Apr 2017 13:33:03 +0000 (UTC) Received: from virval.usersys.redhat.com (dhcp129-92.brq.redhat.com [10.34.129.92]) by smtp.corp.redhat.com (Postfix) with ESMTPS id ACAEE9FDF2 for ; Thu, 13 Apr 2017 13:33:00 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id B68BA1041A9; Thu, 13 Apr 2017 15:32:59 +0200 (CEST) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 5A3F77D0C8 Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 5A3F77D0C8 From: Jiri Denemark To: libvir-list@redhat.com Date: Thu, 13 Apr 2017 15:32:52 +0200 Message-Id: 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.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 3/9] qemu: Introduce virQEMUCapsHostCPUDataClear 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.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Thu, 13 Apr 2017 13:33:39 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" To keep freeing of host CPU data in one place. Signed-off-by: Jiri Denemark --- src/qemu/qemu_capabilities.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 218fd50b2..6f0d6287e 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2142,6 +2142,21 @@ virQEMUCapsHostCPUDataCopy(virQEMUCapsPtr dst, } =20 =20 +static void +virQEMUCapsHostCPUDataClear(virQEMUCapsPtr qemuCaps) +{ + qemuMonitorCPUModelInfoFree(qemuCaps->kvmCPUModelInfo); + qemuMonitorCPUModelInfoFree(qemuCaps->tcgCPUModelInfo); + qemuCaps->kvmCPUModelInfo =3D NULL; + qemuCaps->tcgCPUModelInfo =3D NULL; + + virCPUDefFree(qemuCaps->kvmCPUModel); + virCPUDefFree(qemuCaps->tcgCPUModel); + qemuCaps->kvmCPUModel =3D NULL; + qemuCaps->tcgCPUModel =3D NULL; +} + + virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps) { virQEMUCapsPtr ret =3D virQEMUCapsNew(); @@ -2228,10 +2243,7 @@ void virQEMUCapsDispose(void *obj) =20 VIR_FREE(qemuCaps->gicCapabilities); =20 - qemuMonitorCPUModelInfoFree(qemuCaps->kvmCPUModelInfo); - qemuMonitorCPUModelInfoFree(qemuCaps->tcgCPUModelInfo); - virCPUDefFree(qemuCaps->kvmCPUModel); - virCPUDefFree(qemuCaps->tcgCPUModel); + virQEMUCapsHostCPUDataClear(qemuCaps); } =20 void @@ -4109,15 +4121,7 @@ virQEMUCapsReset(virQEMUCapsPtr qemuCaps) VIR_FREE(qemuCaps->gicCapabilities); qemuCaps->ngicCapabilities =3D 0; =20 - qemuMonitorCPUModelInfoFree(qemuCaps->kvmCPUModelInfo); - qemuMonitorCPUModelInfoFree(qemuCaps->tcgCPUModelInfo); - qemuCaps->kvmCPUModelInfo =3D NULL; - qemuCaps->tcgCPUModelInfo =3D NULL; - - virCPUDefFree(qemuCaps->kvmCPUModel); - virCPUDefFree(qemuCaps->tcgCPUModel); - qemuCaps->kvmCPUModel =3D NULL; - qemuCaps->tcgCPUModel =3D NULL; + virQEMUCapsHostCPUDataClear(qemuCaps); } =20 =20 --=20 2.12.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 00:21:00 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.zoho.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 1492090443203845.736795725203; Thu, 13 Apr 2017 06:34:03 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E62638FCE2; Thu, 13 Apr 2017 13:34:00 +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 52F7A9ECF7; Thu, 13 Apr 2017 13:34:00 +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 731FD1853D11; Thu, 13 Apr 2017 13:33:14 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v3DDX7U8013108 for ; Thu, 13 Apr 2017 09:33:07 -0400 Received: by smtp.corp.redhat.com (Postfix) id 60A3DACD54; Thu, 13 Apr 2017 13:33:07 +0000 (UTC) Received: from virval.usersys.redhat.com (dhcp129-92.brq.redhat.com [10.34.129.92]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 103CFC05CD for ; Thu, 13 Apr 2017 13:33:00 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id B85401041AA; Thu, 13 Apr 2017 15:32:59 +0200 (CEST) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com E62638FCE2 Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com E62638FCE2 From: Jiri Denemark To: libvir-list@redhat.com Date: Thu, 13 Apr 2017 15:32:53 +0200 Message-Id: <63d00903f83d07e5a08aed4f08b1fb85addc0a23.1492090347.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.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 4/9] qemu: Move qemuCaps host CPU data in a struct 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.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Thu, 13 Apr 2017 13:34:01 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" We need to store several CPU related data structure for both KVM and TCG. So instead of keeping two different copies of everything let's make a virQEMUCapsHostCPUData struct and use it twice. Signed-off-by: Jiri Denemark --- src/qemu/qemu_capabilities.c | 166 +++++++++++++++++++++------------------= ---- 1 file changed, 81 insertions(+), 85 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 6f0d6287e..f914154be 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -373,6 +373,19 @@ struct virQEMUCapsMachineType { unsigned int maxCpus; bool hotplugCpus; }; + +typedef struct _virQEMUCapsHostCPUData virQEMUCapsHostCPUData; +typedef virQEMUCapsHostCPUData *virQEMUCapsHostCPUDataPtr; +struct _virQEMUCapsHostCPUData { + /* Only the "info" part is stored in the capabilities cache, the rest = is + * re-computed from other fields and external data sources everytime we + * probe QEMU or load the cache. + */ + qemuMonitorCPUModelInfoPtr info; + /* Host CPU definition reported in domain capabilities. */ + virCPUDefPtr reported; +}; + /* * Update the XML parser/formatter when adding more * information to this struct so that it gets cached @@ -407,15 +420,8 @@ struct _virQEMUCaps { size_t ngicCapabilities; virGICCapability *gicCapabilities; =20 - qemuMonitorCPUModelInfoPtr kvmCPUModelInfo; - qemuMonitorCPUModelInfoPtr tcgCPUModelInfo; - - /* Anything below is not stored in the cache since the values are - * re-computed from the other fields or external data sources every - * time we probe QEMU or load the results from the cache. - */ - virCPUDefPtr kvmCPUModel; - virCPUDefPtr tcgCPUModel; + virQEMUCapsHostCPUData kvmCPU; + virQEMUCapsHostCPUData tcgCPU; }; =20 struct virQEMUCapsSearchData { @@ -2119,23 +2125,15 @@ virQEMUCapsNew(void) =20 =20 static int -virQEMUCapsHostCPUDataCopy(virQEMUCapsPtr dst, - virQEMUCapsPtr src) +virQEMUCapsHostCPUDataCopy(virQEMUCapsHostCPUDataPtr dst, + virQEMUCapsHostCPUDataPtr src) { - if (src->kvmCPUModel && - !(dst->kvmCPUModel =3D virCPUDefCopy(src->kvmCPUModel))) + if (src->info && + !(dst->info =3D qemuMonitorCPUModelInfoCopy(src->info))) return -1; =20 - if (src->tcgCPUModel && - !(dst->tcgCPUModel =3D virCPUDefCopy(src->tcgCPUModel))) - return -1; - - if (src->kvmCPUModelInfo && - !(dst->kvmCPUModelInfo =3D qemuMonitorCPUModelInfoCopy(src->kvmCPU= ModelInfo))) - return -1; - - if (src->tcgCPUModelInfo && - !(dst->tcgCPUModelInfo =3D qemuMonitorCPUModelInfoCopy(src->tcgCPU= ModelInfo))) + if (src->reported && + !(dst->reported =3D virCPUDefCopy(src->reported))) return -1; =20 return 0; @@ -2143,17 +2141,12 @@ virQEMUCapsHostCPUDataCopy(virQEMUCapsPtr dst, =20 =20 static void -virQEMUCapsHostCPUDataClear(virQEMUCapsPtr qemuCaps) +virQEMUCapsHostCPUDataClear(virQEMUCapsHostCPUDataPtr cpuData) { - qemuMonitorCPUModelInfoFree(qemuCaps->kvmCPUModelInfo); - qemuMonitorCPUModelInfoFree(qemuCaps->tcgCPUModelInfo); - qemuCaps->kvmCPUModelInfo =3D NULL; - qemuCaps->tcgCPUModelInfo =3D NULL; + qemuMonitorCPUModelInfoFree(cpuData->info); + virCPUDefFree(cpuData->reported); =20 - virCPUDefFree(qemuCaps->kvmCPUModel); - virCPUDefFree(qemuCaps->tcgCPUModel); - qemuCaps->kvmCPUModel =3D NULL; - qemuCaps->tcgCPUModel =3D NULL; + memset(cpuData, '\0', sizeof(*cpuData)); } =20 =20 @@ -2194,7 +2187,8 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemu= Caps) goto error; } =20 - if (virQEMUCapsHostCPUDataCopy(ret, qemuCaps) < 0) + if (virQEMUCapsHostCPUDataCopy(&ret->kvmCPU, &qemuCaps->kvmCPU) < 0 || + virQEMUCapsHostCPUDataCopy(&ret->tcgCPU, &qemuCaps->tcgCPU) < 0) goto error; =20 if (VIR_ALLOC_N(ret->machineTypes, qemuCaps->nmachineTypes) < 0) @@ -2243,7 +2237,8 @@ void virQEMUCapsDispose(void *obj) =20 VIR_FREE(qemuCaps->gicCapabilities); =20 - virQEMUCapsHostCPUDataClear(qemuCaps); + virQEMUCapsHostCPUDataClear(&qemuCaps->kvmCPU); + virQEMUCapsHostCPUDataClear(&qemuCaps->tcgCPU); } =20 void @@ -2467,14 +2462,24 @@ virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCap= s, } =20 =20 +static virQEMUCapsHostCPUDataPtr +virQEMUCapsGetHostCPUData(virQEMUCapsPtr qemuCaps, + virDomainVirtType type) +{ + if (type =3D=3D VIR_DOMAIN_VIRT_KVM) + return &qemuCaps->kvmCPU; + else + return &qemuCaps->tcgCPU; +} + + virCPUDefPtr virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps, virDomainVirtType type) { - if (type =3D=3D VIR_DOMAIN_VIRT_KVM) - return qemuCaps->kvmCPUModel; - else - return qemuCaps->tcgCPUModel; + virQEMUCapsHostCPUDataPtr cpuData =3D virQEMUCapsGetHostCPUData(qemuCa= ps, type); + + return cpuData->reported; } =20 =20 @@ -2483,10 +2488,9 @@ virQEMUCapsSetHostModel(virQEMUCapsPtr qemuCaps, virDomainVirtType type, virCPUDefPtr cpu) { - if (type =3D=3D VIR_DOMAIN_VIRT_KVM) - qemuCaps->kvmCPUModel =3D cpu; - else - qemuCaps->tcgCPUModel =3D cpu; + virQEMUCapsHostCPUDataPtr cpuData =3D virQEMUCapsGetHostCPUData(qemuCa= ps, type); + + cpuData->reported =3D cpu; } =20 =20 @@ -2882,24 +2886,28 @@ virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps, qemuMonitorPtr mon, bool tcg) { - qemuMonitorCPUModelInfoPtr *modelInfo; + qemuMonitorCPUModelInfoPtr modelInfo =3D NULL; qemuMonitorCPUModelInfoPtr nonMigratable =3D NULL; virHashTablePtr hash =3D NULL; const char *model; qemuMonitorCPUModelExpansionType type; + virDomainVirtType virtType; + virQEMUCapsHostCPUDataPtr cpuData; int ret =3D -1; =20 if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION)) return 0; =20 if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) { - modelInfo =3D &qemuCaps->tcgCPUModelInfo; + virtType =3D VIR_DOMAIN_VIRT_QEMU; model =3D "max"; } else { - modelInfo =3D &qemuCaps->kvmCPUModelInfo; + virtType =3D VIR_DOMAIN_VIRT_KVM; model =3D "host"; } =20 + cpuData =3D virQEMUCapsGetHostCPUData(qemuCaps, virtType); + /* Some x86_64 features defined in cpu_map.xml use spelling which diff= er * from the one preferred by QEMU. Static expansion would give us only= the * preferred spelling, thus we need to do a full expansion on the resu= lt of @@ -2910,14 +2918,14 @@ virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps, else type =3D QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC; =20 - if (qemuMonitorGetCPUModelExpansion(mon, type, model, true, modelInfo)= < 0) - return -1; + if (qemuMonitorGetCPUModelExpansion(mon, type, model, true, &modelInfo= ) < 0) + goto cleanup; =20 /* Try to check migratability of each feature. */ - if (*modelInfo && + if (modelInfo && qemuMonitorGetCPUModelExpansion(mon, type, model, false, &nonMigratable) < 0) - goto error; + goto cleanup; =20 if (nonMigratable) { qemuMonitorCPUPropertyPtr prop; @@ -2925,12 +2933,12 @@ virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps, size_t i; =20 if (!(hash =3D virHashCreate(0, NULL))) - goto error; + goto cleanup; =20 - for (i =3D 0; i < (*modelInfo)->nprops; i++) { - prop =3D (*modelInfo)->props + i; + for (i =3D 0; i < modelInfo->nprops; i++) { + prop =3D modelInfo->props + i; if (virHashAddEntry(hash, prop->name, prop) < 0) - goto error; + goto cleanup; } =20 for (i =3D 0; i < nonMigratable->nprops; i++) { @@ -2948,21 +2956,18 @@ virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps, } } =20 - (*modelInfo)->migratability =3D true; + modelInfo->migratability =3D true; } =20 + VIR_STEAL_PTR(cpuData->info, modelInfo); ret =3D 0; =20 cleanup: virHashFree(hash); qemuMonitorCPUModelInfoFree(nonMigratable); + qemuMonitorCPUModelInfoFree(modelInfo); =20 return ret; - - error: - qemuMonitorCPUModelInfoFree(*modelInfo); - *modelInfo =3D NULL; - goto cleanup; } =20 struct tpmTypeToCaps { @@ -3315,21 +3320,19 @@ virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, virCPUDefPtr cpu, bool migratable) { - qemuMonitorCPUModelInfoPtr model; + virQEMUCapsHostCPUDataPtr cpuData =3D virQEMUCapsGetHostCPUData(qemuCa= ps, type); int ret =3D 1; =20 - if (type =3D=3D VIR_DOMAIN_VIRT_KVM) - model =3D qemuCaps->kvmCPUModelInfo; - else - model =3D qemuCaps->tcgCPUModelInfo; - - if (migratable && model && !model->migratability) + if (migratable && cpuData->info && !cpuData->info->migratability) return 1; =20 - if (ARCH_IS_S390(qemuCaps->arch)) - ret =3D virQEMUCapsInitCPUModelS390(qemuCaps, model, cpu, migratab= le); - else if (ARCH_IS_X86(qemuCaps->arch)) - ret =3D virQEMUCapsInitCPUModelX86(qemuCaps, type, model, cpu, mig= ratable); + if (ARCH_IS_S390(qemuCaps->arch)) { + ret =3D virQEMUCapsInitCPUModelS390(qemuCaps, cpuData->info, + cpu, migratable); + } else if (ARCH_IS_X86(qemuCaps->arch)) { + ret =3D virQEMUCapsInitCPUModelX86(qemuCaps, type, cpuData->info, + cpu, migratable); + } =20 if (ret =3D=3D 0) cpu->fallback =3D VIR_CPU_FALLBACK_FORBID; @@ -3389,10 +3392,9 @@ virQEMUCapsSetCPUModelInfo(virQEMUCapsPtr qemuCaps, virDomainVirtType type, qemuMonitorCPUModelInfoPtr modelInfo) { - if (type =3D=3D VIR_DOMAIN_VIRT_KVM) - qemuCaps->kvmCPUModelInfo =3D modelInfo; - else - qemuCaps->tcgCPUModelInfo =3D modelInfo; + virQEMUCapsHostCPUDataPtr cpuData =3D virQEMUCapsGetHostCPUData(qemuCa= ps, type); + + cpuData->info =3D modelInfo; } =20 =20 @@ -3851,18 +3853,11 @@ virQEMUCapsFormatHostCPUModelInfo(virQEMUCapsPtr qe= muCaps, virBufferPtr buf, virDomainVirtType type) { - qemuMonitorCPUModelInfoPtr model; - const char *typeStr; + virQEMUCapsHostCPUDataPtr cpuData =3D virQEMUCapsGetHostCPUData(qemuCa= ps, type); + qemuMonitorCPUModelInfoPtr model =3D cpuData->info; + const char *typeStr =3D type =3D=3D VIR_DOMAIN_VIRT_KVM ? "kvm" : "tcg= "; size_t i; =20 - if (type =3D=3D VIR_DOMAIN_VIRT_KVM) { - typeStr =3D "kvm"; - model =3D qemuCaps->kvmCPUModelInfo; - } else { - typeStr =3D "tcg"; - model =3D qemuCaps->tcgCPUModelInfo; - } - if (!model) return; =20 @@ -4121,7 +4116,8 @@ virQEMUCapsReset(virQEMUCapsPtr qemuCaps) VIR_FREE(qemuCaps->gicCapabilities); qemuCaps->ngicCapabilities =3D 0; =20 - virQEMUCapsHostCPUDataClear(qemuCaps); + virQEMUCapsHostCPUDataClear(&qemuCaps->kvmCPU); + virQEMUCapsHostCPUDataClear(&qemuCaps->tcgCPU); } =20 =20 --=20 2.12.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 00:21:00 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.zoho.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 1492090442267179.14657307844595; Thu, 13 Apr 2017 06:34:02 -0700 (PDT) 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 mx1.redhat.com (Postfix) with ESMTPS id 412437AEB6; Thu, 13 Apr 2017 13:34:00 +0000 (UTC) Received: from colo-mx.corp.redhat.com (unknown [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E13E360BE5; Thu, 13 Apr 2017 13:33:59 +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 9F0EE4ED27; Thu, 13 Apr 2017 13:33:09 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v3DDX6q9013093 for ; Thu, 13 Apr 2017 09:33:06 -0400 Received: by smtp.corp.redhat.com (Postfix) id 8C4D778355; Thu, 13 Apr 2017 13:33:06 +0000 (UTC) Received: from virval.usersys.redhat.com (dhcp129-92.brq.redhat.com [10.34.129.92]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 203037820E for ; Thu, 13 Apr 2017 13:33:04 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id BA1961041AB; Thu, 13 Apr 2017 15:32:59 +0200 (CEST) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 412437AEB6 Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 412437AEB6 From: Jiri Denemark To: libvir-list@redhat.com Date: Thu, 13 Apr 2017 15:32:54 +0200 Message-Id: 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.13 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 5/9] qemu: Prepare qemuCaps for multiple host CPU defs 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.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Thu, 13 Apr 2017 13:34:01 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Soon we will need to store multiple host CPU definitions in virQEMUCapsHostCPUData and qemuCaps users will want to request the one they need. This patch introduces virQEMUCapsHostCPUType enum which will be used for specifying the requested CPU definition. Signed-off-by: Jiri Denemark --- src/qemu/qemu_capabilities.c | 16 ++++++++++++---- src/qemu/qemu_capabilities.h | 10 +++++++++- src/qemu/qemu_command.c | 3 ++- src/qemu/qemu_process.c | 6 ++++-- 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index f914154be..3bfc79c09 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2475,11 +2475,17 @@ virQEMUCapsGetHostCPUData(virQEMUCapsPtr qemuCaps, =20 virCPUDefPtr virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps, - virDomainVirtType type) + virDomainVirtType type, + virQEMUCapsHostCPUType cpuType) { virQEMUCapsHostCPUDataPtr cpuData =3D virQEMUCapsGetHostCPUData(qemuCa= ps, type); =20 - return cpuData->reported; + switch (cpuType) { + case VIR_QEMU_CAPS_HOST_CPU_REPORTED: + return cpuData->reported; + } + + return NULL; } =20 =20 @@ -2508,7 +2514,8 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch); =20 case VIR_CPU_MODE_HOST_MODEL: - return !!virQEMUCapsGetHostModel(qemuCaps, type); + return !!virQEMUCapsGetHostModel(qemuCaps, type, + VIR_QEMU_CAPS_HOST_CPU_REPORTED); =20 case VIR_CPU_MODE_CUSTOM: if (type =3D=3D VIR_DOMAIN_VIRT_KVM) @@ -5521,7 +5528,8 @@ virQEMUCapsFillDomainCPUCaps(virCapsPtr caps, =20 if (virQEMUCapsIsCPUModeSupported(qemuCaps, caps, domCaps->virttype, VIR_CPU_MODE_HOST_MODEL)) { - virCPUDefPtr cpu =3D virQEMUCapsGetHostModel(qemuCaps, domCaps->vi= rttype); + virCPUDefPtr cpu =3D virQEMUCapsGetHostModel(qemuCaps, domCaps->vi= rttype, + VIR_QEMU_CAPS_HOST_CPU_= REPORTED); domCaps->cpu.hostModel =3D virCPUDefCopy(cpu); } =20 diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index cca9a12b5..bd147c009 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -449,8 +449,16 @@ int virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCa= ps, virDomainVirtType type, char ***names, size_t *count); + +typedef enum { + /* Host CPU definition reported in domain capabilities. */ + VIR_QEMU_CAPS_HOST_CPU_REPORTED, +} virQEMUCapsHostCPUType; + virCPUDefPtr virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps, - virDomainVirtType type); + virDomainVirtType type, + virQEMUCapsHostCPUType cpuType); + bool virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, virCapsPtr caps, virDomainVirtType type, diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 57654246c..7e5cb3209 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6899,7 +6899,8 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, if (def->cpu->mode =3D=3D VIR_CPU_MODE_CUSTOM) cpuDef =3D def->cpu; else if (def->cpu->mode =3D=3D VIR_CPU_MODE_HOST_PASSTHROUGH) - cpuDef =3D virQEMUCapsGetHostModel(qemuCaps, def->virtType= ); + cpuDef =3D virQEMUCapsGetHostModel(qemuCaps, def->virtType, + VIR_QEMU_CAPS_HOST_CPU_RE= PORTED); =20 if (cpuDef) { int svm =3D virCPUCheckFeature(def->os.arch, cpuDef, "svm"= ); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 5e119a237..c05cd9e7a 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5304,12 +5304,14 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def, =20 if (def->cpu->check =3D=3D VIR_CPU_CHECK_PARTIAL && virCPUCompare(caps->host.arch, - virQEMUCapsGetHostModel(qemuCaps, def->virtType), + virQEMUCapsGetHostModel(qemuCaps, def->virtType, + VIR_QEMU_CAPS_HOST_CPU_REPOR= TED), def->cpu, true) < 0) return -1; =20 if (virCPUUpdate(def->os.arch, def->cpu, - virQEMUCapsGetHostModel(qemuCaps, def->virtType)) < 0) + virQEMUCapsGetHostModel(qemuCaps, def->virtType, + VIR_QEMU_CAPS_HOST_CPU_REPORT= ED)) < 0) goto cleanup; =20 if (virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType, --=20 2.12.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 00:21:00 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.zoho.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 1492090442399445.4086988588672; Thu, 13 Apr 2017 06:34:02 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D2EB38FCE0; Thu, 13 Apr 2017 13:34:00 +0000 (UTC) Received: from colo-mx.corp.redhat.com (unknown [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A36677C75B; Thu, 13 Apr 2017 13:34:00 +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 D577B5EC6A; Thu, 13 Apr 2017 13:33:10 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v3DDX6Zq013094 for ; Thu, 13 Apr 2017 09:33:06 -0400 Received: by smtp.corp.redhat.com (Postfix) id 8C5E67835F; Thu, 13 Apr 2017 13:33:06 +0000 (UTC) Received: from virval.usersys.redhat.com (dhcp129-92.brq.redhat.com [10.34.129.92]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2035A7820F for ; Thu, 13 Apr 2017 13:33:04 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id BC2B91041AC; Thu, 13 Apr 2017 15:32:59 +0200 (CEST) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com D2EB38FCE0 Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com D2EB38FCE0 From: Jiri Denemark To: libvir-list@redhat.com Date: Thu, 13 Apr 2017 15:32:55 +0200 Message-Id: <35ca678f0691b534dd5f26a4105c9e54dc7d4fbb.1492090347.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.13 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 6/9] qemu: Pass migratable host CPU model to virCPUUpdate 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.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Thu, 13 Apr 2017 13:34:01 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" We already know from QEMU which CPU features will block migration. Let's use this information to make a migratable copy of the host CPU model and use it for updating guest CPU specification. This will allow us to drop feature filtering from virCPUUpdate where it was just a hack. Signed-off-by: Jiri Denemark --- src/qemu/qemu_capabilities.c | 57 +++++++++++++++++++++++++++++++++++++---= ---- src/qemu/qemu_capabilities.h | 2 ++ src/qemu/qemu_process.c | 2 +- tests/cputest.c | 7 +++++- 4 files changed, 57 insertions(+), 11 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 3bfc79c09..1d95e67b3 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -384,6 +384,8 @@ struct _virQEMUCapsHostCPUData { qemuMonitorCPUModelInfoPtr info; /* Host CPU definition reported in domain capabilities. */ virCPUDefPtr reported; + /* Migratable host CPU definition used for updating guest CPU. */ + virCPUDefPtr migratable; }; =20 /* @@ -2136,6 +2138,10 @@ virQEMUCapsHostCPUDataCopy(virQEMUCapsHostCPUDataPtr= dst, !(dst->reported =3D virCPUDefCopy(src->reported))) return -1; =20 + if (src->migratable && + !(dst->migratable =3D virCPUDefCopy(src->migratable))) + return -1; + return 0; } =20 @@ -2145,6 +2151,7 @@ virQEMUCapsHostCPUDataClear(virQEMUCapsHostCPUDataPtr= cpuData) { qemuMonitorCPUModelInfoFree(cpuData->info); virCPUDefFree(cpuData->reported); + virCPUDefFree(cpuData->migratable); =20 memset(cpuData, '\0', sizeof(*cpuData)); } @@ -2483,6 +2490,9 @@ virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps, switch (cpuType) { case VIR_QEMU_CAPS_HOST_CPU_REPORTED: return cpuData->reported; + + case VIR_QEMU_CAPS_HOST_CPU_MIGRATABLE: + return cpuData->migratable; } =20 return NULL; @@ -2492,11 +2502,13 @@ virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps, static void virQEMUCapsSetHostModel(virQEMUCapsPtr qemuCaps, virDomainVirtType type, - virCPUDefPtr cpu) + virCPUDefPtr reported, + virCPUDefPtr migratable) { virQEMUCapsHostCPUDataPtr cpuData =3D virQEMUCapsGetHostCPUData(qemuCa= ps, type); =20 - cpuData->reported =3D cpu; + cpuData->reported =3D reported; + cpuData->migratable =3D migratable; } =20 =20 @@ -3348,26 +3360,39 @@ virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, } =20 =20 +static virCPUDefPtr +virQEMUCapsNewHostCPUModel(void) +{ + virCPUDefPtr cpu; + + if (VIR_ALLOC(cpu) < 0) + return NULL; + + cpu->type =3D VIR_CPU_TYPE_GUEST; + cpu->mode =3D VIR_CPU_MODE_CUSTOM; + cpu->match =3D VIR_CPU_MATCH_EXACT; + cpu->fallback =3D VIR_CPU_FALLBACK_ALLOW; + + return cpu; +} + + void virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, virCapsPtr caps, virDomainVirtType type) { virCPUDefPtr cpu =3D NULL; + virCPUDefPtr migCPU =3D NULL; virCPUDefPtr hostCPU =3D NULL; int rc; =20 if (!caps || !virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch= )) return; =20 - if (VIR_ALLOC(cpu) < 0) + if (!(cpu =3D virQEMUCapsNewHostCPUModel())) goto error; =20 - cpu->type =3D VIR_CPU_TYPE_GUEST; - cpu->mode =3D VIR_CPU_MODE_CUSTOM; - cpu->match =3D VIR_CPU_MATCH_EXACT; - cpu->fallback =3D VIR_CPU_FALLBACK_ALLOW; - if ((rc =3D virQEMUCapsInitCPUModel(qemuCaps, type, cpu, false)) < 0) { goto error; } else if (rc =3D=3D 1) { @@ -3381,7 +3406,20 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, goto error; } =20 - virQEMUCapsSetHostModel(qemuCaps, type, cpu); + if (!(migCPU =3D virQEMUCapsNewHostCPUModel())) + goto error; + + if ((rc =3D virQEMUCapsInitCPUModel(qemuCaps, type, migCPU, true)) < 0= ) { + goto error; + } else if (rc =3D=3D 1) { + VIR_DEBUG("CPU migratability not provided by QEMU"); + + virCPUDefFree(migCPU); + if (!(migCPU =3D virCPUCopyMigratable(qemuCaps->arch, cpu))) + goto error; + } + + virQEMUCapsSetHostModel(qemuCaps, type, cpu, migCPU); =20 cleanup: virCPUDefFree(hostCPU); @@ -3389,6 +3427,7 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, =20 error: virCPUDefFree(cpu); + virCPUDefFree(migCPU); virResetLastError(); goto cleanup; } diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index bd147c009..f04f74060 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -453,6 +453,8 @@ int virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCap= s, typedef enum { /* Host CPU definition reported in domain capabilities. */ VIR_QEMU_CAPS_HOST_CPU_REPORTED, + /* Migratable host CPU definition used for updating guest CPU. */ + VIR_QEMU_CAPS_HOST_CPU_MIGRATABLE, } virQEMUCapsHostCPUType; =20 virCPUDefPtr virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps, diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index c05cd9e7a..6b77a3969 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5311,7 +5311,7 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def, =20 if (virCPUUpdate(def->os.arch, def->cpu, virQEMUCapsGetHostModel(qemuCaps, def->virtType, - VIR_QEMU_CAPS_HOST_CPU_REPORT= ED)) < 0) + VIR_QEMU_CAPS_HOST_CPU_MIGRAT= ABLE)) < 0) goto cleanup; =20 if (virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType, diff --git a/tests/cputest.c b/tests/cputest.c index 528030754..d5e023c40 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -393,6 +393,7 @@ cpuTestUpdate(const void *arg) const struct data *data =3D arg; int ret =3D -1; virCPUDefPtr host =3D NULL; + virCPUDefPtr migHost =3D NULL; virCPUDefPtr cpu =3D NULL; char *result =3D NULL; =20 @@ -400,7 +401,10 @@ cpuTestUpdate(const void *arg) !(cpu =3D cpuTestLoadXML(data->arch, data->name))) goto cleanup; =20 - if (virCPUUpdate(host->arch, cpu, host) < 0) + if (!(migHost =3D virCPUCopyMigratable(data->arch, host))) + goto cleanup; + + if (virCPUUpdate(host->arch, cpu, migHost) < 0) goto cleanup; =20 if (virAsprintf(&result, "%s+%s", data->host, data->name) < 0) @@ -411,6 +415,7 @@ cpuTestUpdate(const void *arg) cleanup: virCPUDefFree(host); virCPUDefFree(cpu); + virCPUDefFree(migHost); VIR_FREE(result); return ret; } --=20 2.12.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 00:21:00 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.zoho.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 1492090450611526.2668602255411; Thu, 13 Apr 2017 06:34:10 -0700 (PDT) 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 mx1.redhat.com (Postfix) with ESMTPS id 2005937B2CB; Thu, 13 Apr 2017 13:34:09 +0000 (UTC) Received: from colo-mx.corp.redhat.com (unknown [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id AD89A78215; Thu, 13 Apr 2017 13:34:08 +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 131D9B3487; Thu, 13 Apr 2017 13:33:15 +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 v3DDXB1P013141 for ; Thu, 13 Apr 2017 09:33:11 -0400 Received: by smtp.corp.redhat.com (Postfix) id 1E9997A43E; Thu, 13 Apr 2017 13:33:11 +0000 (UTC) Received: from virval.usersys.redhat.com (dhcp129-92.brq.redhat.com [10.34.129.92]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E6AF87A437 for ; Thu, 13 Apr 2017 13:33:04 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id BE6141041AD; Thu, 13 Apr 2017 15:32:59 +0200 (CEST) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 2005937B2CB Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 2005937B2CB From: Jiri Denemark To: libvir-list@redhat.com Date: Thu, 13 Apr 2017 15:32:56 +0200 Message-Id: <23c587a36941344100f492f47a599100518d322d.1492090347.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 7/9] cpu: Drop feature filtering from virCPUUpdate 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.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Thu, 13 Apr 2017 13:34:09 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Because of the changes done in the previous commit, @host is already a migratable CPU and there's no need to do any additional filtering. Signed-off-by: Jiri Denemark --- src/cpu/cpu_x86.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index a771b251e..53359ff9b 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -2549,8 +2549,7 @@ x86Baseline(virCPUDefPtr *cpus, =20 static int x86UpdateHostModel(virCPUDefPtr guest, - const virCPUDef *host, - virCPUx86MapPtr map) + const virCPUDef *host) { virCPUDefPtr updated =3D NULL; size_t i; @@ -2559,11 +2558,9 @@ x86UpdateHostModel(virCPUDefPtr guest, if (!(updated =3D virCPUDefCopyWithoutModel(host))) goto cleanup; =20 - /* Remove non-migratable features by default */ updated->type =3D VIR_CPU_TYPE_GUEST; updated->mode =3D VIR_CPU_MODE_CUSTOM; - if (virCPUDefCopyModelFilter(updated, host, true, - x86FeatureIsMigratable, map) < 0) + if (virCPUDefCopyModel(updated, host, true) < 0) goto cleanup; =20 if (guest->vendor_id) { @@ -2627,7 +2624,7 @@ virCPUx86Update(virCPUDefPtr guest, =20 if (guest->mode =3D=3D VIR_CPU_MODE_HOST_MODEL || guest->match =3D=3D VIR_CPU_MATCH_MINIMUM) - ret =3D x86UpdateHostModel(guest, host, map); + ret =3D x86UpdateHostModel(guest, host); else ret =3D 0; =20 --=20 2.12.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 00:21:00 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.zoho.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 1492090449689828.6086214430658; Thu, 13 Apr 2017 06:34:09 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 134523DB; Thu, 13 Apr 2017 13:34:08 +0000 (UTC) Received: from colo-mx.corp.redhat.com (unknown [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id DBCDE9FDF7; Thu, 13 Apr 2017 13:34:07 +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 76743B3483; Thu, 13 Apr 2017 13:33:14 +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 v3DDXB2k013140 for ; Thu, 13 Apr 2017 09:33:11 -0400 Received: by smtp.corp.redhat.com (Postfix) id 1E3587A43D; Thu, 13 Apr 2017 13:33:11 +0000 (UTC) Received: from virval.usersys.redhat.com (dhcp129-92.brq.redhat.com [10.34.129.92]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E5D3D7A436 for ; Thu, 13 Apr 2017 13:33:04 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id C08C71041AE; Thu, 13 Apr 2017 15:32:59 +0200 (CEST) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 134523DB Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 134523DB From: Jiri Denemark To: libvir-list@redhat.com Date: Thu, 13 Apr 2017 15:32:57 +0200 Message-Id: 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 8/9] cpu: Introduce virCPUGetHostIsSupported 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.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Thu, 13 Apr 2017 13:34:08 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Sometimes we want to call virCPUGetHost only when it is implemented for a given architecture to avoid logging expected and possibly misleading errors. The new virCPUGetHostIsSupported API may be used to guard such calls to virCPUGetHost. Signed-off-by: Jiri Denemark --- src/cpu/cpu.c | 20 ++++++++++++++++++++ src/cpu/cpu.h | 3 +++ src/libvirt_private.syms | 1 + 3 files changed, 24 insertions(+) diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c index 8a407ac18..702b14dbb 100644 --- a/src/cpu/cpu.c +++ b/src/cpu/cpu.c @@ -358,6 +358,26 @@ virCPUDataFree(virCPUDataPtr data) =20 =20 /** + * virCPUGetHostIsSupported: + * + * @arch: CPU architecture + * + * Check whether virCPUGetHost is supported for @arch. + * + * Returns true if virCPUGetHost is supported, false otherwise. + */ +bool +virCPUGetHostIsSupported(virArch arch) +{ + struct cpuArchDriver *driver; + + VIR_DEBUG("arch=3D%s", virArchToString(arch)); + + return (driver =3D cpuGetSubDriver(arch)) && driver->getHost; +} + + +/** * virCPUGetHost: * * @arch: CPU architecture diff --git a/src/cpu/cpu.h b/src/cpu/cpu.h index 352445c40..c6ca111e9 100644 --- a/src/cpu/cpu.h +++ b/src/cpu/cpu.h @@ -183,6 +183,9 @@ virCPUDataNew(virArch arch); void virCPUDataFree(virCPUDataPtr data); =20 +bool +virCPUGetHostIsSupported(virArch arch); + virCPUDefPtr virCPUGetHost(virArch arch, virCPUType type, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 8509f639e..d2b7b5cd1 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1033,6 +1033,7 @@ virCPUDataNew; virCPUDataParse; virCPUExpandFeatures; virCPUGetHost; +virCPUGetHostIsSupported; virCPUGetModels; virCPUProbeHost; virCPUTranslate; --=20 2.12.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 00:21:00 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.zoho.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 149209044681851.39959781650771; Thu, 13 Apr 2017 06:34:06 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4DBF4624BE; Thu, 13 Apr 2017 13:34:05 +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 195847C74B; Thu, 13 Apr 2017 13:34: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 BCDA51853D1E; Thu, 13 Apr 2017 13:33:18 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v3DDXHSq013184 for ; Thu, 13 Apr 2017 09:33:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id 69D647FB9E; Thu, 13 Apr 2017 13:33:17 +0000 (UTC) Received: from virval.usersys.redhat.com (dhcp129-92.brq.redhat.com [10.34.129.92]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1A0497FB90 for ; Thu, 13 Apr 2017 13:33:05 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id C2B701041AF; Thu, 13 Apr 2017 15:32:59 +0200 (CEST) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 4DBF4624BE Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 4DBF4624BE From: Jiri Denemark To: libvir-list@redhat.com Date: Thu, 13 Apr 2017 15:32:58 +0200 Message-Id: <85ee43ef980f5b3dc7df336a2b4ac6f45e78152f.1492090347.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.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 9/9] qemu: Use more data for comparing CPUs 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.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Thu, 13 Apr 2017 13:34:06 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" With QEMU older than 2.9.0 libvirt uses CPUID instruction to determine what CPU features are supported on the host. This was later used when checking compatibility of guest CPUs. Since QEMU 2.9.0 we ask QEMU for the host CPU data. But the two methods we use usually provide disjoint sets of CPU features because QEMU/KVM does not support all features provided by the host CPU and on the other hand it can enable some feature even if the host CPU does not support them. So if there is a domain which requires a CPU features disabled by QEMU/KVM, libvirt will refuse to start it with QEMU > 2.9.0 as its guest CPU is incompatible with the host CPU data we got from QEMU. But such domain would happily start on older QEMU (of course, the features would be missing the guest CPU). To fix this regression, we need to combine both CPU feature sets when checking guest CPU compatibility. https://bugzilla.redhat.com/show_bug.cgi?id=3D1439933 Signed-off-by: Jiri Denemark --- src/qemu/qemu_capabilities.c | 35 +++++++++++++++++++++++++++++++++-- src/qemu/qemu_capabilities.h | 4 ++++ src/qemu/qemu_process.c | 2 +- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 1d95e67b3..531677865 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -386,6 +386,10 @@ struct _virQEMUCapsHostCPUData { virCPUDefPtr reported; /* Migratable host CPU definition used for updating guest CPU. */ virCPUDefPtr migratable; + /* CPU definition with features detected by libvirt using virCPUGetHost + * combined with features reported by QEMU. This is used for backward + * compatible comparison between a guest CPU and a host CPU. */ + virCPUDefPtr full; }; =20 /* @@ -2142,6 +2146,10 @@ virQEMUCapsHostCPUDataCopy(virQEMUCapsHostCPUDataPtr= dst, !(dst->migratable =3D virCPUDefCopy(src->migratable))) return -1; =20 + if (src->full && + !(dst->full =3D virCPUDefCopy(src->full))) + return -1; + return 0; } =20 @@ -2152,6 +2160,7 @@ virQEMUCapsHostCPUDataClear(virQEMUCapsHostCPUDataPtr= cpuData) qemuMonitorCPUModelInfoFree(cpuData->info); virCPUDefFree(cpuData->reported); virCPUDefFree(cpuData->migratable); + virCPUDefFree(cpuData->full); =20 memset(cpuData, '\0', sizeof(*cpuData)); } @@ -2493,6 +2502,11 @@ virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps, =20 case VIR_QEMU_CAPS_HOST_CPU_MIGRATABLE: return cpuData->migratable; + + case VIR_QEMU_CAPS_HOST_CPU_FULL: + /* 'full' is non-NULL only if we have data from both QEMU and + * virCPUGetHost */ + return cpuData->full ? cpuData->full : cpuData->reported; } =20 return NULL; @@ -2503,12 +2517,14 @@ static void virQEMUCapsSetHostModel(virQEMUCapsPtr qemuCaps, virDomainVirtType type, virCPUDefPtr reported, - virCPUDefPtr migratable) + virCPUDefPtr migratable, + virCPUDefPtr full) { virQEMUCapsHostCPUDataPtr cpuData =3D virQEMUCapsGetHostCPUData(qemuCa= ps, type); =20 cpuData->reported =3D reported; cpuData->migratable =3D migratable; + cpuData->full =3D full; } =20 =20 @@ -3385,6 +3401,8 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, virCPUDefPtr cpu =3D NULL; virCPUDefPtr migCPU =3D NULL; virCPUDefPtr hostCPU =3D NULL; + virCPUDefPtr fullCPU =3D NULL; + size_t i; int rc; =20 if (!caps || !virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch= )) @@ -3404,6 +3422,18 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, virQEMUCapsCPUFilterFeatures, qemuCaps) < 0) goto error; + } else if (type =3D=3D VIR_DOMAIN_VIRT_KVM && + virCPUGetHostIsSupported(qemuCaps->arch)) { + if (!(fullCPU =3D virCPUGetHost(qemuCaps->arch, VIR_CPU_TYPE_GUEST, + NULL, NULL, 0))) + goto error; + + for (i =3D 0; i < cpu->nfeatures; i++) { + if (cpu->features[i].policy =3D=3D VIR_CPU_FEATURE_REQUIRE && + virCPUDefUpdateFeature(fullCPU, cpu->features[i].name, + VIR_CPU_FEATURE_REQUIRE) < 0) + goto error; + } } =20 if (!(migCPU =3D virQEMUCapsNewHostCPUModel())) @@ -3419,7 +3449,7 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, goto error; } =20 - virQEMUCapsSetHostModel(qemuCaps, type, cpu, migCPU); + virQEMUCapsSetHostModel(qemuCaps, type, cpu, migCPU, fullCPU); =20 cleanup: virCPUDefFree(hostCPU); @@ -3428,6 +3458,7 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, error: virCPUDefFree(cpu); virCPUDefFree(migCPU); + virCPUDefFree(fullCPU); virResetLastError(); goto cleanup; } diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index f04f74060..a7eec52a9 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -455,6 +455,10 @@ typedef enum { VIR_QEMU_CAPS_HOST_CPU_REPORTED, /* Migratable host CPU definition used for updating guest CPU. */ VIR_QEMU_CAPS_HOST_CPU_MIGRATABLE, + /* CPU definition with features detected by libvirt using virCPUGetHost + * combined with features reported by QEMU. This is used for backward + * compatible comparison between a guest CPU and a host CPU. */ + VIR_QEMU_CAPS_HOST_CPU_FULL, } virQEMUCapsHostCPUType; =20 virCPUDefPtr virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps, diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 6b77a3969..53170d732 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5305,7 +5305,7 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def, if (def->cpu->check =3D=3D VIR_CPU_CHECK_PARTIAL && virCPUCompare(caps->host.arch, virQEMUCapsGetHostModel(qemuCaps, def->virtType, - VIR_QEMU_CAPS_HOST_CPU_REPOR= TED), + VIR_QEMU_CAPS_HOST_CPU_FULL), def->cpu, true) < 0) return -1; =20 --=20 2.12.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list