3006 } |
3006 } |
3007 return 0; |
3007 return 0; |
3008 } |
3008 } |
3009 |
3009 |
3010 int os::numa_get_group_id_for_address(const void* address) { |
3010 int os::numa_get_group_id_for_address(const void* address) { |
3011 #ifndef MPOL_F_NODE |
3011 void** pages = const_cast<void**>(&address); |
3012 #define MPOL_F_NODE (1<<0) // Return next IL mode instead of node mask |
3012 int id = -1; |
3013 #endif |
3013 |
3014 |
3014 if (os::Linux::numa_move_pages(0, 1, pages, NULL, &id, 0) == -1) { |
3015 #ifndef MPOL_F_ADDR |
3015 return -1; |
3016 #define MPOL_F_ADDR (1<<1) // Look up VMA using address |
3016 } |
3017 #endif |
3017 if (id < 0) { |
3018 |
|
3019 int id = 0; |
|
3020 |
|
3021 if (syscall(SYS_get_mempolicy, &id, NULL, 0, const_cast<void*>(address), MPOL_F_NODE | MPOL_F_ADDR) == -1) { |
|
3022 return -1; |
3018 return -1; |
3023 } |
3019 } |
3024 return id; |
3020 return id; |
3025 } |
3021 } |
3026 |
3022 |
3150 libnuma_dlsym(handle, "numa_distance"))); |
3146 libnuma_dlsym(handle, "numa_distance"))); |
3151 set_numa_get_membind(CAST_TO_FN_PTR(numa_get_membind_func_t, |
3147 set_numa_get_membind(CAST_TO_FN_PTR(numa_get_membind_func_t, |
3152 libnuma_v2_dlsym(handle, "numa_get_membind"))); |
3148 libnuma_v2_dlsym(handle, "numa_get_membind"))); |
3153 set_numa_get_interleave_mask(CAST_TO_FN_PTR(numa_get_interleave_mask_func_t, |
3149 set_numa_get_interleave_mask(CAST_TO_FN_PTR(numa_get_interleave_mask_func_t, |
3154 libnuma_v2_dlsym(handle, "numa_get_interleave_mask"))); |
3150 libnuma_v2_dlsym(handle, "numa_get_interleave_mask"))); |
|
3151 set_numa_move_pages(CAST_TO_FN_PTR(numa_move_pages_func_t, |
|
3152 libnuma_dlsym(handle, "numa_move_pages"))); |
3155 |
3153 |
3156 if (numa_available() != -1) { |
3154 if (numa_available() != -1) { |
3157 set_numa_all_nodes((unsigned long*)libnuma_dlsym(handle, "numa_all_nodes")); |
3155 set_numa_all_nodes((unsigned long*)libnuma_dlsym(handle, "numa_all_nodes")); |
3158 set_numa_all_nodes_ptr((struct bitmask **)libnuma_dlsym(handle, "numa_all_nodes_ptr")); |
3156 set_numa_all_nodes_ptr((struct bitmask **)libnuma_dlsym(handle, "numa_all_nodes_ptr")); |
3159 set_numa_nodes_ptr((struct bitmask **)libnuma_dlsym(handle, "numa_nodes_ptr")); |
3157 set_numa_nodes_ptr((struct bitmask **)libnuma_dlsym(handle, "numa_nodes_ptr")); |
3284 os::Linux::numa_set_bind_policy_func_t os::Linux::_numa_set_bind_policy; |
3282 os::Linux::numa_set_bind_policy_func_t os::Linux::_numa_set_bind_policy; |
3285 os::Linux::numa_bitmask_isbitset_func_t os::Linux::_numa_bitmask_isbitset; |
3283 os::Linux::numa_bitmask_isbitset_func_t os::Linux::_numa_bitmask_isbitset; |
3286 os::Linux::numa_distance_func_t os::Linux::_numa_distance; |
3284 os::Linux::numa_distance_func_t os::Linux::_numa_distance; |
3287 os::Linux::numa_get_membind_func_t os::Linux::_numa_get_membind; |
3285 os::Linux::numa_get_membind_func_t os::Linux::_numa_get_membind; |
3288 os::Linux::numa_get_interleave_mask_func_t os::Linux::_numa_get_interleave_mask; |
3286 os::Linux::numa_get_interleave_mask_func_t os::Linux::_numa_get_interleave_mask; |
|
3287 os::Linux::numa_move_pages_func_t os::Linux::_numa_move_pages; |
3289 os::Linux::NumaAllocationPolicy os::Linux::_current_numa_policy; |
3288 os::Linux::NumaAllocationPolicy os::Linux::_current_numa_policy; |
3290 unsigned long* os::Linux::_numa_all_nodes; |
3289 unsigned long* os::Linux::_numa_all_nodes; |
3291 struct bitmask* os::Linux::_numa_all_nodes_ptr; |
3290 struct bitmask* os::Linux::_numa_all_nodes_ptr; |
3292 struct bitmask* os::Linux::_numa_nodes_ptr; |
3291 struct bitmask* os::Linux::_numa_nodes_ptr; |
3293 struct bitmask* os::Linux::_numa_interleave_bitmask; |
3292 struct bitmask* os::Linux::_numa_interleave_bitmask; |