From nobody Mon Feb 9 00:08:00 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 207.211.31.81 as permitted sender) client-ip=207.211.31.81; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of redhat.com designates 207.211.31.81 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1572960543; cv=none; d=zoho.com; s=zohoarc; b=H5ITOq5iykM9nylmEU1dBsvn6yLfPlFSu3Ry8hs5sJItLQAVgsNWLiRss1pd9BIotIb7ZcLf+RDuSs9aCgLztr0FSuY4yl9ldGkMEyFuOUrUPWnGJTUb5tw9fIDgmXPd41kZJ+ZJhJkJVQGPpu77JAIgA7+dMk5dC7sEp3jMAW8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572960543; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=9Ulr+yFfoHCn/qcNzD5IG6UqiuV3BRyQF9SrdCEMpok=; b=QdVtoiOoxcDsAqQhwIOFRBKM0TP2dTM/Exj9JBKV5mjmbDJFlmP0BBpcHgFgTQ50/hmpXTIyIWovFkoKo1FItpcp2h4WAbnDVlfrf+4M7d1oQ+glD+ts0YRkR4Ir9JmrPwkOJRiQ+ciMbP8LPVUebknAatQcwknG1ki35/06tns= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=pass; spf=pass (zoho.com: domain of redhat.com designates 207.211.31.81 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) by mx.zohomail.com with SMTPS id 1572960543271591.7311518220087; Tue, 5 Nov 2019 05:29:03 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-331-IZLVDlbDM5-z2xsXnGzQwA-1; Tue, 05 Nov 2019 08:28:59 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 966672F62; Tue, 5 Nov 2019 13:28:46 +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 6A5ED5EE0F; Tue, 5 Nov 2019 13:28:46 +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 2CC8F4E583; Tue, 5 Nov 2019 13:28:46 +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 xA5DS09u003995 for ; Tue, 5 Nov 2019 08:28:00 -0500 Received: by smtp.corp.redhat.com (Postfix) id B23F85D728; Tue, 5 Nov 2019 13:28:00 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.188]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 617C75D72C for ; Tue, 5 Nov 2019 13:27:59 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 9DBBA105B2F; Tue, 5 Nov 2019 14:27:52 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1572960542; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=9Ulr+yFfoHCn/qcNzD5IG6UqiuV3BRyQF9SrdCEMpok=; b=dqeWQTU5n167dty5vEUDj0PyebJSSddmtrzH4cEQNnp+aIf1OuWTtl8GQRMp/VQ+ouFqHV 1qyDfebPZyWkAE2C4ZBIj6fyfbXca8WDC9uBAamjejU5Ow+3QGVF6kJ+uERsMYH2ThdrVN UPNV7DFCSxLVmo6u2Ob07bQSEShnW7s= From: Jiri Denemark To: libvir-list@redhat.com Date: Tue, 5 Nov 2019 14:27:16 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v3 18/52] qemu: Switch qemuCaps to use qemuMonitorCPUDefs X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-MC-Unique: IZLVDlbDM5-z2xsXnGzQwA-1 X-Mimecast-Spam-Score: 0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" We will need to keep some QEMU-specific data for each CPU model supported by a QEMU binary. Instead of complicating the generic virDomainCapsCPUModelsPtr, we can just directly store qemuMonitorCPUDefsPtr returned by the capabilities probing code. Signed-off-by: Jiri Denemark Reviewed-by: J=C3=A1n Tomko --- Notes: Version 2: - adapted to changes made by the new patches =20 Version 3: - glib functions - implicit translation between virDomainCapsCPUUsable and virTristateBo= ol is gone since "qemu: Use virDomainCapsCPUUsable in qemuMonitorCPUDefInfo" patch src/qemu/qemu_capabilities.c | 108 +++++++++++++++++------------------ 1 file changed, 52 insertions(+), 56 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 431841e61e..ccb337ee2f 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -607,8 +607,8 @@ struct _virQEMUCaps { virArch arch; =20 virHashTablePtr domCapsCache; - virDomainCapsCPUModelsPtr kvmCPUModels; - virDomainCapsCPUModelsPtr tcgCPUModels; + qemuMonitorCPUDefsPtr kvmCPUModels; + qemuMonitorCPUDefsPtr tcgCPUModels; =20 size_t nmachineTypes; struct virQEMUCapsMachineType *machineTypes; @@ -1620,17 +1620,8 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qem= uCaps) =20 ret->arch =3D qemuCaps->arch; =20 - if (qemuCaps->kvmCPUModels) { - ret->kvmCPUModels =3D virDomainCapsCPUModelsCopy(qemuCaps->kvmCPUM= odels); - if (!ret->kvmCPUModels) - goto error; - } - - if (qemuCaps->tcgCPUModels) { - ret->tcgCPUModels =3D virDomainCapsCPUModelsCopy(qemuCaps->tcgCPUM= odels); - if (!ret->tcgCPUModels) - goto error; - } + ret->kvmCPUModels =3D qemuMonitorCPUDefsCopy(qemuCaps->kvmCPUModels); + ret->tcgCPUModels =3D qemuMonitorCPUDefsCopy(qemuCaps->tcgCPUModels); =20 if (virQEMUCapsHostCPUDataCopy(&ret->kvmCPU, &qemuCaps->kvmCPU) < 0 || virQEMUCapsHostCPUDataCopy(&ret->tcgCPU, &qemuCaps->tcgCPU) < 0) @@ -1855,25 +1846,36 @@ virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCap= s, virDomainCapsCPUUsable usable) { size_t i; - virDomainCapsCPUModelsPtr cpus =3D NULL; + size_t start; + qemuMonitorCPUDefsPtr defs =3D NULL; =20 if (type =3D=3D VIR_DOMAIN_VIRT_KVM && qemuCaps->kvmCPUModels) - cpus =3D qemuCaps->kvmCPUModels; + defs =3D qemuCaps->kvmCPUModels; else if (type =3D=3D VIR_DOMAIN_VIRT_QEMU && qemuCaps->tcgCPUModels) - cpus =3D qemuCaps->tcgCPUModels; + defs =3D qemuCaps->tcgCPUModels; + + if (defs) { + start =3D defs->ncpus; =20 - if (!cpus) { - if (!(cpus =3D virDomainCapsCPUModelsNew(count))) + if (VIR_EXPAND_N(defs->cpus, defs->ncpus, count) < 0) + return -1; + } else { + start =3D 0; + + if (!(defs =3D qemuMonitorCPUDefsNew(count))) return -1; =20 if (type =3D=3D VIR_DOMAIN_VIRT_KVM) - qemuCaps->kvmCPUModels =3D cpus; + qemuCaps->kvmCPUModels =3D defs; else - qemuCaps->tcgCPUModels =3D cpus; + qemuCaps->tcgCPUModels =3D defs; } =20 for (i =3D 0; i < count; i++) { - if (virDomainCapsCPUModelsAdd(cpus, name[i], usable, NULL) < 0) + qemuMonitorCPUDefInfoPtr cpu =3D defs->cpus + start + i; + + cpu->usable =3D usable; + if (VIR_STRDUP(cpu->name, name[i]) < 0) return -1; } =20 @@ -1916,20 +1918,17 @@ virQEMUCapsGetCPUModels(virQEMUCapsPtr qemuCaps, const char **modelWhitelist, const char **modelBlacklist) { - virDomainCapsCPUModelsPtr cpuModels; + qemuMonitorCPUDefsPtr defs; =20 if (type =3D=3D VIR_DOMAIN_VIRT_KVM) - cpuModels =3D qemuCaps->kvmCPUModels; + defs =3D qemuCaps->kvmCPUModels; else - cpuModels =3D qemuCaps->tcgCPUModels; + defs =3D qemuCaps->tcgCPUModels; =20 - if (!cpuModels) + if (!defs) return NULL; =20 - if (modelWhitelist || modelBlacklist) - return virDomainCapsCPUModelsFilter(cpuModels, modelWhitelist, mod= elBlacklist); - - return virDomainCapsCPUModelsCopy(cpuModels); + return virQEMUCapsCPUDefsToModels(defs, modelWhitelist, modelBlacklist= ); } =20 =20 @@ -1989,7 +1988,7 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, virDomainVirtType type, virCPUMode mode) { - virDomainCapsCPUModelsPtr cpus; + qemuMonitorCPUDefsPtr cpus; =20 switch (mode) { case VIR_CPU_MODE_HOST_PASSTHROUGH: @@ -2005,7 +2004,7 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, cpus =3D qemuCaps->kvmCPUModels; else cpus =3D qemuCaps->tcgCPUModels; - return cpus && cpus->nmodels > 0; + return cpus && cpus->ncpus > 0; =20 case VIR_CPU_MODE_LAST: break; @@ -2536,18 +2535,18 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qe= muCaps, qemuMonitorPtr mon, bool tcg) { - virDomainCapsCPUModelsPtr models =3D NULL; + qemuMonitorCPUDefsPtr defs =3D NULL; =20 if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_DEFINITIONS)) return 0; =20 - if (virQEMUCapsFetchCPUModels(mon, qemuCaps->arch, &models) < 0) + if (virQEMUCapsFetchCPUDefinitions(mon, qemuCaps->arch, &defs) < 0) return -1; =20 if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) - qemuCaps->tcgCPUModels =3D models; + qemuCaps->tcgCPUModels =3D defs; else - qemuCaps->kvmCPUModels =3D models; + qemuCaps->kvmCPUModels =3D defs; =20 return 0; } @@ -3484,7 +3483,7 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, xmlXPathContextPtr ctxt, virDomainVirtType type) { - virDomainCapsCPUModelsPtr cpus =3D NULL; + g_autoptr(qemuMonitorCPUDefs) defs =3D NULL; g_autofree xmlNodePtr * nodes =3D NULL; size_t i; int n; @@ -3504,20 +3503,14 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, if (n =3D=3D 0) return 0; =20 - if (!(cpus =3D virDomainCapsCPUModelsNew(n))) + if (!(defs =3D qemuMonitorCPUDefsNew(n))) return -1; =20 - if (type =3D=3D VIR_DOMAIN_VIRT_KVM) - qemuCaps->kvmCPUModels =3D cpus; - else - qemuCaps->tcgCPUModels =3D cpus; - for (i =3D 0; i < n; i++) { + qemuMonitorCPUDefInfoPtr cpu =3D defs->cpus + i; int usable =3D VIR_DOMCAPS_CPU_USABLE_UNKNOWN; g_autofree char * strUsable =3D NULL; - g_autofree char * name =3D NULL; g_autofree xmlNodePtr * blockerNodes =3D NULL; - VIR_AUTOSTRINGLIST blockers =3D NULL; int nblockers; =20 if ((strUsable =3D virXMLPropString(nodes[i], "usable")) && @@ -3527,8 +3520,9 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, strUsable); return -1; } + cpu->usable =3D usable; =20 - if (!(name =3D virXMLPropString(nodes[i], "name"))) { + if (!(cpu->name =3D virXMLPropString(nodes[i], "name"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing cpu name in QEMU capabilities cache"= )); return -1; @@ -3548,11 +3542,11 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, if (nblockers > 0) { size_t j; =20 - if (VIR_ALLOC_N(blockers, nblockers + 1) < 0) + if (VIR_ALLOC_N(cpu->blockers, nblockers + 1) < 0) return -1; =20 for (j =3D 0; j < nblockers; j++) { - if (!(blockers[j] =3D virXMLPropString(blockerNodes[j], "n= ame"))) { + if (!(cpu->blockers[j] =3D virXMLPropString(blockerNodes[j= ], "name"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing blocker name in QEMU " "capabilities cache")); @@ -3560,11 +3554,13 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps, } } } - - if (virDomainCapsCPUModelsAddSteal(cpus, &name, usable, &blockers)= < 0) - return -1; } =20 + if (type =3D=3D VIR_DOMAIN_VIRT_KVM) + qemuCaps->kvmCPUModels =3D g_steal_pointer(&defs); + else + qemuCaps->tcgCPUModels =3D g_steal_pointer(&defs); + return 0; } =20 @@ -3973,23 +3969,23 @@ virQEMUCapsFormatCPUModels(virQEMUCapsPtr qemuCaps, virBufferPtr buf, virDomainVirtType type) { - virDomainCapsCPUModelsPtr cpus; + qemuMonitorCPUDefsPtr defs; const char *typeStr; size_t i; =20 if (type =3D=3D VIR_DOMAIN_VIRT_KVM) { typeStr =3D "kvm"; - cpus =3D qemuCaps->kvmCPUModels; + defs =3D qemuCaps->kvmCPUModels; } else { typeStr =3D "tcg"; - cpus =3D qemuCaps->tcgCPUModels; + defs =3D qemuCaps->tcgCPUModels; } =20 - if (!cpus) + if (!defs) return; =20 - for (i =3D 0; i < cpus->nmodels; i++) { - virDomainCapsCPUModelPtr cpu =3D cpus->models + i; + for (i =3D 0; i < defs->ncpus; i++) { + qemuMonitorCPUDefInfoPtr cpu =3D defs->cpus + i; =20 virBufferAsprintf(buf, "name); --=20 2.23.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list