214 typedef int (*numa_tonode_memory_func_t)(void *start, size_t size, int node); |
214 typedef int (*numa_tonode_memory_func_t)(void *start, size_t size, int node); |
215 typedef void (*numa_interleave_memory_func_t)(void *start, size_t size, unsigned long *nodemask); |
215 typedef void (*numa_interleave_memory_func_t)(void *start, size_t size, unsigned long *nodemask); |
216 typedef void (*numa_interleave_memory_v2_func_t)(void *start, size_t size, struct bitmask* mask); |
216 typedef void (*numa_interleave_memory_v2_func_t)(void *start, size_t size, struct bitmask* mask); |
217 typedef struct bitmask* (*numa_get_membind_func_t)(void); |
217 typedef struct bitmask* (*numa_get_membind_func_t)(void); |
218 typedef struct bitmask* (*numa_get_interleave_mask_func_t)(void); |
218 typedef struct bitmask* (*numa_get_interleave_mask_func_t)(void); |
|
219 typedef long (*numa_move_pages_func_t)(int pid, unsigned long count, void **pages, const int *nodes, int *status, int flags); |
219 |
220 |
220 typedef void (*numa_set_bind_policy_func_t)(int policy); |
221 typedef void (*numa_set_bind_policy_func_t)(int policy); |
221 typedef int (*numa_bitmask_isbitset_func_t)(struct bitmask *bmp, unsigned int n); |
222 typedef int (*numa_bitmask_isbitset_func_t)(struct bitmask *bmp, unsigned int n); |
222 typedef int (*numa_distance_func_t)(int node1, int node2); |
223 typedef int (*numa_distance_func_t)(int node1, int node2); |
223 |
224 |
232 static numa_set_bind_policy_func_t _numa_set_bind_policy; |
233 static numa_set_bind_policy_func_t _numa_set_bind_policy; |
233 static numa_bitmask_isbitset_func_t _numa_bitmask_isbitset; |
234 static numa_bitmask_isbitset_func_t _numa_bitmask_isbitset; |
234 static numa_distance_func_t _numa_distance; |
235 static numa_distance_func_t _numa_distance; |
235 static numa_get_membind_func_t _numa_get_membind; |
236 static numa_get_membind_func_t _numa_get_membind; |
236 static numa_get_interleave_mask_func_t _numa_get_interleave_mask; |
237 static numa_get_interleave_mask_func_t _numa_get_interleave_mask; |
|
238 static numa_move_pages_func_t _numa_move_pages; |
237 static unsigned long* _numa_all_nodes; |
239 static unsigned long* _numa_all_nodes; |
238 static struct bitmask* _numa_all_nodes_ptr; |
240 static struct bitmask* _numa_all_nodes_ptr; |
239 static struct bitmask* _numa_nodes_ptr; |
241 static struct bitmask* _numa_nodes_ptr; |
240 static struct bitmask* _numa_interleave_bitmask; |
242 static struct bitmask* _numa_interleave_bitmask; |
241 static struct bitmask* _numa_membind_bitmask; |
243 static struct bitmask* _numa_membind_bitmask; |
251 static void set_numa_set_bind_policy(numa_set_bind_policy_func_t func) { _numa_set_bind_policy = func; } |
253 static void set_numa_set_bind_policy(numa_set_bind_policy_func_t func) { _numa_set_bind_policy = func; } |
252 static void set_numa_bitmask_isbitset(numa_bitmask_isbitset_func_t func) { _numa_bitmask_isbitset = func; } |
254 static void set_numa_bitmask_isbitset(numa_bitmask_isbitset_func_t func) { _numa_bitmask_isbitset = func; } |
253 static void set_numa_distance(numa_distance_func_t func) { _numa_distance = func; } |
255 static void set_numa_distance(numa_distance_func_t func) { _numa_distance = func; } |
254 static void set_numa_get_membind(numa_get_membind_func_t func) { _numa_get_membind = func; } |
256 static void set_numa_get_membind(numa_get_membind_func_t func) { _numa_get_membind = func; } |
255 static void set_numa_get_interleave_mask(numa_get_interleave_mask_func_t func) { _numa_get_interleave_mask = func; } |
257 static void set_numa_get_interleave_mask(numa_get_interleave_mask_func_t func) { _numa_get_interleave_mask = func; } |
|
258 static void set_numa_move_pages(numa_move_pages_func_t func) { _numa_move_pages = func; } |
256 static void set_numa_all_nodes(unsigned long* ptr) { _numa_all_nodes = ptr; } |
259 static void set_numa_all_nodes(unsigned long* ptr) { _numa_all_nodes = ptr; } |
257 static void set_numa_all_nodes_ptr(struct bitmask **ptr) { _numa_all_nodes_ptr = (ptr == NULL ? NULL : *ptr); } |
260 static void set_numa_all_nodes_ptr(struct bitmask **ptr) { _numa_all_nodes_ptr = (ptr == NULL ? NULL : *ptr); } |
258 static void set_numa_nodes_ptr(struct bitmask **ptr) { _numa_nodes_ptr = (ptr == NULL ? NULL : *ptr); } |
261 static void set_numa_nodes_ptr(struct bitmask **ptr) { _numa_nodes_ptr = (ptr == NULL ? NULL : *ptr); } |
259 static void set_numa_interleave_bitmask(struct bitmask* ptr) { _numa_interleave_bitmask = ptr ; } |
262 static void set_numa_interleave_bitmask(struct bitmask* ptr) { _numa_interleave_bitmask = ptr ; } |
260 static void set_numa_membind_bitmask(struct bitmask* ptr) { _numa_membind_bitmask = ptr ; } |
263 static void set_numa_membind_bitmask(struct bitmask* ptr) { _numa_membind_bitmask = ptr ; } |
315 _numa_set_bind_policy(policy); |
318 _numa_set_bind_policy(policy); |
316 } |
319 } |
317 } |
320 } |
318 static int numa_distance(int node1, int node2) { |
321 static int numa_distance(int node1, int node2) { |
319 return _numa_distance != NULL ? _numa_distance(node1, node2) : -1; |
322 return _numa_distance != NULL ? _numa_distance(node1, node2) : -1; |
|
323 } |
|
324 static long numa_move_pages(int pid, unsigned long count, void **pages, const int *nodes, int *status, int flags) { |
|
325 return _numa_move_pages != NULL ? _numa_move_pages(pid, count, pages, nodes, status, flags) : -1; |
320 } |
326 } |
321 static int get_node_by_cpu(int cpu_id); |
327 static int get_node_by_cpu(int cpu_id); |
322 static int get_existing_num_nodes(); |
328 static int get_existing_num_nodes(); |
323 // Check if numa node is configured (non-zero memory node). |
329 // Check if numa node is configured (non-zero memory node). |
324 static bool is_node_in_configured_nodes(unsigned int n) { |
330 static bool is_node_in_configured_nodes(unsigned int n) { |