conf: Use virResctrlInfo in capabilities

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
Martin Kletzander 2017-11-20 13:43:30 +01:00
parent cd572df89b
commit 3bbae43d8c
2 changed files with 28 additions and 27 deletions

View File

@ -245,6 +245,7 @@ virCapabilitiesDispose(void *object)
VIR_FREE(caps->host.netprefix); VIR_FREE(caps->host.netprefix);
VIR_FREE(caps->host.pagesSize); VIR_FREE(caps->host.pagesSize);
virCPUDefFree(caps->host.cpu); virCPUDefFree(caps->host.cpu);
virObjectUnref(caps->host.resctrl);
} }
/** /**
@ -1592,6 +1593,20 @@ virCapsHostCacheBankSorter(const void *a,
} }
static int
virCapabilitiesInitResctrl(virCapsPtr caps)
{
if (caps->host.resctrl)
return 0;
caps->host.resctrl = virResctrlInfoNew();
if (!caps->host.resctrl)
return -1;
return virResctrlGetInfo(caps->host.resctrl);
}
int int
virCapabilitiesInitCaches(virCapsPtr caps) virCapabilitiesInitCaches(virCapsPtr caps)
{ {
@ -1600,7 +1615,6 @@ virCapabilitiesInitCaches(virCapsPtr caps)
ssize_t pos = -1; ssize_t pos = -1;
DIR *dirp = NULL; DIR *dirp = NULL;
int ret = -1; int ret = -1;
int typeret;
char *path = NULL; char *path = NULL;
char *type = NULL; char *type = NULL;
struct dirent *ent = NULL; struct dirent *ent = NULL;
@ -1611,6 +1625,9 @@ virCapabilitiesInitCaches(virCapsPtr caps)
* lose information. */ * lose information. */
const int cache_min_level = 3; const int cache_min_level = 3;
if (virCapabilitiesInitResctrl(caps) < 0)
return -1;
/* offline CPUs don't provide cache info */ /* offline CPUs don't provide cache info */
if (virFileReadValueBitmap(&cpus, "%s/cpu/online", SYSFS_SYSTEM_PATH) < 0) if (virFileReadValueBitmap(&cpus, "%s/cpu/online", SYSFS_SYSTEM_PATH) < 0)
return -1; return -1;
@ -1676,32 +1693,6 @@ virCapabilitiesInitCaches(virCapsPtr caps)
SYSFS_SYSTEM_PATH, pos, ent->d_name) < 0) SYSFS_SYSTEM_PATH, pos, ent->d_name) < 0)
goto cleanup; goto cleanup;
typeret = virResctrlGetCacheControlType(bank->level);
if (typeret < 0)
goto cleanup;
if (typeret == 1) {
if (virResctrlGetCacheInfo(bank->level,
bank->size,
VIR_CACHE_TYPE_BOTH,
&bank->controls,
&bank->ncontrols) < 0)
goto cleanup;
} else if (typeret == 2) {
if (virResctrlGetCacheInfo(bank->level,
bank->size,
VIR_CACHE_TYPE_CODE,
&bank->controls,
&bank->ncontrols) < 0)
goto cleanup;
if (virResctrlGetCacheInfo(bank->level,
bank->size,
VIR_CACHE_TYPE_DATA,
&bank->controls,
&bank->ncontrols) < 0)
goto cleanup;
}
kernel_type = virCacheKernelTypeFromString(type); kernel_type = virCacheKernelTypeFromString(type);
if (kernel_type < 0) { if (kernel_type < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
@ -1717,6 +1708,14 @@ virCapabilitiesInitCaches(virCapsPtr caps)
break; break;
} }
if (i == caps->host.ncaches) { if (i == caps->host.ncaches) {
/* If it is a new cache, then update its resctrl information. */
if (virResctrlInfoGetCache(caps->host.resctrl,
bank->level,
bank->size,
&bank->ncontrols,
&bank->controls) < 0)
goto cleanup;
if (VIR_APPEND_ELEMENT(caps->host.caches, if (VIR_APPEND_ELEMENT(caps->host.caches,
caps->host.ncaches, caps->host.ncaches,
bank) < 0) { bank) < 0) {

View File

@ -170,6 +170,8 @@ struct _virCapsHost {
size_t nnumaCell_max; size_t nnumaCell_max;
virCapsHostNUMACellPtr *numaCell; virCapsHostNUMACellPtr *numaCell;
virResctrlInfoPtr resctrl;
size_t ncaches; size_t ncaches;
virCapsHostCacheBankPtr *caches; virCapsHostCacheBankPtr *caches;