1 /*
2  * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
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_MUTEX_HPP
26 #define SHARE_VM_RUNTIME_MUTEX_HPP
27 
28 #include "memory/allocation.hpp"
29 #include "runtime/os.hpp"
30 #include "utilities/histogram.hpp"
31 
32 // The SplitWord construct allows us to colocate the contention queue
33 // (cxq) with the lock-byte.  The queue elements are ParkEvents, which are
34 // always aligned on 256-byte addresses - the least significant byte of
35 // a ParkEvent is always 0.  Colocating the lock-byte with the queue
36 // allows us to easily avoid what would otherwise be a race in lock()
37 // if we were to use two completely separate fields for the contention queue
38 // and the lock indicator.  Specifically, colocation renders us immune
39 // from the race where a thread might enqueue itself in the lock() slow-path
40 // immediately after the lock holder drops the outer lock in the unlock()
41 // fast-path.
42 //
43 // Colocation allows us to use a fast-path unlock() form that uses
44 // A MEMBAR instead of a CAS.  MEMBAR has lower local latency than CAS
45 // on many platforms.
46 //
47 // See:
48 // +  http://blogs.sun.com/dave/entry/biased_locking_in_hotspot
49 // +  http://blogs.sun.com/dave/resource/synchronization-public2.pdf
50 //
51 // Note that we're *not* using word-tearing the classic sense.
52 // The lock() fast-path will CAS the lockword and the unlock()
53 // fast-path will store into the lock-byte colocated within the lockword.
54 // We depend on the fact that all our reference platforms have
55 // coherent and atomic byte accesses.  More precisely, byte stores
56 // interoperate in a safe, sane, and expected manner with respect to
57 // CAS, ST and LDs to the full-word containing the byte.
58 // If you're porting HotSpot to a platform where that isn't the case
59 // then you'll want change the unlock() fast path from:
60 //    STB;MEMBAR #storeload; LDN
61 // to a full-word CAS of the lockword.
62 
63 
64 union SplitWord {   // full-word with separately addressable LSB
65   volatile intptr_t FullWord ;
66   volatile void * Address ;
67   volatile jbyte Bytes [sizeof(intptr_t)] ;
68 } ;
69 
70 class ParkEvent ;
71 
72 // See orderAccess.hpp.  We assume throughout the VM that mutex lock and
73 // try_lock do fence-lock-acquire, and that unlock does a release-unlock,
74 // *in that order*.  If their implementations change such that these
75 // assumptions are violated, a whole lot of code will break.
76 
77 // The default length of monitor name was originally chosen to be 64 to avoid
78 // false sharing. Now, PaddedMonitor is available for this purpose.
79 // TODO: Check if _name[MONITOR_NAME_LEN] should better get replaced by const char*.
80 static const int MONITOR_NAME_LEN = 64;
81 
82 class Monitor : public CHeapObj<mtSynchronizer> {
83 
84  public:
85   // A special lock: Is a lock where you are guaranteed not to block while you are
86   // holding it, i.e., no vm operation can happen, taking other (blocking) locks, etc.
87   // The rank 'access' is similar to 'special' and has the same restrictions on usage.
88   // It is reserved for locks that may be required in order to perform memory accesses
89   // that require special barriers, e.g. SATB GC barriers, that in turn uses locks.
90   // The rank 'tty' is also similar to 'special' and has the same restrictions.
91   // It is reserved for the tty_lock.
92   // Since memory accesses should be able to be performed pretty much anywhere
93   // in the code, that requires locks required for performing accesses being
94   // inherently a bit more special than even locks of the 'special' rank.
95   // NOTE: It is critical that the rank 'special' be the lowest (earliest)
96   // (except for "event" and "access") for the deadlock detection to work correctly.
97   // The rank native is only for use in Mutex's created by JVM_RawMonitorCreate,
98   // which being external to the VM are not subject to deadlock detection.
99   // The rank safepoint is used only for synchronization in reaching a
100   // safepoint and leaving a safepoint.  It is only used for the Safepoint_lock
101   // currently.  While at a safepoint no mutexes of rank safepoint are held
102   // by any thread.
103   // The rank named "leaf" is probably historical (and should
104   // be changed) -- mutexes of this rank aren't really leaf mutexes
105   // at all.
106   enum lock_types {
107        event,
108        access         = event          +   1,
109        tty            = access         +   2,
110        special        = tty            +   1,
111        suspend_resume = special        +   1,
112        vmweak         = suspend_resume +   2,
113        leaf           = vmweak         +   2,
114        safepoint      = leaf           +  10,
115        barrier        = safepoint      +   1,
116        nonleaf        = barrier        +   1,
117        max_nonleaf    = nonleaf        + 900,
118        native         = max_nonleaf    +   1
119   };
120 
121   // The WaitSet and EntryList linked lists are composed of ParkEvents.
122   // I use ParkEvent instead of threads as ParkEvents are immortal and
123   // type-stable, meaning we can safely unpark() a possibly stale
124   // list element in the unlock()-path.
125 
126  protected:                              // Monitor-Mutex metadata
127   SplitWord _LockWord ;                  // Contention queue (cxq) colocated with Lock-byte
128   Thread * volatile _owner;              // The owner of the lock
129                                          // Consider sequestering _owner on its own $line
130                                          // to aid future synchronization mechanisms.
131   ParkEvent * volatile _EntryList ;      // List of threads waiting for entry
132   ParkEvent * volatile _OnDeck ;         // heir-presumptive
133   volatile intptr_t _WaitLock [1] ;      // Protects _WaitSet
134   ParkEvent * volatile  _WaitSet ;       // LL of ParkEvents
135   volatile bool     _snuck;              // Used for sneaky locking (evil).
136   char _name[MONITOR_NAME_LEN];          // Name of mutex
137 
138   // Debugging fields for naming, deadlock detection, etc. (some only used in debug mode)
139 #ifndef PRODUCT
140   bool      _allow_vm_block;
141   debug_only(int _rank;)                 // rank (to avoid/detect potential deadlocks)
142   debug_only(Monitor * _next;)           // Used by a Thread to link up owned locks
143   debug_only(Thread* _last_owner;)       // the last thread to own the lock
144   debug_only(static bool contains(Monitor * locks, Monitor * lock);)
145   debug_only(static Monitor * get_least_ranked_lock(Monitor * locks);)
146   debug_only(Monitor * get_least_ranked_lock_besides_this(Monitor * locks);)
147 #endif
148 
149   void set_owner_implementation(Thread* owner)                        PRODUCT_RETURN;
150   void check_prelock_state     (Thread* thread, bool safepoint_check) PRODUCT_RETURN;
151   void check_block_state       (Thread* thread)                       PRODUCT_RETURN;
152 
153   // platform-dependent support code can go here (in os_<os_family>.cpp)
154  public:
155   enum {
156     _no_safepoint_check_flag    = true,
157     _allow_vm_block_flag        = true,
158     _as_suspend_equivalent_flag = true
159   };
160 
161   // Locks can be acquired with or without safepoint check.
162   // Monitor::lock and Monitor::lock_without_safepoint_check
163   // checks these flags when acquiring a lock to ensure
164   // consistent checking for each lock.
165   // A few existing locks will sometimes have a safepoint check and
166   // sometimes not, but these locks are set up in such a way to avoid deadlocks.
167   enum SafepointCheckRequired {
168     _safepoint_check_never,       // Monitors with this value will cause errors
169                                   // when acquired with a safepoint check.
170     _safepoint_check_sometimes,   // Certain locks are called sometimes with and
171                                   // sometimes without safepoint checks. These
172                                   // locks will not produce errors when locked.
173     _safepoint_check_always       // Causes error if locked without a safepoint
174                                   // check.
175   };
176 
177   NOT_PRODUCT(SafepointCheckRequired _safepoint_check_required;)
178 
179   enum WaitResults {
180     CONDVAR_EVENT,         // Wait returned because of condition variable notification
181     INTERRUPT_EVENT,       // Wait returned because waiting thread was interrupted
182     NUMBER_WAIT_RESULTS
183   };
184 
185  private:
186    int  TrySpin (Thread * Self) ;
187    int  TryLock () ;
188    int  TryFast () ;
189    int  AcquireOrPush (ParkEvent * ev) ;
190    void IUnlock (bool RelaxAssert) ;
191    void ILock (Thread * Self) ;
192    int  IWait (Thread * Self, jlong timo);
193    int  ILocked () ;
194 
195  protected:
196    static void ClearMonitor (Monitor * m, const char* name = NULL) ;
197    Monitor() ;
198 
199  public:
200   Monitor(int rank, const char *name, bool allow_vm_block = false,
201           SafepointCheckRequired safepoint_check_required = _safepoint_check_always);
202   ~Monitor();
203 
204   // Wait until monitor is notified (or times out).
205   // Defaults are to make safepoint checks, wait time is forever (i.e.,
206   // zero), and not a suspend-equivalent condition. Returns true if wait
207   // times out; otherwise returns false.
208   bool wait(bool no_safepoint_check = !_no_safepoint_check_flag,
209             long timeout = 0,
210             bool as_suspend_equivalent = !_as_suspend_equivalent_flag);
211   bool notify();
212   bool notify_all();
213 
214 
215   void lock(); // prints out warning if VM thread blocks
216   void lock(Thread *thread); // overloaded with current thread
217   void unlock();
is_locked() const218   bool is_locked() const                     { return _owner != NULL; }
219 
220   bool try_lock(); // Like lock(), but unblocking. It returns false instead
221 
222   // Lock without safepoint check. Should ONLY be used by safepoint code and other code
223   // that is guaranteed not to block while running inside the VM.
224   void lock_without_safepoint_check();
225   void lock_without_safepoint_check (Thread * Self) ;
226 
227   // Current owner - not not MT-safe. Can only be used to guarantee that
228   // the current running thread owns the lock
owner() const229   Thread* owner() const         { return _owner; }
230   bool owned_by_self() const;
231 
232   // Support for JVM_RawMonitorEnter & JVM_RawMonitorExit. These can be called by
233   // non-Java thread. (We should really have a RawMonitor abstraction)
234   void jvm_raw_lock();
235   void jvm_raw_unlock();
name() const236   const char *name() const                  { return _name; }
237 
238   void print_on_error(outputStream* st) const;
239 
240   #ifndef PRODUCT
241     void print_on(outputStream* st) const;
print() const242     void print() const                      { print_on(::tty); }
debug_only(int rank ()const{ return _rank; })243     debug_only(int    rank() const          { return _rank; })
244     bool   allow_vm_block()                 { return _allow_vm_block; }
245 
246     debug_only(Monitor *next()  const         { return _next; })
debug_only(void set_next (Monitor * next){ _next = next; })247     debug_only(void   set_next(Monitor *next) { _next = next; })
248   #endif
249 
250   void set_owner(Thread* owner) {
251   #ifndef PRODUCT
252     set_owner_implementation(owner);
253     debug_only(void verify_Monitor(Thread* thr));
254   #else
255     _owner = owner;
256   #endif
257   }
258 
259 };
260 
261 class PaddedMonitor : public Monitor {
262   enum {
263     CACHE_LINE_PADDING = (int)DEFAULT_CACHE_LINE_SIZE - (int)sizeof(Monitor),
264     PADDING_LEN = CACHE_LINE_PADDING > 0 ? CACHE_LINE_PADDING : 1
265   };
266   char _padding[PADDING_LEN];
267  public:
PaddedMonitor(int rank,const char * name,bool allow_vm_block=false,SafepointCheckRequired safepoint_check_required=_safepoint_check_always)268   PaddedMonitor(int rank, const char *name, bool allow_vm_block = false,
269                SafepointCheckRequired safepoint_check_required = _safepoint_check_always) :
270     Monitor(rank, name, allow_vm_block, safepoint_check_required) {};
271 };
272 
273 // Normally we'd expect Monitor to extend Mutex in the sense that a monitor
274 // constructed from pthreads primitives might extend a mutex by adding
275 // a condvar and some extra metadata.  In fact this was the case until J2SE7.
276 //
277 // Currently, however, the base object is a monitor.  Monitor contains all the
278 // logic for wait(), notify(), etc.   Mutex extends monitor and restricts the
279 // visibility of wait(), notify(), and notify_all().
280 //
281 // Another viable alternative would have been to have Monitor extend Mutex and
282 // implement all the normal mutex and wait()-notify() logic in Mutex base class.
283 // The wait()-notify() facility would be exposed via special protected member functions
284 // (e.g., _Wait() and _Notify()) in Mutex.  Monitor would extend Mutex and expose wait()
285 // as a call to _Wait().  That is, the public wait() would be a wrapper for the protected
286 // _Wait().
287 //
288 // An even better alternative is to simply eliminate Mutex:: and use Monitor:: instead.
289 // After all, monitors are sufficient for Java-level synchronization.   At one point in time
290 // there may have been some benefit to having distinct mutexes and monitors, but that time
291 // has past.
292 //
293 // The Mutex/Monitor design parallels that of Java-monitors, being based on
294 // thread-specific park-unpark platform-specific primitives.
295 
296 
297 class Mutex : public Monitor {      // degenerate Monitor
298  public:
299    Mutex(int rank, const char *name, bool allow_vm_block = false,
300          SafepointCheckRequired safepoint_check_required = _safepoint_check_always);
301   // default destructor
302  private:
notify()303    bool notify ()    { ShouldNotReachHere(); return false; }
notify_all()304    bool notify_all() { ShouldNotReachHere(); return false; }
wait(bool no_safepoint_check,long timeout,bool as_suspend_equivalent)305    bool wait (bool no_safepoint_check, long timeout, bool as_suspend_equivalent) {
306      ShouldNotReachHere() ;
307      return false ;
308    }
309 };
310 
311 class PaddedMutex : public Mutex {
312   enum {
313     CACHE_LINE_PADDING = (int)DEFAULT_CACHE_LINE_SIZE - (int)sizeof(Mutex),
314     PADDING_LEN = CACHE_LINE_PADDING > 0 ? CACHE_LINE_PADDING : 1
315   };
316   char _padding[PADDING_LEN];
317 public:
PaddedMutex(int rank,const char * name,bool allow_vm_block=false,SafepointCheckRequired safepoint_check_required=_safepoint_check_always)318   PaddedMutex(int rank, const char *name, bool allow_vm_block = false,
319               SafepointCheckRequired safepoint_check_required = _safepoint_check_always) :
320     Mutex(rank, name, allow_vm_block, safepoint_check_required) {};
321 };
322 
323 #endif // SHARE_VM_RUNTIME_MUTEX_HPP
324