From a569b45f68ebaa93fbbaca424dc827f4bbc5d655 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Thu, 11 Apr 2013 11:51:35 +0200 Subject: [PATCH] Move init code to libfio More merge from gfio. Signed-off-by: Jens Axboe --- fio.c | 67 +------------------------------------------------- fio.h | 4 +++ libfio.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 66 deletions(-) diff --git a/fio.c b/fio.c index 60261ffa..72c7c870 100644 --- a/fio.c +++ b/fio.c @@ -28,75 +28,10 @@ #include "fio.h" #include "smalloc.h" -uintptr_t page_mask = 0; -uintptr_t page_size = 0; - -static int endian_check(void) -{ - union { - uint8_t c[8]; - uint64_t v; - } u; - int le = 0, be = 0; - - u.v = 0x12; - if (u.c[7] == 0x12) - be = 1; - else if (u.c[0] == 0x12) - le = 1; - -#if defined(CONFIG_LITTLE_ENDIAN) - if (be) - return 1; -#elif defined(CONFIG_BIG_ENDIAN) - if (le) - return 1; -#else - return 1; -#endif - - if (!le && !be) - return 1; - - return 0; -} - int main(int argc, char *argv[], char *envp[]) { - long ps; - - if (endian_check()) { - log_err("fio: endianness settings appear wrong.\n"); - log_err("fio: please report this to fio@vger.kernel.org\n"); - return 1; - } - -#if !defined(CONFIG_GETTIMEOFDAY) && !defined(CONFIG_CLOCK_GETTIME) -#error "No available clock source!" -#endif - - arch_init(envp); - - sinit(); - - /* - * We need locale for number printing, if it isn't set then just - * go with the US format. - */ - if (!getenv("LC_NUMERIC")) - setlocale(LC_NUMERIC, "en_US"); - - ps = sysconf(_SC_PAGESIZE); - if (ps < 0) { - log_err("Failed to get page size\n"); + if (initialize_fio(envp)) return 1; - } - - page_size = ps; - page_mask = ps - 1; - - fio_keywords_init(); - if (parse_options(argc, argv)) return 1; diff --git a/fio.h b/fio.h index 2c8d9040..04a9a9ac 100644 --- a/fio.h +++ b/fio.h @@ -445,6 +445,10 @@ extern void add_job_opts(const char **); extern char *num2str(unsigned long, int, int, int, int); extern int ioengine_load(struct thread_data *); +extern uintptr_t page_mask; +extern uintptr_t page_size; +extern int initialize_fio(char *envp[]); + #define FIO_GETOPT_JOB 0x89000000 #define FIO_GETOPT_IOENGINE 0x98000000 #define FIO_NR_OPTIONS (FIO_MAX_OPTS + 128) diff --git a/libfio.c b/libfio.c index 433fee46..f7f13268 100644 --- a/libfio.c +++ b/libfio.c @@ -25,7 +25,12 @@ #include #include #include +#include +#include + #include "fio.h" +#include "smalloc.h" +#include "os/os.h" /* * Just expose an empty list, if the OS does not support disk util stats @@ -36,6 +41,9 @@ FLIST_HEAD(disk_list); unsigned long arch_flags = 0; +uintptr_t page_mask = 0; +uintptr_t page_size = 0; + static const char *fio_os_strings[os_nr] = { "Invalid", "Linux", @@ -195,4 +203,70 @@ void fio_terminate_threads(int group_id) } } +static int endian_check(void) +{ + union { + uint8_t c[8]; + uint64_t v; + } u; + int le = 0, be = 0; + + u.v = 0x12; + if (u.c[7] == 0x12) + be = 1; + else if (u.c[0] == 0x12) + le = 1; + +#if defined(CONFIG_LITTLE_ENDIAN) + if (be) + return 1; +#elif defined(CONFIG_BIG_ENDIAN) + if (le) + return 1; +#else + return 1; +#endif + + if (!le && !be) + return 1; + + return 0; +} + +int initialize_fio(char *envp[]) +{ + long ps; + + if (endian_check()) { + log_err("fio: endianness settings appear wrong.\n"); + log_err("fio: please report this to fio@vger.kernel.org\n"); + return 1; + } + +#if !defined(CONFIG_GETTIMEOFDAY) && !defined(CONFIG_CLOCK_GETTIME) +#error "No available clock source!" +#endif + + arch_init(envp); + + sinit(); + + /* + * We need locale for number printing, if it isn't set then just + * go with the US format. + */ + if (!getenv("LC_NUMERIC")) + setlocale(LC_NUMERIC, "en_US"); + + ps = sysconf(_SC_PAGESIZE); + if (ps < 0) { + log_err("Failed to get page size\n"); + return 1; + } + + page_size = ps; + page_mask = ps - 1; + fio_keywords_init(); + return 0; +} -- 2.25.1