#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"),
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");
static int
-virDomainZPCIAddressReserveFid(virHashTablePtr set,
+virDomainZPCIAddressReserveFid(GHashTable *set,
virZPCIDeviceAddressPtr addr)
{
return virDomainZPCIAddressReserveId(set, &addr->fid, "fid");
static int
-virDomainZPCIAddressAssignId(virHashTablePtr set,
+virDomainZPCIAddressAssignId(GHashTable *set,
virZPCIDeviceAddressID *id,
unsigned int min,
unsigned int max,
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."),
static int
-virDomainZPCIAddressAssignUid(virHashTablePtr set,
+virDomainZPCIAddressAssignUid(GHashTable *set,
virZPCIDeviceAddressPtr addr)
{
return virDomainZPCIAddressAssignId(set, &addr->uid, 1,
static int
-virDomainZPCIAddressAssignFid(virHashTablePtr set,
+virDomainZPCIAddressAssignFid(GHashTable *set,
virZPCIDeviceAddressPtr addr)
{
return virDomainZPCIAddressAssignId(set, &addr->fid, 0,
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)
if (!zpciIds)
return;
- virDomainZPCIAddressReleaseUid(zpciIds->uids, addr);
- virDomainZPCIAddressReleaseFid(zpciIds->fids, addr);
+ virDomainZPCIAddressReleaseId(zpciIds->uids, &addr->uid);
+ virDomainZPCIAddressReleaseId(zpciIds->fids, &addr->fid);
}
return -1;
if (virDomainZPCIAddressReserveFid(zpciIds->fids, addr) < 0) {
- virDomainZPCIAddressReleaseUid(zpciIds->uids, addr);
+ virDomainZPCIAddressReleaseId(zpciIds->uids, &addr->uid);
return -1;
}
}
-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);
}
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;