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<mtInternal> {
  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();
 218   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
 229   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();
 236   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;
 242     void print() const                      { print_on(::tty); }
 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; })
 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:
 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:
 303    bool notify ()    { ShouldNotReachHere(); return false; }
 304    bool notify_all() { ShouldNotReachHere(); return false; }
 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:
 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