Recent changes (master)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The following changes since commit 15ce99bb71e7c289f62ddee94e0149f6c81549de:

  Merge branch 'master' of https://github.com/DamonPalovaara/fio (2021-08-20 20:58:42 -0600)

are available in the Git repository at:

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

for you to fetch changes up to fd70e3619c00bc9f7b2f80cadf3fdb348cbacf51:

  io_uring: don't clear recently set sqe->rw_flags (2021-08-26 10:50:05 -0600)

----------------------------------------------------------------
Jens Axboe (1):
      Merge branch 'wip-cxx' of https://github.com/tchaikov/fio

Kefu Chai (1):
      arch,lib/seqlock: implement seqlock with C++ atomic if compiled with C++

Niklas Cassel (3):
      io_uring: always initialize sqe->flags
      io_uring: fix misbehaving cmdprio_percentage option
      io_uring: don't clear recently set sqe->rw_flags

 arch/arch.h        | 20 ++++++++++++++++++++
 engines/io_uring.c |  7 +++++--
 lib/seqlock.h      |  4 ++++
 3 files changed, 29 insertions(+), 2 deletions(-)

---

Diff of recent changes:

diff --git a/arch/arch.h b/arch/arch.h
index a25779d4..fca003be 100644
--- a/arch/arch.h
+++ b/arch/arch.h
@@ -1,7 +1,11 @@
 #ifndef ARCH_H
 #define ARCH_H
 
+#ifdef __cplusplus
+#include <atomic>
+#else
 #include <stdatomic.h>
+#endif
 
 #include "../lib/types.h"
 
@@ -36,6 +40,21 @@ extern unsigned long arch_flags;
 
 #define ARCH_CPU_CLOCK_WRAPS
 
+#ifdef __cplusplus
+#define atomic_add(p, v)						\
+	std::atomic_fetch_add(p, (v))
+#define atomic_sub(p, v)						\
+	std::atomic_fetch_sub(p, (v))
+#define atomic_load_relaxed(p)					\
+	std::atomic_load_explicit(p,				\
+			     std::memory_order_relaxed)
+#define atomic_load_acquire(p)					\
+	std::atomic_load_explicit(p,				\
+			     std::memory_order_acquire)
+#define atomic_store_release(p, v)				\
+	std::atomic_store_explicit(p, (v),			\
+			     std::memory_order_release)
+#else
 #define atomic_add(p, v)					\
 	atomic_fetch_add((_Atomic typeof(*(p)) *)(p), v)
 #define atomic_sub(p, v)					\
@@ -49,6 +68,7 @@ extern unsigned long arch_flags;
 #define atomic_store_release(p, v)				\
 	atomic_store_explicit((_Atomic typeof(*(p)) *)(p), (v),	\
 			      memory_order_release)
+#endif
 
 /* IWYU pragma: begin_exports */
 #if defined(__i386__)
diff --git a/engines/io_uring.c b/engines/io_uring.c
index 9c091e37..b8d4cf91 100644
--- a/engines/io_uring.c
+++ b/engines/io_uring.c
@@ -234,6 +234,7 @@ static int fio_ioring_prep(struct thread_data *td, struct io_u *io_u)
 		sqe->flags = IOSQE_FIXED_FILE;
 	} else {
 		sqe->fd = f->fd;
+		sqe->flags = 0;
 	}
 
 	if (io_u->ddir == DDIR_READ || io_u->ddir == DDIR_WRITE) {
@@ -261,8 +262,9 @@ static int fio_ioring_prep(struct thread_data *td, struct io_u *io_u)
 				sqe->len = 1;
 			}
 		}
+		sqe->rw_flags = 0;
 		if (!td->o.odirect && o->uncached)
-			sqe->rw_flags = RWF_UNCACHED;
+			sqe->rw_flags |= RWF_UNCACHED;
 		if (o->nowait)
 			sqe->rw_flags |= RWF_NOWAIT;
 		if (ld->ioprio_class_set)
@@ -270,7 +272,6 @@ static int fio_ioring_prep(struct thread_data *td, struct io_u *io_u)
 		if (ld->ioprio_set)
 			sqe->ioprio |= td->o.ioprio;
 		sqe->off = io_u->offset;
-		sqe->rw_flags = 0;
 	} else if (ddir_sync(io_u->ddir)) {
 		sqe->ioprio = 0;
 		if (io_u->ddir == DDIR_SYNC_FILE_RANGE) {
@@ -383,6 +384,8 @@ static void fio_ioring_prio_prep(struct thread_data *td, struct io_u *io_u)
 	if (rand_between(&td->prio_state, 0, 99) < o->cmdprio_percentage) {
 		ld->sqes[io_u->index].ioprio = IOPRIO_CLASS_RT << IOPRIO_CLASS_SHIFT;
 		io_u->flags |= IO_U_F_PRIORITY;
+	} else {
+		ld->sqes[io_u->index].ioprio = 0;
 	}
 	return;
 }
diff --git a/lib/seqlock.h b/lib/seqlock.h
index 56f3e37d..ef3aa091 100644
--- a/lib/seqlock.h
+++ b/lib/seqlock.h
@@ -5,7 +5,11 @@
 #include "../arch/arch.h"
 
 struct seqlock {
+#ifdef __cplusplus
+	std::atomic<unsigned int> sequence;
+#else
 	volatile unsigned int sequence;
+#endif
 };
 
 static inline void seqlock_init(struct seqlock *s)



[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux