vppinfra: send minimal needed mask to the set_mempolicy syscall
Type: fix
fixes: 561ae5d
Change-Id: I0d98f5b43bc9ab5d31463b285177a11a10b864d2
Signed-off-by: Damjan Marion <dmarion@me.com>
This commit is contained in:
committed by
Dave Wallace
parent
1cc592b17c
commit
fecb2524ab
@@ -28,6 +28,7 @@
|
||||
#include <vppinfra/mem.h>
|
||||
#include <vppinfra/lock.h>
|
||||
#include <vppinfra/time.h>
|
||||
#include <vppinfra/bitmap.h>
|
||||
#include <vppinfra/format.h>
|
||||
#include <vppinfra/clib_error.h>
|
||||
#include <vppinfra/linux/sysfs.h>
|
||||
@@ -608,8 +609,8 @@ __clib_export int
|
||||
clib_mem_set_numa_affinity (u8 numa_node, int force)
|
||||
{
|
||||
clib_mem_main_t *mm = &clib_mem_main;
|
||||
long unsigned int mask[16] = { 0 };
|
||||
int mask_len = sizeof (mask) * 8 + 1;
|
||||
clib_bitmap_t *bmp = 0;
|
||||
int rv;
|
||||
|
||||
/* no numa support */
|
||||
if (mm->numa_node_bitmap == 0)
|
||||
@@ -625,19 +626,21 @@ clib_mem_set_numa_affinity (u8 numa_node, int force)
|
||||
return 0;
|
||||
}
|
||||
|
||||
mask[0] = 1 << numa_node;
|
||||
bmp = clib_bitmap_set (bmp, numa_node, 1);
|
||||
|
||||
if (syscall (__NR_set_mempolicy, force ? MPOL_BIND : MPOL_PREFERRED, mask,
|
||||
mask_len))
|
||||
goto error;
|
||||
rv = syscall (__NR_set_mempolicy, force ? MPOL_BIND : MPOL_PREFERRED, bmp,
|
||||
vec_len (bmp) * sizeof (bmp[0] * 8) + 1);
|
||||
|
||||
clib_bitmap_free (bmp);
|
||||
vec_reset_length (mm->error);
|
||||
|
||||
if (rv)
|
||||
{
|
||||
mm->error = clib_error_return_unix (mm->error, (char *) __func__);
|
||||
return CLIB_MEM_ERROR;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
vec_reset_length (mm->error);
|
||||
mm->error = clib_error_return_unix (mm->error, (char *) __func__);
|
||||
return CLIB_MEM_ERROR;
|
||||
}
|
||||
|
||||
__clib_export int
|
||||
|
||||
Reference in New Issue
Block a user