Recent changes (master)

Jens Axboe
2019-01-29T13:00:08Z

The following changes since commit 4c085cf20f5c0d083aca18680c4323a1fb2b7a1f:

rate-submit: call ioengine post_init when starting workers (2019-01-24 13:58:00 -0700)

are available in the Git repository at:

git://git.kernel.dk/fio.git master

for you to fetch changes up to b532dd6d476679b08e4a56a60e8a7dd958779df9:

io_uring: sync with kernel (2019-01-28 11:42:20 -0700)

----------------------------------------------------------------
Jens Axboe (2):
Merge branch 'hygon-support' of https://github.com/hygonsoc/fio
io_uring: sync with kernel

hygonsoc (1):
Add Hygon SoC support to enable tsc_reliable feature

arch/arch-x86-common.h | 2 +-
engines/io_uring.c | 3 ++-
os/linux/io_uring.h | 9 ++++++++-
t/io_uring.c | 2 ++
4 files changed, 13 insertions(+), 3 deletions(-)

---

Diff of recent changes:

diff --git a/arch/arch-x86-common.h b/arch/arch-x86-common.h
index 7c07a61c..87925bdc 100644
--- a/arch/arch-x86-common.h
+++ b/arch/arch-x86-common.h
@@ -81,7 +81,7 @@ static inline void arch_init(char *envp[])
str[12] = '\0';
if (!strcmp(str, "GenuineIntel"))
arch_init_intel();
- else if (!strcmp(str, "AuthenticAMD"))
+ else if (!strcmp(str, "AuthenticAMD") || !strcmp(str, "HygonGenuine"))
arch_init_amd();
}

diff --git a/engines/io_uring.c b/engines/io_uring.c
index c759ec19..5279b1d0 100644
--- a/engines/io_uring.c
+++ b/engines/io_uring.c
@@ -340,7 +340,8 @@ static int fio_ioring_commit(struct thread_data *td)

read_barrier();
if (*ring->flags & IORING_SQ_NEED_WAKEUP)
- io_uring_enter(ld, ld->queued, 0, 0);
+ io_uring_enter(ld, ld->queued, 0,
+ IORING_ENTER_SQ_WAKEUP);
ld->queued = 0;
return 0;
}
diff --git a/os/linux/io_uring.h b/os/linux/io_uring.h
index 9bb71816..589b6402 100644
--- a/os/linux/io_uring.h
+++ b/os/linux/io_uring.h
@@ -11,6 +11,8 @@
#include <linux/fs.h>
#include <linux/types.h>

+#define IORING_MAX_ENTRIES 4096
+
/*
* IO submission data structure (Submission Queue Entry)
*/
@@ -25,6 +27,7 @@ struct io_uring_sqe {
union {
__kernel_rwf_t rw_flags;
__u32 fsync_flags;
+ __u16 poll_events;
};
__u64 user_data; /* data to be passed back at completion time */
union {
@@ -51,6 +54,8 @@ struct io_uring_sqe {
#define IORING_OP_FSYNC 3
#define IORING_OP_READ_FIXED 4
#define IORING_OP_WRITE_FIXED 5
+#define IORING_OP_POLL_ADD 6
+#define IORING_OP_POLL_REMOVE 7

/*
* sqe->fsync_flags
@@ -111,6 +116,7 @@ struct io_cqring_offsets {
* io_uring_enter(2) flags
*/
#define IORING_ENTER_GETEVENTS (1 << 0)
+#define IORING_ENTER_SQ_WAKEUP (1 << 1)

/*
* Passed in for io_uring_setup(2). Copied back with updated info on success
@@ -120,7 +126,8 @@ struct io_uring_params {
__u32 cq_entries;
__u32 flags;
__u16 sq_thread_cpu;
- __u16 resv[9];
+ __u16 sq_thread_idle;
+ __u16 resv[8];
struct io_sqring_offsets sq_off;
struct io_cqring_offsets cq_off;
};
diff --git a/t/io_uring.c b/t/io_uring.c
index da3b4d1f..9ded1590 100644
--- a/t/io_uring.c
+++ b/t/io_uring.c
@@ -315,6 +315,8 @@ submit:

if (to_wait)
flags = IORING_ENTER_GETEVENTS;
+ if (*ring->flags & IORING_SQ_NEED_WAKEUP)
+ flags |= IORING_ENTER_SQ_WAKEUP;
ret = io_uring_enter(s, to_submit, to_wait, flags);
s->calls++;
}