8006997: ContendedPaddingWidth should be range-checked
Summary: Constrain between zero and 8K
Reviewed-by: dholmes, rbackman
Contributed-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
--- a/hotspot/src/share/vm/runtime/arguments.cpp Tue May 07 14:30:11 2013 -0700
+++ b/hotspot/src/share/vm/runtime/arguments.cpp Wed May 08 19:28:54 2013 -0400
@@ -2088,6 +2088,26 @@
#endif
}
+ // Need to limit the extent of the padding to reasonable size.
+ // 8K is well beyond the reasonable HW cache line size, even with the
+ // aggressive prefetching, while still leaving the room for segregating
+ // among the distinct pages.
+ if (ContendedPaddingWidth < 0 || ContendedPaddingWidth > 8192) {
+ jio_fprintf(defaultStream::error_stream(),
+ "ContendedPaddingWidth=" INTX_FORMAT " must be the between %d and %d\n",
+ ContendedPaddingWidth, 0, 8192);
+ status = false;
+ }
+
+ // Need to enforce the padding not to break the existing field alignments.
+ // It is sufficient to check against the largest type size.
+ if ((ContendedPaddingWidth % BytesPerLong) != 0) {
+ jio_fprintf(defaultStream::error_stream(),
+ "ContendedPaddingWidth=" INTX_FORMAT " must be the multiple of %d\n",
+ ContendedPaddingWidth, BytesPerLong);
+ status = false;
+ }
+
return status;
}