This gets rid of oddities such as:
  perf bench futex hash -t -4
  perf: calloc: Cannot allocate memory
Runtime (and many more) are equally busted, i.e. run for bogus amounts of
time. Just use the abs, instead of, for example errorring out.
Committer note:
After the patch:
  $ perf bench futex hash -t -4
  # Running 'futex/hash' benchmark:
  Run summary [PID 10178]: 4 threads, each operating on 1024 [private] futexes for 10 secs.
  [thread  0] futexes: 0x34f9fa0 ... 0x34faf9c [ 
4702208 ops/sec ]
  [thread  1] futexes: 0x34fb140 ... 0x34fc13c [ 
4707020 ops/sec ]
  [thread  2] futexes: 0x34fc2e0 ... 0x34fd2dc [ 
4711526 ops/sec ]
  [thread  3] futexes: 0x34fd480 ... 0x34fe47c [ 
4709683 ops/sec ]
  Averaged 
4707609 operations/sec (+- 0.04%), total secs = 10
  $
Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Link: http://lkml.kernel.org/r/1477342613-9938-3-git-send-email-dave@stgolabs.net
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
 
        }
 
        ncpus = sysconf(_SC_NPROCESSORS_ONLN);
+       nsecs = futexbench_sanitize_numeric(nsecs);
+       nfutexes = futexbench_sanitize_numeric(nfutexes);
 
        sigfillset(&act.sa_mask);
        act.sa_sigaction = toggle_done;
 
        if (!nthreads) /* default to the number of CPUs */
                nthreads = ncpus;
+       else
+               nthreads = futexbench_sanitize_numeric(nthreads);
 
        worker = calloc(nthreads, sizeof(*worker));
        if (!worker)
 
                goto err;
 
        ncpus = sysconf(_SC_NPROCESSORS_ONLN);
+       nsecs = futexbench_sanitize_numeric(nsecs);
 
        sigfillset(&act.sa_mask);
        act.sa_sigaction = toggle_done;
 
        if (!nthreads)
                nthreads = ncpus;
+       else
+               nthreads = futexbench_sanitize_numeric(nthreads);
 
        worker = calloc(nthreads, sizeof(*worker));
        if (!worker)
 
 
        if (!nthreads)
                nthreads = ncpus;
+       else
+               nthreads = futexbench_sanitize_numeric(nthreads);
 
        worker = calloc(nthreads, sizeof(*worker));
        if (!worker)
 
        sigaction(SIGINT, &act, NULL);
 
        ncpus = sysconf(_SC_NPROCESSORS_ONLN);
+       nwaking_threads = futexbench_sanitize_numeric(nwaking_threads);
+
        if (!nblocked_threads)
                nblocked_threads = ncpus;
+       else
+               nblocked_threads = futexbench_sanitize_numeric(nblocked_threads);
 
        /* some sanity checks */
        if (nwaking_threads > nblocked_threads || !nwaking_threads)
 
        }
 
        ncpus = sysconf(_SC_NPROCESSORS_ONLN);
+       nwakes = futexbench_sanitize_numeric(nwakes);
 
        sigfillset(&act.sa_mask);
        act.sa_sigaction = toggle_done;
 
        if (!nthreads)
                nthreads = ncpus;
+       else
+               nthreads = futexbench_sanitize_numeric(nthreads);
 
        worker = calloc(nthreads, sizeof(*worker));
        if (!worker)
 
 #ifndef _FUTEX_H
 #define _FUTEX_H
 
+#include <stdlib.h>
 #include <unistd.h>
 #include <sys/syscall.h>
 #include <sys/types.h>
 }
 #endif
 
+/* User input sanitation */
+#define futexbench_sanitize_numeric(__n) abs((__n))
+
 #endif /* _FUTEX_H */