The following changes since commit 10accd7cf68af21ef4831528626a75ba7a06ce81: fix posix_fallocate() return value usage (2010-06-28 08:12:30 +0200) are available in the git repository at: git://git.kernel.dk/fio.git master Jens Axboe (2): crc32c-intel: replace SIGILL approach with cpuid Fix startdelay option with s/m/h/d postfix crc/crc32c-intel.c | 43 ++++++++++++++++++------------------------- fio.h | 2 +- options.c | 2 +- 3 files changed, 20 insertions(+), 27 deletions(-) --- Diff of recent changes: diff --git a/crc/crc32c-intel.c b/crc/crc32c-intel.c index fc106fa..77d6df4 100644 --- a/crc/crc32c-intel.c +++ b/crc/crc32c-intel.c @@ -74,37 +74,30 @@ uint32_t crc32c_intel(unsigned char const *data, unsigned long length) return crc; } -static void sig_ill(int sig) +static void do_cpuid(unsigned int *eax, unsigned int *ebx, unsigned int *ecx, + unsigned int *edx) { -} - -static void crc32c_test(void) -{ - unsigned char buf[4] = { 1, 2, 3, 4 }; - struct sigaction act; - - /* - * Check if hw accelerated crc32c is available - */ - memset(&act, 0, sizeof(act)); - act.sa_handler = sig_ill; - act.sa_flags = SA_RESETHAND; - sigaction(SIGILL, &act, NULL); - - (void) crc32c_intel(buf, sizeof(buf)); + int id = *eax; + + asm("movl %4, %%eax;" + "cpuid;" + "movl %%eax, %0;" + "movl %%ebx, %1;" + "movl %%ecx, %2;" + "movl %%edx, %3;" + : "=r" (*eax), "=r" (*ebx), "=r" (*ecx), "=r" (*edx) + : "r" (id) + : "eax", "ebx", "ecx", "edx"); } int crc32c_intel_works(void) { - if (!fork()) { - crc32c_test(); - exit(0); - } else { - int status; + unsigned int eax, ebx, ecx, edx; - wait(&status); - return !WIFSIGNALED(status); - } + eax = 1; + + do_cpuid(&eax, &ebx, &ecx, &edx); + return (ecx & (1 << 20)) != 0; } #endif /* ARCH_HAVE_SSE */ diff --git a/fio.h b/fio.h index bce81eb..e05d95a 100644 --- a/fio.h +++ b/fio.h @@ -208,7 +208,7 @@ struct thread_options { unsigned int thinktime_blocks; unsigned int fsync_blocks; unsigned int fdatasync_blocks; - unsigned int start_delay; + unsigned long start_delay; unsigned long long timeout; unsigned long long ramp_time; unsigned int overwrite; diff --git a/options.c b/options.c index de691eb..9230767 100644 --- a/options.c +++ b/options.c @@ -1218,7 +1218,7 @@ static struct fio_option options[FIO_MAX_OPTS] = { }, { .name = "startdelay", - .type = FIO_OPT_INT, + .type = FIO_OPT_STR_VAL_TIME, .off1 = td_var_offset(start_delay), .help = "Only start job when this period has passed", .def = "0", -- To unsubscribe from this list: send the line "unsubscribe fio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html