src/hotspot/os/linux/os_linux.cpp
changeset 59062 6530de931b8e
parent 59060 fce1fa1bdc91
child 59249 29b0d0b61615
equal deleted inserted replaced
59061:df6f2350edfa 59062:6530de931b8e
  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;