mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
utils: Remove arbitrary limit on socket_id/core_id
While in most cases the values are going to be much smaller than our arbitrary 4096 limit, there is really no guarantee that would be the case: in fact, a few aarch64 servers have been spotted in the wild with core_id as high as 6216. Take advantage of virBitmap's ability to automatically alter its size at runtime to accomodate such values. Signed-off-by: Andrea Bolognani <abologna@redhat.com>
This commit is contained in:
parent
089849d3c4
commit
ba35ac2ebb
@ -293,9 +293,6 @@ virHostCPUParseNode(const char *node,
|
|||||||
int *threads,
|
int *threads,
|
||||||
int *offline)
|
int *offline)
|
||||||
{
|
{
|
||||||
/* Biggest value we can expect to be used as either socket id
|
|
||||||
* or core id. Bitmaps will need to be sized accordingly */
|
|
||||||
const int ID_MAX = 4095;
|
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
int processors = 0;
|
int processors = 0;
|
||||||
DIR *cpudir = NULL;
|
DIR *cpudir = NULL;
|
||||||
@ -324,7 +321,7 @@ virHostCPUParseNode(const char *node,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
/* enumerate sockets in the node */
|
/* enumerate sockets in the node */
|
||||||
if (!(sockets_map = virBitmapNew(ID_MAX + 1)))
|
if (!(sockets_map = virBitmapNewEmpty()))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
while ((direrr = virDirRead(cpudir, &cpudirent, node)) > 0) {
|
while ((direrr = virDirRead(cpudir, &cpudirent, node)) > 0) {
|
||||||
@ -343,14 +340,8 @@ virHostCPUParseNode(const char *node,
|
|||||||
|
|
||||||
if (virHostCPUGetSocket(cpu, &sock) < 0)
|
if (virHostCPUGetSocket(cpu, &sock) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
if (sock > ID_MAX) {
|
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("Socket %d can't be handled (max socket is %d)"),
|
|
||||||
sock, ID_MAX);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (virBitmapSetBit(sockets_map, sock) < 0)
|
if (virBitmapSetBitExpand(sockets_map, sock) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (sock > sock_max)
|
if (sock > sock_max)
|
||||||
@ -367,7 +358,7 @@ virHostCPUParseNode(const char *node,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
for (i = 0; i < sock_max; i++)
|
for (i = 0; i < sock_max; i++)
|
||||||
if (!(cores_maps[i] = virBitmapNew(ID_MAX + 1)))
|
if (!(cores_maps[i] = virBitmapNewEmpty()))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
/* Iterate over all CPUs in the node, in ascending order */
|
/* Iterate over all CPUs in the node, in ascending order */
|
||||||
@ -411,14 +402,8 @@ virHostCPUParseNode(const char *node,
|
|||||||
if (virHostCPUGetCore(cpu, &core) < 0)
|
if (virHostCPUGetCore(cpu, &core) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
if (core > ID_MAX) {
|
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("Core %d can't be handled (max core is %d)"),
|
|
||||||
core, ID_MAX);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (virBitmapSetBit(cores_maps[sock], core) < 0)
|
if (virBitmapSetBitExpand(cores_maps[sock], core) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (!(siblings = virHostCPUCountThreadSiblings(cpu)))
|
if (!(siblings = virHostCPUCountThreadSiblings(cpu)))
|
||||||
|
Loading…
Reference in New Issue
Block a user