1 /**
2  * Copyright (C) Mellanox Technologies Ltd. 2001-2018.  ALL RIGHTS RESERVED.
3  *
4  * See file LICENSE for terms.
5  */
6 
7 #ifndef UCS_NUMA_H_
8 #define UCS_NUMA_H_
9 
10 #ifdef HAVE_CONFIG_H
11 #  include "config.h"
12 #endif
13 
14 #include <ucs/debug/memtrack.h>
15 
16 #if HAVE_NUMA
17 #include <numaif.h>
18 #include <numa.h>
19 
20 #if HAVE_STRUCT_BITMASK
21 #  define numa_nodemask_p(_nm)            ((_nm)->maskp)
22 #  define numa_nodemask_size(_nm)         ((_nm)->size)
23 #  define numa_get_thread_node_mask(_nmp) \
24         { \
25             numa_free_nodemask(*(_nmp)); \
26             *(_nmp) = numa_get_run_node_mask(); \
27         }
28 #else
29 #  define numa_allocate_nodemask()        ucs_malloc(sizeof(nodemask_t), "nodemask")
30 #  define numa_free_nodemask(_nm)         ucs_free(_nm)
31 #  define numa_nodemask_p(_nm)            ((_nm)->maskp.n)
32 #  define numa_nodemask_size(_nm)         ((size_t)NUMA_NUM_NODES)
33 #  define numa_bitmask_clearall(_nm)      nodemask_zero(&(_nm)->maskp)
34 #  define numa_bitmask_setbit(_nm, _n)    nodemask_set(&(_nm)->maskp, _n)
35 #  define numa_get_thread_node_mask(_nmp) \
36         { \
37             (*(_nmp))->maskp = numa_get_run_node_mask(); \
38         }
39 
40 struct bitmask {
41     nodemask_t maskp;
42 };
43 #endif /* HAVE_STRUCT_BITMASK */
44 
45 #endif /* HAVE_NUMA */
46 
47 
48 #define UCS_NUMA_MIN_DISTANCE    10
49 
50 
51 typedef enum {
52     UCS_NUMA_POLICY_DEFAULT,
53     UCS_NUMA_POLICY_BIND,
54     UCS_NUMA_POLICY_PREFERRED,
55     UCS_NUMA_POLICY_LAST
56 } ucs_numa_policy_t;
57 
58 
59 extern const char *ucs_numa_policy_names[];
60 
61 
62 int ucs_numa_node_of_cpu(int cpu);
63 
64 
65 #endif
66