__clib_export __thread uword __os_thread_index = 0;
__clib_export __thread uword __os_numa_index = 0;
+__clib_export clib_bitmap_t *os_get_cpu_affinity_bitmap (int pid);
+
clib_error_t *
clib_file_n_bytes (char *file, uword * result)
{
{
#if __linux__
return clib_sysfs_read_bitmap ("/sys/devices/system/cpu/online");
+#elif defined(__FreeBSD__)
+ return os_get_cpu_affinity_bitmap (0);
#else
return 0;
#endif
cpuset_t mask;
uword *r = NULL;
+ clib_bitmap_alloc (r, sizeof (CPU_SETSIZE));
+ clib_bitmap_zero (r);
+
if (cpuset_getaffinity (CPU_LEVEL_CPUSET, CPU_WHICH_CPUSET, -1,
sizeof (mask), &mask) != 0)
{
{
#if __linux__
return clib_sysfs_read_bitmap ("/sys/devices/system/node/online");
-#elif defined(__FreeBSD__)
- domainset_t domain;
- uword *r = NULL;
- int policy;
-
- if (cpuset_getdomain (CPU_LEVEL_CPUSET, CPU_WHICH_CPUSET, -1,
- sizeof (domain), &domain, &policy) != 0)
- {
- clib_bitmap_free (r);
- return NULL;
- }
-
- for (int bit = 0; bit < CPU_SETSIZE; bit++)
- clib_bitmap_set (r, bit, CPU_ISSET (bit, &domain));
- return r;
#else
return 0;
#endif