Rewrite using GHashTable which already has interfaces for using a number as hash key. Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx> --- 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 = g_new0(int, 1); + *idval = (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 == 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 = 0; id->isSet = 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(virDomainZPCIAddressIdsPtr 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(virDomainZPCIAddressIdsPtr 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(virDomainPCIAddressSetPtr addrs, } -static uint32_t -virZPCIAddrKeyCode(const void *name, - uint32_t seed) -{ - unsigned int value = *((unsigned int *)name); - return virHashCodeGen(&value, sizeof(value), seed); -} - - -static bool -virZPCIAddrKeyEqual(const void *namea, - const void *nameb) -{ - return *((unsigned int *)namea) == *((unsigned int *)nameb); -} - - -static void * -virZPCIAddrKeyCopy(const void *name) -{ - unsigned int *copy = g_new0(unsigned int, 1); - - *copy = *((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(virDomainPCIAddressSetPtr addrs, addrs->zpciIds = g_new0(virDomainZPCIAddressIds, 1); - addrs->zpciIds->uids = virHashCreateFull(10, NULL, - virZPCIAddrKeyCode, - virZPCIAddrKeyEqual, - virZPCIAddrKeyCopy, - virZPCIAddrKeyPrintHuman, - virZPCIAddrKeyFree); - - addrs->zpciIds->fids = virHashCreateFull(10, NULL, - virZPCIAddrKeyCode, - virZPCIAddrKeyEqual, - virZPCIAddrKeyCopy, - virZPCIAddrKeyPrintHuman, - virZPCIAddrKeyFree); + addrs->zpciIds->uids = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, NULL); + addrs->zpciIds->fids = g_hash_table_new_full(g_int_hash, g_int_equal, 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; -- 2.26.2