Merge branch 'master' of https://github.com/vincentkfu/fio
authorJens Axboe <axboe@kernel.dk>
Thu, 6 Feb 2020 19:17:25 +0000 (12:17 -0700)
committerJens Axboe <axboe@kernel.dk>
Thu, 6 Feb 2020 19:17:25 +0000 (12:17 -0700)
* 'master' of https://github.com/vincentkfu/fio:
  t/run-fio-tests: fix style issues
  gfio: add high/low priority latency results
  .gitignore: add some test programs
  stat: summary statistics for both high/low priority latencies

arch/arch-aarch64.h
arch/arch-ppc.h
arch/arch-x86-common.h
arch/arch.h
engines/io_uring.c
json.c
json.h
stat.c
t/io_uring.c

index de9b349be57ed8c8c96a527768071aa00fc55ae4..2a86cc5ab4d9b9cb1bef2dcf5d0aab24bfc38fb8 100644 (file)
@@ -8,18 +8,6 @@
 
 #define FIO_ARCH       (arch_aarch64)
 
-#define ARCH_HAVE_IOURING
-
-#ifndef __NR_sys_io_uring_setup
-#define __NR_sys_io_uring_setup                425
-#endif
-#ifndef __NR_sys_io_uring_enter
-#define __NR_sys_io_uring_enter                426
-#endif
-#ifndef __NR_sys_io_uring_register
-#define __NR_sys_io_uring_register     427
-#endif
-
 #define nop            do { __asm__ __volatile__ ("yield"); } while (0)
 #define read_barrier() do { __sync_synchronize(); } while (0)
 #define write_barrier()        do { __sync_synchronize(); } while (0)
index 46246baeec1bd69ea8e217b926d5c501541b017e..804d596aecc632cb27f547c90a5b2b997ef79b42 100644 (file)
 #define PPC_CNTLZL "cntlzw"
 #endif
 
-#define ARCH_HAVE_IOURING
-
-#ifndef __NR_sys_io_uring_setup
-#define __NR_sys_io_uring_setup                425
-#endif
-#ifndef __NR_sys_io_uring_enter
-#define __NR_sys_io_uring_enter                426
-#endif
-#ifndef __NR_sys_io_uring_register
-#define __NR_sys_io_uring_register     427
-#endif
-
 static inline int __ilog2(unsigned long bitmask)
 {
        int lz;
index 87925bdc2de90f0843dd1d0468d833898c49910d..f32835cce33bc4a74adeb5b9ad59f49515bceeeb 100644 (file)
@@ -3,16 +3,6 @@
 
 #include <string.h>
 
-#ifndef __NR_sys_io_uring_setup
-#define __NR_sys_io_uring_setup                425
-#endif
-#ifndef __NR_sys_io_uring_enter
-#define __NR_sys_io_uring_enter                426
-#endif
-#ifndef __NR_sys_io_uring_register
-#define __NR_sys_io_uring_register     427
-#endif
-
 static inline void cpuid(unsigned int op,
                         unsigned int *eax, unsigned int *ebx,
                         unsigned int *ecx, unsigned int *edx)
@@ -23,7 +13,6 @@ static inline void cpuid(unsigned int op,
 }
 
 #define ARCH_HAVE_INIT
-#define ARCH_HAVE_IOURING
 
 extern bool tsc_reliable;
 extern int arch_random;
index 0ec3f10feae03f25d372e39ae179fa9987e6dda2..30c0d2056d3eaa7abcffd5cd703f698d99790edd 100644 (file)
@@ -76,4 +76,32 @@ static inline int arch_init(char *envp[])
 }
 #endif
 
+#ifdef __alpha__
+/*
+ * alpha is the only exception, all other architectures
+ * have common numbers for new system calls.
+ */
+# ifndef __NR_io_uring_setup
+#  define __NR_io_uring_setup          535
+# endif
+# ifndef __NR_io_uring_enter
+#  define __NR_io_uring_enter          536
+# endif
+# ifndef __NR_io_uring_register
+#  define __NR_io_uring_register       537
+# endif
+#else /* !__alpha__ */
+# ifndef __NR_io_uring_setup
+#  define __NR_io_uring_setup          425
+# endif
+# ifndef __NR_io_uring_enter
+#  define __NR_io_uring_enter          426
+# endif
+# ifndef __NR_io_uring_register
+#  define __NR_io_uring_register       427
+# endif
+#endif
+
+#define ARCH_HAVE_IOURING
+
 #endif
index f1ffc7128ea60fcf334c55e6fdb34f2420c9d6b1..5e59f975c3c529ab735961763c49270ec63eb111 100644 (file)
@@ -191,7 +191,7 @@ static struct fio_option options[] = {
 static int io_uring_enter(struct ioring_data *ld, unsigned int to_submit,
                         unsigned int min_complete, unsigned int flags)
 {
-       return syscall(__NR_sys_io_uring_enter, ld->ring_fd, to_submit,
+       return syscall(__NR_io_uring_enter, ld->ring_fd, to_submit,
                        min_complete, flags, NULL, 0);
 }
 
@@ -548,7 +548,7 @@ static int fio_ioring_queue_init(struct thread_data *td)
                }
        }
 
-       ret = syscall(__NR_sys_io_uring_setup, depth, &p);
+       ret = syscall(__NR_io_uring_setup, depth, &p);
        if (ret < 0)
                return ret;
 
@@ -563,7 +563,7 @@ static int fio_ioring_queue_init(struct thread_data *td)
                if (setrlimit(RLIMIT_MEMLOCK, &rlim) < 0)
                        return -1;
 
-               ret = syscall(__NR_sys_io_uring_register, ld->ring_fd,
+               ret = syscall(__NR_io_uring_register, ld->ring_fd,
                                IORING_REGISTER_BUFFERS, ld->iovecs, depth);
                if (ret < 0)
                        return ret;
@@ -589,7 +589,7 @@ static int fio_ioring_register_files(struct thread_data *td)
                f->engine_pos = i;
        }
 
-       ret = syscall(__NR_sys_io_uring_register, ld->ring_fd,
+       ret = syscall(__NR_io_uring_register, ld->ring_fd,
                        IORING_REGISTER_FILES, ld->fds, td->o.nr_files);
        if (ret) {
 err:
diff --git a/json.c b/json.c
index e2819a65ba6a3236f7a3dba8a506eca07ddfb0fc..cd3d5d74db12aab06409e523b95d9eed3c013682 100644 (file)
--- a/json.c
+++ b/json.c
@@ -194,25 +194,31 @@ static int json_object_add_pair(struct json_object *obj, struct json_pair *pair)
        return 0;
 }
 
-int json_object_add_value_type(struct json_object *obj, const char *name, int type, ...)
+int json_object_add_value_type(struct json_object *obj, const char *name,
+                              const struct json_value *arg)
 {
        struct json_value *value;
        struct json_pair *pair;
-       va_list args;
        int ret;
 
-       va_start(args, type);
-       if (type == JSON_TYPE_STRING)
-               value = json_create_value_string(va_arg(args, char *));
-       else if (type == JSON_TYPE_INTEGER)
-               value = json_create_value_int(va_arg(args, long long));
-       else if (type == JSON_TYPE_FLOAT)
-               value = json_create_value_float(va_arg(args, double));
-       else if (type == JSON_TYPE_OBJECT)
-               value = json_create_value_object(va_arg(args, struct json_object *));
-       else
-               value = json_create_value_array(va_arg(args, struct json_array *));
-       va_end(args);
+       switch (arg->type) {
+       case JSON_TYPE_STRING:
+               value = json_create_value_string(arg->string);
+               break;
+       case JSON_TYPE_INTEGER:
+               value = json_create_value_int(arg->integer_number);
+               break;
+       case JSON_TYPE_FLOAT:
+               value = json_create_value_float(arg->float_number);
+               break;
+       case JSON_TYPE_OBJECT:
+               value = json_create_value_object(arg->object);
+               break;
+       default:
+       case JSON_TYPE_ARRAY:
+               value = json_create_value_array(arg->array);
+               break;
+       }
 
        if (!value)
                return ENOMEM;
@@ -230,24 +236,30 @@ int json_object_add_value_type(struct json_object *obj, const char *name, int ty
        return 0;
 }
 
-int json_array_add_value_type(struct json_array *array, int type, ...)
+int json_array_add_value_type(struct json_array *array,
+                             const struct json_value *arg)
 {
        struct json_value *value;
-       va_list args;
        int ret;
 
-       va_start(args, type);
-       if (type == JSON_TYPE_STRING)
-               value = json_create_value_string(va_arg(args, char *));
-       else if (type == JSON_TYPE_INTEGER)
-               value = json_create_value_int(va_arg(args, long long));
-       else if (type == JSON_TYPE_FLOAT)
-               value = json_create_value_float(va_arg(args, double));
-       else if (type == JSON_TYPE_OBJECT)
-               value = json_create_value_object(va_arg(args, struct json_object *));
-       else
-               value = json_create_value_array(va_arg(args, struct json_array *));
-       va_end(args);
+       switch (arg->type) {
+       case JSON_TYPE_STRING:
+               value = json_create_value_string(arg->string);
+               break;
+       case JSON_TYPE_INTEGER:
+               value = json_create_value_int(arg->integer_number);
+               break;
+       case JSON_TYPE_FLOAT:
+               value = json_create_value_float(arg->float_number);
+               break;
+       case JSON_TYPE_OBJECT:
+               value = json_create_value_object(arg->object);
+               break;
+       default:
+       case JSON_TYPE_ARRAY:
+               value = json_create_value_array(arg->array);
+               break;
+       }
 
        if (!value)
                return ENOMEM;
diff --git a/json.h b/json.h
index bcc712cd4d414b91aeb923ae69c3b9bcd8a4c0b9..09c2f18715c61911dfda6dacc860ef44475a9b3b 100644 (file)
--- a/json.h
+++ b/json.h
@@ -49,28 +49,124 @@ struct json_array *json_create_array(void);
 
 void json_free_object(struct json_object *obj);
 
-int json_object_add_value_type(struct json_object *obj, const char *name, int type, ...);
-#define json_object_add_value_int(obj, name, val) \
-       json_object_add_value_type((obj), name, JSON_TYPE_INTEGER, (long long) (val))
-#define json_object_add_value_float(obj, name, val) \
-       json_object_add_value_type((obj), name, JSON_TYPE_FLOAT, (val))
-#define json_object_add_value_string(obj, name, val) \
-       json_object_add_value_type((obj), name, JSON_TYPE_STRING, (val))
-#define json_object_add_value_object(obj, name, val) \
-       json_object_add_value_type((obj), name, JSON_TYPE_OBJECT, (val))
-#define json_object_add_value_array(obj, name, val) \
-       json_object_add_value_type((obj), name, JSON_TYPE_ARRAY, (val))
-int json_array_add_value_type(struct json_array *array, int type, ...);
-#define json_array_add_value_int(obj, val) \
-       json_array_add_value_type((obj), JSON_TYPE_INTEGER, (val))
-#define json_array_add_value_float(obj, val) \
-       json_array_add_value_type((obj), JSON_TYPE_FLOAT, (val))
-#define json_array_add_value_string(obj, val) \
-       json_array_add_value_type((obj), JSON_TYPE_STRING, (val))
-#define json_array_add_value_object(obj, val) \
-       json_array_add_value_type((obj), JSON_TYPE_OBJECT, (val))
-#define json_array_add_value_array(obj, val) \
-       json_array_add_value_type((obj), JSON_TYPE_ARRAY, (val))
+int json_object_add_value_type(struct json_object *obj, const char *name,
+                              const struct json_value *val);
+
+static inline int json_object_add_value_int(struct json_object *obj,
+                                           const char *name, long long val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_INTEGER,
+               .integer_number = val,
+       };
+
+       return json_object_add_value_type(obj, name, &arg);
+}
+
+static inline int json_object_add_value_float(struct json_object *obj,
+                                             const char *name, double val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_FLOAT,
+               .float_number = val,
+       };
+
+       return json_object_add_value_type(obj, name, &arg);
+}
+
+static inline int json_object_add_value_string(struct json_object *obj,
+                                              const char *name,
+                                              const char *val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_STRING,
+               .string = (char *)val,
+       };
+
+       return json_object_add_value_type(obj, name, &arg);
+}
+
+static inline int json_object_add_value_object(struct json_object *obj,
+                                              const char *name,
+                                              struct json_object *val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_OBJECT,
+               .object = val,
+       };
+
+       return json_object_add_value_type(obj, name, &arg);
+}
+
+static inline int json_object_add_value_array(struct json_object *obj,
+                                             const char *name,
+                                             struct json_array *val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_ARRAY,
+               .array = val,
+       };
+
+       return json_object_add_value_type(obj, name, &arg);
+}
+
+int json_array_add_value_type(struct json_array *array,
+                             const struct json_value *val);
+
+static inline int json_array_add_value_int(struct json_array *obj,
+                                          long long val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_INTEGER,
+               .integer_number = val,
+       };
+
+       return json_array_add_value_type(obj, &arg);
+}
+
+static inline int json_array_add_value_float(struct json_array *obj,
+                                            double val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_FLOAT,
+               .float_number = val,
+       };
+
+       return json_array_add_value_type(obj, &arg);
+}
+
+static inline int json_array_add_value_string(struct json_array *obj,
+                                             const char *val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_STRING,
+               .string = (char *)val,
+       };
+
+       return json_array_add_value_type(obj, &arg);
+}
+
+static inline int json_array_add_value_object(struct json_array *obj,
+                                             struct json_object *val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_OBJECT,
+               .object = val,
+       };
+
+       return json_array_add_value_type(obj, &arg);
+}
+
+static inline int json_array_add_value_array(struct json_array *obj,
+                                            struct json_array *val)
+{
+       struct json_value arg = {
+               .type = JSON_TYPE_ARRAY,
+               .array = val,
+       };
+
+       return json_array_add_value_type(obj, &arg);
+}
 
 #define json_array_last_value_object(obj) \
        (obj->values[obj->value_cnt - 1]->object)
diff --git a/stat.c b/stat.c
index 74580f743bf94636ae9dc33d970dfa682d699921..d8c01d14d594769df3c4e95a1451d9e767bb39af 100644 (file)
--- a/stat.c
+++ b/stat.c
@@ -954,7 +954,7 @@ void json_array_add_disk_util(struct disk_util_stat *dus,
        obj = json_create_object();
        json_array_add_value_object(array, obj);
 
-       json_object_add_value_string(obj, "name", dus->name);
+       json_object_add_value_string(obj, "name", (const char *)dus->name);
        json_object_add_value_int(obj, "read_ios", dus->s.ios[0]);
        json_object_add_value_int(obj, "write_ios", dus->s.ios[1]);
        json_object_add_value_int(obj, "read_merges", dus->s.merges[0]);
index c2e5e0989ee9a4f84096f95def112b38e1b41153..55b75f6ed9664858a7cc6155ce0c159a146a4479 100644 (file)
@@ -100,7 +100,7 @@ static int io_uring_register_buffers(struct submitter *s)
        if (do_nop)
                return 0;
 
-       return syscall(__NR_sys_io_uring_register, s->ring_fd,
+       return syscall(__NR_io_uring_register, s->ring_fd,
                        IORING_REGISTER_BUFFERS, s->iovecs, depth);
 }
 
@@ -117,20 +117,20 @@ static int io_uring_register_files(struct submitter *s)
                s->files[i].fixed_fd = i;
        }
 
-       return syscall(__NR_sys_io_uring_register, s->ring_fd,
+       return syscall(__NR_io_uring_register, s->ring_fd,
                        IORING_REGISTER_FILES, s->fds, s->nr_files);
 }
 
 static int io_uring_setup(unsigned entries, struct io_uring_params *p)
 {
-       return syscall(__NR_sys_io_uring_setup, entries, p);
+       return syscall(__NR_io_uring_setup, entries, p);
 }
 
 static int io_uring_enter(struct submitter *s, unsigned int to_submit,
                          unsigned int min_complete, unsigned int flags)
 {
-       return syscall(__NR_sys_io_uring_enter, s->ring_fd, to_submit,
-                       min_complete, flags, NULL, 0);
+       return syscall(__NR_io_uring_enter, s->ring_fd, to_submit, min_complete,
+                       flags, NULL, 0);
 }
 
 #ifndef CONFIG_HAVE_GETTID