# HG changeset patch # User minqi # Date 1364428999 25200 # Node ID 1b90c7607451b1e80ce75500178fa832927f253f # Parent b601102d00c80dc1d7508c2574f000c6a9d8e7d4 2178143: JVM crashes if the number of bound CPUs changed during runtime Summary: Supply a new flag -XX:+AssumeMP to workaround the problem. With the flag is turned on, assume VM run on MP platform so is_MP() will return true that sync calls will not skip away. Reviewed-by: dholmes, acorn, dcubed, jmasa Contributed-by: yumin.qi@oracle.com diff -r b601102d00c8 -r 1b90c7607451 src/share/vm/runtime/arguments.cpp --- a/src/share/vm/runtime/arguments.cpp Wed Mar 27 13:26:44 2013 -0700 +++ b/src/share/vm/runtime/arguments.cpp Wed Mar 27 17:03:19 2013 -0700 @@ -3325,6 +3325,13 @@ } check_deprecated_gcs(); check_deprecated_gc_flags(); + if (AssumeMP && !UseSerialGC) { + if (FLAG_IS_DEFAULT(ParallelGCThreads) && ParallelGCThreads == 1) { + warning("If the number of processors is expected to increase from one, then" + " you should configure the number of parallel GC threads appropriately" + " using -XX:ParallelGCThreads=N"); + } + } #else // INCLUDE_ALL_GCS assert(verify_serial_gc_flags(), "SerialGC unset"); #endif // INCLUDE_ALL_GCS diff -r b601102d00c8 -r 1b90c7607451 src/share/vm/runtime/globals.hpp --- a/src/share/vm/runtime/globals.hpp Wed Mar 27 13:26:44 2013 -0700 +++ b/src/share/vm/runtime/globals.hpp Wed Mar 27 17:03:19 2013 -0700 @@ -457,6 +457,9 @@ lp64_product(intx, ObjectAlignmentInBytes, 8, \ "Default object alignment in bytes, 8 is minimum") \ \ + product(bool, AssumeMP, false, \ + "Instruct the VM to assume multiple processors are available") \ + \ /* UseMembar is theoretically a temp flag used for memory barrier \ * removal testing. It was supposed to be removed before FCS but has \ * been re-added (see 6401008) */ \ diff -r b601102d00c8 -r 1b90c7607451 src/share/vm/runtime/os.hpp --- a/src/share/vm/runtime/os.hpp Wed Mar 27 13:26:44 2013 -0700 +++ b/src/share/vm/runtime/os.hpp Wed Mar 27 17:03:19 2013 -0700 @@ -180,7 +180,7 @@ // Interface for detecting multiprocessor system static inline bool is_MP() { assert(_processor_count > 0, "invalid processor count"); - return _processor_count > 1; + return _processor_count > 1 || AssumeMP; } static julong available_memory(); static julong physical_memory();