10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_RUNTIME_SAFEPOINTMECHANISM_INLINE_HPP
26 #define SHARE_VM_RUNTIME_SAFEPOINTMECHANISM_INLINE_HPP
27
28 #include "runtime/safepointMechanism.hpp"
29 #include "runtime/safepoint.hpp"
30 #include "runtime/thread.hpp"
31
32
33 bool SafepointMechanism::global_poll() {
34 return SafepointSynchronize::do_call_back();
35 }
36
37 bool SafepointMechanism::poll() {
38 return global_poll();
39 }
40
41 void SafepointMechanism::block_if_requested(JavaThread *thread) {
42 if (global_poll()) {
43 SafepointSynchronize::block(thread);
44 }
45 }
46
47 #endif // SHARE_VM_RUNTIME_SAFEPOINTMECHANISM_INLINE_HPP
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_RUNTIME_SAFEPOINTMECHANISM_INLINE_HPP
26 #define SHARE_VM_RUNTIME_SAFEPOINTMECHANISM_INLINE_HPP
27
28 #include "runtime/safepointMechanism.hpp"
29 #include "runtime/safepoint.hpp"
30 #include "runtime/thread.inline.hpp"
31
32 bool SafepointMechanism::local_poll_armed(JavaThread* thread) {
33 const intptr_t poll_word = reinterpret_cast<intptr_t>(thread->get_polling_page());
34 return mask_bits_are_true(poll_word, poll_bit());
35 }
36
37 bool SafepointMechanism::global_poll() {
38 return SafepointSynchronize::do_call_back();
39 }
40
41 bool SafepointMechanism::local_poll(Thread* thread) {
42 // Mutexes can be taken but none JavaThread. These cannot have handshakes
43 // operation but they must stop for safepoints.
44 if (thread->is_Java_thread()) {
45 return local_poll_armed((JavaThread*)thread);
46 } else {
47 return global_poll();
48 }
49 }
50
51 bool SafepointMechanism::poll(Thread* thread) {
52 if (uses_thread_local_poll()) {
53 return local_poll(thread);
54 } else {
55 return global_poll();
56 }
57 }
58
59 void SafepointMechanism::block_if_requested_local_poll(JavaThread *thread) {
60 bool armed = local_poll_armed(thread); // load acquire, polling page -> op / global state
61 if(armed) {
62 // We could be armed for either a handshake operation or a safepoint
63 if (thread->has_handshake()) {
64 thread->handshake_process_by_self();
65 } else {
66 if (global_poll()) {
67 SafepointSynchronize::block(thread);
68 }
69 }
70 }
71 }
72
73 void SafepointMechanism::block_if_requested(JavaThread *thread) {
74 if (uses_thread_local_poll()) {
75 block_if_requested_local_poll(thread);
76 } else {
77 // If we don't have per thread poll this could a handshake or a safepoint
78 if (global_poll()) {
79 SafepointSynchronize::block(thread);
80 }
81 }
82 }
83
84 void SafepointMechanism::arm_local_poll(JavaThread* thread) {
85 thread->set_polling_page(poll_armed_value());
86 }
87
88 void SafepointMechanism::disarm_local_poll(JavaThread* thread) {
89 thread->set_polling_page(poll_disarmed_value());
90 }
91
92 #endif // SHARE_VM_RUNTIME_SAFEPOINTMECHANISM_INLINE_HPP
|