summaryrefslogtreecommitdiff
path: root/rts/RtsFlags.c
diff options
context:
space:
mode:
Diffstat (limited to 'rts/RtsFlags.c')
-rw-r--r--rts/RtsFlags.c54
1 files changed, 40 insertions, 14 deletions
diff --git a/rts/RtsFlags.c b/rts/RtsFlags.c
index bd60591f33..56f4420142 100644
--- a/rts/RtsFlags.c
+++ b/rts/RtsFlags.c
@@ -393,7 +393,7 @@ usage_text[] = {
#if defined(THREADED_RTS) && !defined(NOSMP)
" -N[<n>] Use <n> processors (default: 1, -N alone determines",
" the number of processors to use automatically)",
-" -Nmax[<n>] Use up to n processors automatically",
+" -maxN[<n>] Use up to <n> processors automatically",
" -qg[<n>] Use parallel GC only for generations >= <n>",
" (default: 0, -qg alone turns off parallel GC)",
" -qb[<n>] Use load-balancing in the parallel GC only for generations >= <n>",
@@ -846,14 +846,46 @@ error = rtsTrue;
break;
case 'm':
- OPTION_UNSAFE;
- RtsFlags.GcFlags.pcFreeHeap = atof(rts_argv[arg]+2);
+ /* Case for maxN feature request ticket #10728, it's a little
+ odd being so far from the N case. */
+#if !defined(NOSMP)
+ if (strncmp("maxN", &rts_argv[arg][1], 4) == 0) {
+ OPTION_SAFE;
+ THREADED_BUILD_ONLY(
+ int nNodes;
+ int proc = (int)getNumberOfProcessors();
+ OPTION_SAFE;
+
+ nNodes = strtol(rts_argv[arg]+5, (char **) NULL, 10);
+ if (nNodes > proc) { nNodes = proc; }
- if (RtsFlags.GcFlags.pcFreeHeap < 0 ||
- RtsFlags.GcFlags.pcFreeHeap > 100)
+ if (nNodes <= 0) {
+ errorBelch("bad value for -maxN");
+ error = rtsTrue;
+ }
+#if defined(PROFILING)
+ RtsFlags.ParFlags.nNodes = 1;
+#else
+ RtsFlags.ParFlags.nNodes = (nat)nNodes;
+#endif
+ ) break;
+ } else {
+#endif
+ OPTION_UNSAFE;
+ RtsFlags.GcFlags.pcFreeHeap = atof(rts_argv[arg]+2);
+
+ /* -m was allowing bad flags to go unreported */
+ if (RtsFlags.GcFlags.pcFreeHeap == 0.0 &&
+ rts_argv[arg][2] != '0')
bad_option( rts_argv[arg] );
- break;
+ if (RtsFlags.GcFlags.pcFreeHeap < 0 ||
+ RtsFlags.GcFlags.pcFreeHeap > 100)
+ bad_option( rts_argv[arg] );
+ break;
+#if !defined(NOSMP)
+ }
+#endif
case 'G':
OPTION_UNSAFE;
RtsFlags.GcFlags.generations =
@@ -1043,14 +1075,8 @@ error = rtsTrue;
int nNodes;
OPTION_SAFE; /* but see extra checks below... */
- // <=n feature request ticket #10728
- if (strncmp("max", &rts_argv[arg][2], 3) == 0) {
- int proc = (int)getNumberOfProcessors();
- nNodes = strtol(rts_argv[arg]+5, (char **) NULL, 10);
- if (nNodes > proc) { nNodes = proc; }
- } else {
- nNodes = strtol(rts_argv[arg]+2, (char **) NULL, 10);
- }
+ nNodes = strtol(rts_argv[arg]+2, (char **) NULL, 10);
+
if (nNodes <= 0) {
errorBelch("bad value for -N");
error = rtsTrue;