X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=options.c;h=94eacbaaebbb6e7ca448bfefe17b735db7c659cd;hp=839af0bffbdc5f3d4e2c5c6488ef6d7debadef4b;hb=d8602dd08170e11fb91dccde945bc527dbba57aa;hpb=e600f7f122d344358493f90e9114f9354c63fdfe diff --git a/options.c b/options.c index 839af0bf..94eacbaa 100644 --- a/options.c +++ b/options.c @@ -98,27 +98,46 @@ static int str_exitall_cb(void) return 0; } -static void fill_cpu_mask(os_cpu_mask_t *cpumask, int cpu) -{ #ifdef FIO_HAVE_CPU_AFFINITY +static int str_cpumask_cb(void *data, unsigned int *val) +{ + struct thread_data *td = data; unsigned int i; - CPU_ZERO(cpumask); + CPU_ZERO(&td->o.cpumask); for (i = 0; i < sizeof(int) * 8; i++) - if ((1 << i) & cpu) - CPU_SET(i, cpumask); -#endif + if ((1 << i) & *val) + CPU_SET(*val, &td->o.cpumask); + + td->o.cpumask_set = 1; + return 0; } -static int str_cpumask_cb(void *data, unsigned int *val) +static int str_cpus_allowed_cb(void *data, const char *input) { struct thread_data *td = data; + char *cpu, *str, *p; + + CPU_ZERO(&td->o.cpumask); + + p = str = strdup(input); - fill_cpu_mask(&td->o.cpumask, *val); + strip_blank_front(&str); + strip_blank_end(str); + + while ((cpu = strsep(&str, ",")) != NULL) { + if (!strlen(cpu)) + break; + CPU_SET(atoi(cpu), &td->o.cpumask); + } + + free(p); td->o.cpumask_set = 1; + exit(0); return 0; } +#endif static int str_fst_cb(void *data, const char *str) { @@ -294,6 +313,9 @@ static struct fio_option options[] = { { .ival = "splice", .help = "splice/vmsplice based IO", }, + { .ival = "netsplice", + .help = "splice/vmsplice to/from the network", + }, #endif #ifdef FIO_HAVE_SGIO { .ival = "sg", @@ -775,6 +797,12 @@ static struct fio_option options[] = { .cb = str_cpumask_cb, .help = "CPU affinity mask", }, + { + .name = "cpus_allowed", + .type = FIO_OPT_STR, + .cb = str_cpus_allowed_cb, + .help = "Set CPUs allowed", + }, #endif { .name = "end_fsync",