blob: b6d9f649a1fae3040a266b72564583356d4a3aa2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
/* vi: set sw=4 ts=4: */
/*
* Utility routines.
*
* Copyright (C) 2024 Denys Vlasenko
*
* Licensed under GPLv2, see file LICENSE in this source tree.
*/
#include <sched.h>
#include "libbb.h"
unsigned long* FAST_FUNC get_malloc_cpu_affinity(int pid, unsigned *sz)
{
unsigned long *mask = NULL;
unsigned sz_in_bytes = *sz;
for (;;) {
mask = xrealloc(mask, sz_in_bytes);
if (sched_getaffinity(pid, sz_in_bytes, (void*)mask) == 0)
break; /* got it */
sz_in_bytes *= 2;
if (errno == EINVAL && (int)sz_in_bytes > 0)
continue;
bb_perror_msg_and_die("can't %cet pid %d's affinity", 'g', pid);
}
//bb_error_msg("get mask[0]:%lx sz_in_bytes:%d", mask[0], sz_in_bytes);
*sz = sz_in_bytes;
return mask;
}
|