Move init code to libfio
authorJens Axboe <axboe@kernel.dk>
Thu, 11 Apr 2013 09:51:35 +0000 (11:51 +0200)
committerJens Axboe <axboe@kernel.dk>
Thu, 11 Apr 2013 09:51:35 +0000 (11:51 +0200)
More merge from gfio.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
fio.c
fio.h
libfio.c

diff --git a/fio.c b/fio.c
index 60261ffa9b26f2fd27e7cf88ff25a6a773d29f96..72c7c8709e5296043d6522df320c29c7163e2e98 100644 (file)
--- a/fio.c
+++ b/fio.c
 #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 2c8d9040e732a351d78ea9cfbf586045561941a5..04a9a9ac113067403c4a3e186657e8690c82e20f 100644 (file)
--- 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)
index 433fee4671559e0f1e4a5ad200770f0166c166fc..f7f13268ec3c5ad97ed80165acb1c8406dfb4a3c 100644 (file)
--- a/libfio.c
+++ b/libfio.c
 #include <string.h>
 #include <sys/types.h>
 #include <signal.h>
+#include <stdint.h>
+#include <locale.h>
+
 #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;
+}