From nobody Mon Feb 9 00:56:14 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1603359340; cv=none; d=zohomail.com; s=zohoarc; b=g0COJ3fGrcArZ6QRdsZjG/4HFiyGce5RTTnlTwPUr5WnTE+R5tdg/4jXpj5G0n9/M8zWRXHus/94kQqinywoIRB5vRUrQASQDrYsyvdp9INoAlgikfnlH81uG0xfEmMwcc95ItmzZW6LmJgOVCd1Mbfc7Qe0rGlG2GHZ4P+5uZk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603359340; 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=2Z6lRaR6x8ibkuWB+wIVNuWuTDIwT5bcCgYE1RG1V78=; b=LUKUjayQDvFskoa5e58WHZE1EXsoZfezbYoWCHKsZW4ntNOKU4lhb9Sjx8RMj4+o0Tuf+zuSHX+jpsvL8gF+YXyhZFAucP1eOmeHLvRCPfYv7+PHPvwZQcU4uMglTiXS5ndVsnOnVYlpRqvx0ywOw1GhrfIxNP4UdA8D3BNifX0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 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-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1603359340151558.6470642085005; Thu, 22 Oct 2020 02:35:40 -0700 (PDT) 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-263-NlMWDvjwNaaFJUsXNjKzxA-1; Thu, 22 Oct 2020 05:35:36 -0400 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 mimecast-mx01.redhat.com (Postfix) with ESMTPS id 2AD585F9CC; Thu, 22 Oct 2020 09:35:31 +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 06DEC60C15; Thu, 22 Oct 2020 09:35:31 +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 C73A8922F4; Thu, 22 Oct 2020 09:35:30 +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 09M9ZHsv024480 for ; Thu, 22 Oct 2020 05:35:17 -0400 Received: by smtp.corp.redhat.com (Postfix) id 232575B4A8; Thu, 22 Oct 2020 09:35:17 +0000 (UTC) Received: from speedmetal.redhat.com (unknown [10.40.208.55]) by smtp.corp.redhat.com (Postfix) with ESMTP id 696F15B4A3 for ; Thu, 22 Oct 2020 09:35:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1603359339; 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=2Z6lRaR6x8ibkuWB+wIVNuWuTDIwT5bcCgYE1RG1V78=; b=gm8d6zTQiE+DBOKh3Kks0X17KXlEz/NnPNjEo42umc2lS+Pr0RzTEEthwIJAy3Xsc8Pefb 7heK7Q/+2nLvF+MwO628FleMjBbCHyBZT0q41+iK3g9mVqVisHfbSEKd/6DxfyymQjOsJ3 Ojx8G/4EBiq9qv/++2ghfSpjZ8OwlGE= X-MC-Unique: NlMWDvjwNaaFJUsXNjKzxA-1 From: Peter Krempa To: libvir-list@redhat.com Subject: [PATCH 05/15] conf: domain_addr: Refactor hash usage in zpci reservation code Date: Thu, 22 Oct 2020 11:34:56 +0200 Message-Id: <5622545f013c590ca9d87ca29eb7f8f280f3c495.1603358617.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Rewrite using GHashTable which already has interfaces for using a number as hash key. Signed-off-by: Peter Krempa Reviewed-by: Bjoern Walk Reviewed-by: Pavel Hrdina --- src/conf/domain_addr.c | 123 +++++++++-------------------------------- src/conf/domain_addr.h | 4 +- 2 files changed, 27 insertions(+), 100 deletions(-) diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c index c7419916aa..4e47c2547c 100644 --- a/src/conf/domain_addr.c +++ b/src/conf/domain_addr.c @@ -25,17 +25,18 @@ #include "virlog.h" #include "virstring.h" #include "domain_addr.h" -#include "virhashcode.h" #define VIR_FROM_THIS VIR_FROM_DOMAIN VIR_LOG_INIT("conf.domain_addr"); static int -virDomainZPCIAddressReserveId(virHashTablePtr set, +virDomainZPCIAddressReserveId(GHashTable *set, virZPCIDeviceAddressID *id, const char *name) { + int *idval; + if (!id->isSet) { virReportError(VIR_ERR_INTERNAL_ERROR, _("No zPCI %s to reserve"), @@ -43,26 +44,24 @@ virDomainZPCIAddressReserveId(virHashTablePtr set, return -1; } - if (virHashLookup(set, &id->value)) { + if (g_hash_table_lookup(set, &id->value)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("zPCI %s %o is already reserved"), name, id->value); return -1; } - if (virHashAddEntry(set, &id->value, (void*)1) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to reserve %s %o"), - name, id->value); - return -1; - } + idval =3D g_new0(int, 1); + *idval =3D (int) id->value; + + g_hash_table_add(set, idval); return 0; } static int -virDomainZPCIAddressReserveUid(virHashTablePtr set, +virDomainZPCIAddressReserveUid(GHashTable *set, virZPCIDeviceAddressPtr addr) { return virDomainZPCIAddressReserveId(set, &addr->uid, "uid"); @@ -70,7 +69,7 @@ virDomainZPCIAddressReserveUid(virHashTablePtr set, static int -virDomainZPCIAddressReserveFid(virHashTablePtr set, +virDomainZPCIAddressReserveFid(GHashTable *set, virZPCIDeviceAddressPtr addr) { return virDomainZPCIAddressReserveId(set, &addr->fid, "fid"); @@ -78,7 +77,7 @@ virDomainZPCIAddressReserveFid(virHashTablePtr set, static int -virDomainZPCIAddressAssignId(virHashTablePtr set, +virDomainZPCIAddressAssignId(GHashTable *set, virZPCIDeviceAddressID *id, unsigned int min, unsigned int max, @@ -87,7 +86,7 @@ virDomainZPCIAddressAssignId(virHashTablePtr set, if (id->isSet) return 0; - while (virHashLookup(set, &min)) { + while (g_hash_table_lookup(set, &min)) { if (min =3D=3D max) { virReportError(VIR_ERR_INTERNAL_ERROR, _("There is no more free %s."), @@ -105,7 +104,7 @@ virDomainZPCIAddressAssignId(virHashTablePtr set, static int -virDomainZPCIAddressAssignUid(virHashTablePtr set, +virDomainZPCIAddressAssignUid(GHashTable *set, virZPCIDeviceAddressPtr addr) { return virDomainZPCIAddressAssignId(set, &addr->uid, 1, @@ -114,7 +113,7 @@ virDomainZPCIAddressAssignUid(virHashTablePtr set, static int -virDomainZPCIAddressAssignFid(virHashTablePtr set, +virDomainZPCIAddressAssignFid(GHashTable *set, virZPCIDeviceAddressPtr addr) { return virDomainZPCIAddressAssignId(set, &addr->fid, 0, @@ -123,40 +122,19 @@ virDomainZPCIAddressAssignFid(virHashTablePtr set, static void -virDomainZPCIAddressReleaseId(virHashTablePtr set, - virZPCIDeviceAddressID *id, - const char *name) +virDomainZPCIAddressReleaseId(GHashTable *set, + virZPCIDeviceAddressID *id) { if (!id->isSet) return; - if (virHashRemoveEntry(set, &id->value) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Release %s %o failed"), - name, id->value); - } + g_hash_table_remove(set, &id->value); id->value =3D 0; id->isSet =3D false; } -static void -virDomainZPCIAddressReleaseUid(virHashTablePtr set, - virZPCIDeviceAddressPtr addr) -{ - virDomainZPCIAddressReleaseId(set, &addr->uid, "uid"); -} - - -static void -virDomainZPCIAddressReleaseFid(virHashTablePtr set, - virZPCIDeviceAddressPtr addr) -{ - virDomainZPCIAddressReleaseId(set, &addr->fid, "fid"); -} - - static void virDomainZPCIAddressReleaseIds(virDomainZPCIAddressIdsPtr zpciIds, virZPCIDeviceAddressPtr addr) @@ -164,8 +142,8 @@ virDomainZPCIAddressReleaseIds(virDomainZPCIAddressIdsP= tr zpciIds, if (!zpciIds) return; - virDomainZPCIAddressReleaseUid(zpciIds->uids, addr); - virDomainZPCIAddressReleaseFid(zpciIds->fids, addr); + virDomainZPCIAddressReleaseId(zpciIds->uids, &addr->uid); + virDomainZPCIAddressReleaseId(zpciIds->fids, &addr->fid); } @@ -183,7 +161,7 @@ virDomainZPCIAddressEnsureAddr(virDomainZPCIAddressIdsP= tr zpciIds, return -1; if (virDomainZPCIAddressReserveFid(zpciIds->fids, addr) < 0) { - virDomainZPCIAddressReleaseUid(zpciIds->uids, addr); + virDomainZPCIAddressReleaseId(zpciIds->uids, &addr->uid); return -1; } @@ -965,55 +943,15 @@ virDomainPCIAddressReleaseAddr(virDomainPCIAddressSet= Ptr addrs, } -static uint32_t -virZPCIAddrKeyCode(const void *name, - uint32_t seed) -{ - unsigned int value =3D *((unsigned int *)name); - return virHashCodeGen(&value, sizeof(value), seed); -} - - -static bool -virZPCIAddrKeyEqual(const void *namea, - const void *nameb) -{ - return *((unsigned int *)namea) =3D=3D *((unsigned int *)nameb); -} - - -static void * -virZPCIAddrKeyCopy(const void *name) -{ - unsigned int *copy =3D g_new0(unsigned int, 1); - - *copy =3D *((unsigned int *)name); - return (void *)copy; -} - - -static char * -virZPCIAddrKeyPrintHuman(const void *name) -{ - return g_strdup_printf("%u", *((unsigned int *)name)); -} - - -static void -virZPCIAddrKeyFree(void *name) -{ - VIR_FREE(name); -} - - static void virDomainPCIAddressSetExtensionFree(virDomainPCIAddressSetPtr addrs) { if (!addrs || !addrs->zpciIds) return; - virHashFree(addrs->zpciIds->uids); - virHashFree(addrs->zpciIds->fids); + g_clear_pointer(&addrs->zpciIds->uids, g_hash_table_unref); + g_clear_pointer(&addrs->zpciIds->fids, g_hash_table_unref); + VIR_FREE(addrs->zpciIds); } @@ -1028,19 +966,8 @@ virDomainPCIAddressSetExtensionAlloc(virDomainPCIAddr= essSetPtr addrs, addrs->zpciIds =3D g_new0(virDomainZPCIAddressIds, 1); - addrs->zpciIds->uids =3D virHashCreateFull(10, NULL, - virZPCIAddrKeyCode, - virZPCIAddrKeyEqual, - virZPCIAddrKeyCopy, - virZPCIAddrKeyPrintHuman, - virZPCIAddrKeyFree); - - addrs->zpciIds->fids =3D virHashCreateFull(10, NULL, - virZPCIAddrKeyCode, - virZPCIAddrKeyEqual, - virZPCIAddrKeyCopy, - virZPCIAddrKeyPrintHuman, - virZPCIAddrKeyFree); + addrs->zpciIds->uids =3D g_hash_table_new_full(g_int_hash, g_int_e= qual, g_free, NULL); + addrs->zpciIds->fids =3D g_hash_table_new_full(g_int_hash, g_int_e= qual, g_free, NULL); } return 0; diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h index a0460b4030..77dd091fd3 100644 --- a/src/conf/domain_addr.h +++ b/src/conf/domain_addr.h @@ -115,8 +115,8 @@ typedef struct { typedef virDomainPCIAddressBus *virDomainPCIAddressBusPtr; typedef struct { - virHashTablePtr uids; - virHashTablePtr fids; + GHashTable *uids; + GHashTable *fids; } virDomainZPCIAddressIds; typedef virDomainZPCIAddressIds *virDomainZPCIAddressIdsPtr; --=20 2.26.2