Mercurial > hg > truffle
comparison src/os/solaris/vm/os_solaris.hpp @ 144:e3729351c946
6697534: Premature GC and invalid lgrp selection with NUMA-aware allocator.
Summary: Don't move tops of the chunks in ensure_parsibility(). Handle the situation with Solaris when a machine has a locality group with no memory.
Reviewed-by: apetrusenko, jcoomes, ysr
author | iveresov |
---|---|
date | Fri, 09 May 2008 16:34:08 +0400 |
parents | 8d84e28e68ba |
children | d1605aabd0a1 |
comparison
equal
deleted
inserted
replaced
143:b5489bb705c9 | 144:e3729351c946 |
---|---|
64 static int_fnP_cond_tP _cond_destroy; | 64 static int_fnP_cond_tP _cond_destroy; |
65 static int _cond_scope; | 65 static int _cond_scope; |
66 | 66 |
67 typedef uintptr_t lgrp_cookie_t; | 67 typedef uintptr_t lgrp_cookie_t; |
68 typedef id_t lgrp_id_t; | 68 typedef id_t lgrp_id_t; |
69 typedef int lgrp_rsrc_t; | |
69 typedef enum lgrp_view { | 70 typedef enum lgrp_view { |
70 LGRP_VIEW_CALLER, /* what's available to the caller */ | 71 LGRP_VIEW_CALLER, /* what's available to the caller */ |
71 LGRP_VIEW_OS /* what's available to operating system */ | 72 LGRP_VIEW_OS /* what's available to operating system */ |
72 } lgrp_view_t; | 73 } lgrp_view_t; |
73 | 74 |
75 typedef lgrp_cookie_t (*lgrp_init_func_t)(lgrp_view_t view); | 76 typedef lgrp_cookie_t (*lgrp_init_func_t)(lgrp_view_t view); |
76 typedef int (*lgrp_fini_func_t)(lgrp_cookie_t cookie); | 77 typedef int (*lgrp_fini_func_t)(lgrp_cookie_t cookie); |
77 typedef lgrp_id_t (*lgrp_root_func_t)(lgrp_cookie_t cookie); | 78 typedef lgrp_id_t (*lgrp_root_func_t)(lgrp_cookie_t cookie); |
78 typedef int (*lgrp_children_func_t)(lgrp_cookie_t cookie, lgrp_id_t parent, | 79 typedef int (*lgrp_children_func_t)(lgrp_cookie_t cookie, lgrp_id_t parent, |
79 lgrp_id_t *lgrp_array, uint_t lgrp_array_size); | 80 lgrp_id_t *lgrp_array, uint_t lgrp_array_size); |
81 typedef int (*lgrp_resources_func_t)(lgrp_cookie_t cookie, lgrp_id_t lgrp, | |
82 lgrp_id_t *lgrp_array, uint_t lgrp_array_size, | |
83 lgrp_rsrc_t type); | |
80 typedef int (*lgrp_nlgrps_func_t)(lgrp_cookie_t cookie); | 84 typedef int (*lgrp_nlgrps_func_t)(lgrp_cookie_t cookie); |
81 typedef int (*lgrp_cookie_stale_func_t)(lgrp_cookie_t cookie); | 85 typedef int (*lgrp_cookie_stale_func_t)(lgrp_cookie_t cookie); |
82 typedef int (*meminfo_func_t)(const uint64_t inaddr[], int addr_count, | 86 typedef int (*meminfo_func_t)(const uint64_t inaddr[], int addr_count, |
83 const uint_t info_req[], int info_count, | 87 const uint_t info_req[], int info_count, |
84 uint64_t outdata[], uint_t validity[]); | 88 uint64_t outdata[], uint_t validity[]); |
86 static lgrp_home_func_t _lgrp_home; | 90 static lgrp_home_func_t _lgrp_home; |
87 static lgrp_init_func_t _lgrp_init; | 91 static lgrp_init_func_t _lgrp_init; |
88 static lgrp_fini_func_t _lgrp_fini; | 92 static lgrp_fini_func_t _lgrp_fini; |
89 static lgrp_root_func_t _lgrp_root; | 93 static lgrp_root_func_t _lgrp_root; |
90 static lgrp_children_func_t _lgrp_children; | 94 static lgrp_children_func_t _lgrp_children; |
95 static lgrp_resources_func_t _lgrp_resources; | |
91 static lgrp_nlgrps_func_t _lgrp_nlgrps; | 96 static lgrp_nlgrps_func_t _lgrp_nlgrps; |
92 static lgrp_cookie_stale_func_t _lgrp_cookie_stale; | 97 static lgrp_cookie_stale_func_t _lgrp_cookie_stale; |
93 static lgrp_cookie_t _lgrp_cookie; | 98 static lgrp_cookie_t _lgrp_cookie; |
94 | 99 |
95 static meminfo_func_t _meminfo; | 100 static meminfo_func_t _meminfo; |
107 static struct sigaction *(*get_signal_action)(int); | 112 static struct sigaction *(*get_signal_action)(int); |
108 static struct sigaction *get_preinstalled_handler(int); | 113 static struct sigaction *get_preinstalled_handler(int); |
109 static int (*get_libjsig_version)(); | 114 static int (*get_libjsig_version)(); |
110 static void save_preinstalled_handler(int, struct sigaction&); | 115 static void save_preinstalled_handler(int, struct sigaction&); |
111 static void check_signal_handler(int sig); | 116 static void check_signal_handler(int sig); |
112 | |
113 // For overridable signals | 117 // For overridable signals |
114 static int _SIGinterrupt; // user-overridable INTERRUPT_SIGNAL | 118 static int _SIGinterrupt; // user-overridable INTERRUPT_SIGNAL |
115 static int _SIGasync; // user-overridable ASYNC_SIGNAL | 119 static int _SIGasync; // user-overridable ASYNC_SIGNAL |
116 static void set_SIGinterrupt(int newsig) { _SIGinterrupt = newsig; } | 120 static void set_SIGinterrupt(int newsig) { _SIGinterrupt = newsig; } |
117 static void set_SIGasync(int newsig) { _SIGasync = newsig; } | 121 static void set_SIGasync(int newsig) { _SIGasync = newsig; } |
251 | 255 |
252 static void set_lgrp_home(lgrp_home_func_t func) { _lgrp_home = func; } | 256 static void set_lgrp_home(lgrp_home_func_t func) { _lgrp_home = func; } |
253 static void set_lgrp_init(lgrp_init_func_t func) { _lgrp_init = func; } | 257 static void set_lgrp_init(lgrp_init_func_t func) { _lgrp_init = func; } |
254 static void set_lgrp_fini(lgrp_fini_func_t func) { _lgrp_fini = func; } | 258 static void set_lgrp_fini(lgrp_fini_func_t func) { _lgrp_fini = func; } |
255 static void set_lgrp_root(lgrp_root_func_t func) { _lgrp_root = func; } | 259 static void set_lgrp_root(lgrp_root_func_t func) { _lgrp_root = func; } |
256 static void set_lgrp_children(lgrp_children_func_t func) { _lgrp_children = func; } | 260 static void set_lgrp_children(lgrp_children_func_t func) { _lgrp_children = func; } |
257 static void set_lgrp_nlgrps(lgrp_nlgrps_func_t func) { _lgrp_nlgrps = func; } | 261 static void set_lgrp_resources(lgrp_resources_func_t func) { _lgrp_resources = func; } |
262 static void set_lgrp_nlgrps(lgrp_nlgrps_func_t func) { _lgrp_nlgrps = func; } | |
258 static void set_lgrp_cookie_stale(lgrp_cookie_stale_func_t func) { _lgrp_cookie_stale = func; } | 263 static void set_lgrp_cookie_stale(lgrp_cookie_stale_func_t func) { _lgrp_cookie_stale = func; } |
259 static void set_lgrp_cookie(lgrp_cookie_t cookie) { _lgrp_cookie = cookie; } | 264 static void set_lgrp_cookie(lgrp_cookie_t cookie) { _lgrp_cookie = cookie; } |
260 | 265 |
261 static id_t lgrp_home(idtype_t type, id_t id) { return _lgrp_home != NULL ? _lgrp_home(type, id) : -1; } | 266 static id_t lgrp_home(idtype_t type, id_t id) { return _lgrp_home != NULL ? _lgrp_home(type, id) : -1; } |
262 static lgrp_cookie_t lgrp_init(lgrp_view_t view) { return _lgrp_init != NULL ? _lgrp_init(view) : 0; } | 267 static lgrp_cookie_t lgrp_init(lgrp_view_t view) { return _lgrp_init != NULL ? _lgrp_init(view) : 0; } |
264 static lgrp_id_t lgrp_root(lgrp_cookie_t cookie) { return _lgrp_root != NULL ? _lgrp_root(cookie) : -1; }; | 269 static lgrp_id_t lgrp_root(lgrp_cookie_t cookie) { return _lgrp_root != NULL ? _lgrp_root(cookie) : -1; }; |
265 static int lgrp_children(lgrp_cookie_t cookie, lgrp_id_t parent, | 270 static int lgrp_children(lgrp_cookie_t cookie, lgrp_id_t parent, |
266 lgrp_id_t *lgrp_array, uint_t lgrp_array_size) { | 271 lgrp_id_t *lgrp_array, uint_t lgrp_array_size) { |
267 return _lgrp_children != NULL ? _lgrp_children(cookie, parent, lgrp_array, lgrp_array_size) : -1; | 272 return _lgrp_children != NULL ? _lgrp_children(cookie, parent, lgrp_array, lgrp_array_size) : -1; |
268 } | 273 } |
274 static int lgrp_resources(lgrp_cookie_t cookie, lgrp_id_t lgrp, | |
275 lgrp_id_t *lgrp_array, uint_t lgrp_array_size, | |
276 lgrp_rsrc_t type) { | |
277 return _lgrp_resources != NULL ? _lgrp_resources(cookie, lgrp, lgrp_array, lgrp_array_size, type) : -1; | |
278 } | |
279 | |
269 static int lgrp_nlgrps(lgrp_cookie_t cookie) { return _lgrp_nlgrps != NULL ? _lgrp_nlgrps(cookie) : -1; } | 280 static int lgrp_nlgrps(lgrp_cookie_t cookie) { return _lgrp_nlgrps != NULL ? _lgrp_nlgrps(cookie) : -1; } |
270 static int lgrp_cookie_stale(lgrp_cookie_t cookie) { | 281 static int lgrp_cookie_stale(lgrp_cookie_t cookie) { |
271 return _lgrp_cookie_stale != NULL ? _lgrp_cookie_stale(cookie) : -1; | 282 return _lgrp_cookie_stale != NULL ? _lgrp_cookie_stale(cookie) : -1; |
272 } | 283 } |
273 static lgrp_cookie_t lgrp_cookie() { return _lgrp_cookie; } | 284 static lgrp_cookie_t lgrp_cookie() { return _lgrp_cookie; } |