mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-22 12:35:17 +00:00
util: Refactor virResctrlAllocFormat of virresctrl
Refactor virResctrlAllocFormat so that it is easy to support other resource allocation technologies. Signed-off-by: Bing Niu <bing.niu@intel.com> Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
3a1356d461
commit
65bae2f18c
@ -849,17 +849,14 @@ virResctrlAllocGetID(virResctrlAllocPtr alloc)
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
virResctrlAllocFormat(virResctrlAllocPtr alloc)
|
||||
static int
|
||||
virResctrlAllocFormatCache(virResctrlAllocPtr alloc,
|
||||
virBufferPtr buf)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
unsigned int level = 0;
|
||||
unsigned int type = 0;
|
||||
unsigned int cache = 0;
|
||||
|
||||
if (!alloc)
|
||||
return NULL;
|
||||
|
||||
for (level = 0; level < alloc->nlevels; level++) {
|
||||
virResctrlAllocPerLevelPtr a_level = alloc->levels[level];
|
||||
|
||||
@ -872,7 +869,7 @@ virResctrlAllocFormat(virResctrlAllocPtr alloc)
|
||||
if (!a_type)
|
||||
continue;
|
||||
|
||||
virBufferAsprintf(&buf, "L%u%s:", level, virResctrlTypeToString(type));
|
||||
virBufferAsprintf(buf, "L%u%s:", level, virResctrlTypeToString(type));
|
||||
|
||||
for (cache = 0; cache < a_type->nmasks; cache++) {
|
||||
virBitmapPtr mask = a_type->masks[cache];
|
||||
@ -882,21 +879,35 @@ virResctrlAllocFormat(virResctrlAllocPtr alloc)
|
||||
continue;
|
||||
|
||||
mask_str = virBitmapToString(mask, false, true);
|
||||
if (!mask_str) {
|
||||
virBufferFreeAndReset(&buf);
|
||||
return NULL;
|
||||
}
|
||||
if (!mask_str)
|
||||
return -1;
|
||||
|
||||
virBufferAsprintf(&buf, "%u=%s;", cache, mask_str);
|
||||
virBufferAsprintf(buf, "%u=%s;", cache, mask_str);
|
||||
VIR_FREE(mask_str);
|
||||
}
|
||||
|
||||
virBufferTrim(&buf, ";", 1);
|
||||
virBufferAddChar(&buf, '\n');
|
||||
virBufferTrim(buf, ";", 1);
|
||||
virBufferAddChar(buf, '\n');
|
||||
}
|
||||
}
|
||||
|
||||
virBufferCheckError(&buf);
|
||||
return virBufferCheckError(buf);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
virResctrlAllocFormat(virResctrlAllocPtr alloc)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
if (!alloc)
|
||||
return NULL;
|
||||
|
||||
if (virResctrlAllocFormatCache(alloc, &buf) < 0) {
|
||||
virBufferFreeAndReset(&buf);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return virBufferContentAndReset(&buf);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user