virCapabilitiesHostNUMAAddCell: Take double pointer

What this function really does it takes ownership of all pointers
passed (well, except for the first one - caps - to which it
registers new NUMA node). But since all info is passed as a
single pointer it's hard to tell (and use g_auto*). Let's use
double pointers to make the ownership transfer obvious.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Michal Privoznik 2021-04-29 18:58:40 +02:00
parent 26a24a702c
commit 83253ff091
5 changed files with 36 additions and 30 deletions

View File

@ -330,36 +330,45 @@ virCapabilitiesSetNetPrefix(virCaps *caps,
* @num: ID number of NUMA cell * @num: ID number of NUMA cell
* @mem: Total size of memory in the NUMA node (in KiB) * @mem: Total size of memory in the NUMA node (in KiB)
* @ncpus: number of CPUs in cell * @ncpus: number of CPUs in cell
* @cpus: array of CPU definition structures, the pointer is stolen * @cpus: array of CPU definition structures
* @nsiblings: number of sibling NUMA nodes * @nsiblings: number of sibling NUMA nodes
* @siblings: info on sibling NUMA nodes * @siblings: info on sibling NUMA nodes
* @npageinfo: number of pages at node @num * @npageinfo: number of pages at node @num
* @pageinfo: info on each single memory page * @pageinfo: info on each single memory page
* *
* Registers a new NUMA cell for a host, passing in a * Registers a new NUMA cell for a host, passing in a array of
* array of CPU IDs belonging to the cell * CPU IDs belonging to the cell, distances to other NUMA nodes
* and info on hugepages on the node.
*
* All pointers are stolen.
*/ */
void void
virCapabilitiesHostNUMAAddCell(virCapsHostNUMA *caps, virCapabilitiesHostNUMAAddCell(virCapsHostNUMA *caps,
int num, int num,
unsigned long long mem, unsigned long long mem,
int ncpus, int ncpus,
virCapsHostNUMACellCPU *cpus, virCapsHostNUMACellCPU **cpus,
int nsiblings, int nsiblings,
virCapsHostNUMACellSiblingInfo *siblings, virCapsHostNUMACellSiblingInfo **siblings,
int npageinfo, int npageinfo,
virCapsHostNUMACellPageInfo *pageinfo) virCapsHostNUMACellPageInfo **pageinfo)
{ {
virCapsHostNUMACell *cell = g_new0(virCapsHostNUMACell, 1); virCapsHostNUMACell *cell = g_new0(virCapsHostNUMACell, 1);
cell->num = num; cell->num = num;
cell->mem = mem; cell->mem = mem;
cell->ncpus = ncpus; if (cpus) {
cell->cpus = cpus; cell->ncpus = ncpus;
cell->nsiblings = nsiblings; cell->cpus = g_steal_pointer(cpus);
cell->siblings = siblings; }
cell->npageinfo = npageinfo; if (siblings) {
cell->pageinfo = pageinfo; cell->nsiblings = nsiblings;
cell->siblings = g_steal_pointer(siblings);
}
if (pageinfo) {
cell->npageinfo = npageinfo;
cell->pageinfo = g_steal_pointer(pageinfo);
}
g_ptr_array_add(caps->cells, cell); g_ptr_array_add(caps->cells, cell);
} }
@ -1568,7 +1577,7 @@ virCapabilitiesHostNUMAInitFake(virCapsHostNUMA *caps)
virCapabilitiesHostNUMAAddCell(caps, 0, virCapabilitiesHostNUMAAddCell(caps, 0,
nodeinfo.memory, nodeinfo.memory,
cid, cpus, cid, &cpus,
0, NULL, 0, NULL,
0, NULL); 0, NULL);
} }
@ -1633,13 +1642,9 @@ virCapabilitiesHostNUMAInitReal(virCapsHostNUMA *caps)
memory >>= 10; memory >>= 10;
virCapabilitiesHostNUMAAddCell(caps, n, memory, virCapabilitiesHostNUMAAddCell(caps, n, memory,
ncpus, cpus, ncpus, &cpus,
nsiblings, siblings, nsiblings, &siblings,
npageinfo, pageinfo); npageinfo, &pageinfo);
cpus = NULL;
siblings = NULL;
pageinfo = NULL;
virBitmapFree(cpumap); virBitmapFree(cpumap);
cpumap = NULL; cpumap = NULL;
} }

View File

@ -254,11 +254,11 @@ virCapabilitiesHostNUMAAddCell(virCapsHostNUMA *caps,
int num, int num,
unsigned long long mem, unsigned long long mem,
int ncpus, int ncpus,
virCapsHostNUMACellCPU *cpus, virCapsHostNUMACellCPU **cpus,
int nsiblings, int nsiblings,
virCapsHostNUMACellSiblingInfo *siblings, virCapsHostNUMACellSiblingInfo **siblings,
int npageinfo, int npageinfo,
virCapsHostNUMACellPageInfo *pageinfo); virCapsHostNUMACellPageInfo **pageinfo);
virCapsGuestMachine ** virCapsGuestMachine **
virCapabilitiesAllocMachines(const char *const *names, virCapabilitiesAllocMachines(const char *const *names,

View File

@ -330,8 +330,8 @@ libxlCapsInitNuma(libxl_ctx *ctx, virCaps *caps)
virCapabilitiesHostNUMAAddCell(caps->host.numa, i, virCapabilitiesHostNUMAAddCell(caps->host.numa, i,
numa_info[i].size / 1024, numa_info[i].size / 1024,
nr_cpus_node[i], cpus[i], nr_cpus_node[i], &cpus[i],
nr_siblings, siblings, nr_siblings, &siblings,
0, NULL); 0, NULL);
/* This is safe, as the CPU list is now stored in the NUMA cell */ /* This is safe, as the CPU list is now stored in the NUMA cell */

View File

@ -329,8 +329,9 @@ testBuildCapabilities(virConnectPtr conn)
virCapabilitiesHostNUMAAddCell(caps->host.numa, virCapabilitiesHostNUMAAddCell(caps->host.numa,
i, privconn->cells[i].mem, i, privconn->cells[i].mem,
privconn->cells[i].numCpus, privconn->cells[i].numCpus, &cpu_cells,
cpu_cells, 0, NULL, nPages, pages); 0, NULL,
nPages, &pages);
} }
for (i = 0; i < G_N_ELEMENTS(guest_types); i++) { for (i = 0; i < G_N_ELEMENTS(guest_types); i++) {

View File

@ -935,9 +935,9 @@ virTestCapsBuildNUMATopology(int seq)
virCapabilitiesHostNUMAAddCell(caps, cell_id + seq, virCapabilitiesHostNUMAAddCell(caps, cell_id + seq,
MAX_MEM_IN_CELL, MAX_MEM_IN_CELL,
MAX_CPUS_IN_CELL, cell_cpus, MAX_CPUS_IN_CELL, &cell_cpus,
VIR_ARCH_NONE, NULL, 0, NULL,
VIR_ARCH_NONE, NULL); 0, NULL);
cell_cpus = NULL; cell_cpus = NULL;
} }