summaryrefslogtreecommitdiff
path: root/dev-cpp/folly/files/folly-2022.08.15.00-liburing-headers.patch
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2022-08-15 20:28:49 +0100
committerV3n3RiX <venerix@koprulu.sector>2022-08-15 20:28:49 +0100
commit7255c5d5fcd8fcdd07d2791563dc43bf4e14cf3a (patch)
tree515e0e28ee6d81ce42725bd00b369ea0c1130d91 /dev-cpp/folly/files/folly-2022.08.15.00-liburing-headers.patch
parent1c3adf43f1b866276828623dd63f9e10d29421d3 (diff)
gentoo auto-resync : 15:08:2022 - 20:28:49
Diffstat (limited to 'dev-cpp/folly/files/folly-2022.08.15.00-liburing-headers.patch')
-rw-r--r--dev-cpp/folly/files/folly-2022.08.15.00-liburing-headers.patch102
1 files changed, 102 insertions, 0 deletions
diff --git a/dev-cpp/folly/files/folly-2022.08.15.00-liburing-headers.patch b/dev-cpp/folly/files/folly-2022.08.15.00-liburing-headers.patch
new file mode 100644
index 000000000000..f485ee2175fc
--- /dev/null
+++ b/dev-cpp/folly/files/folly-2022.08.15.00-liburing-headers.patch
@@ -0,0 +1,102 @@
+Fix build w/ older kernel headers.
+
+https://github.com/facebook/folly/commit/ae20efa9fa8cea81079df519d93dcbd1523c8dc3
+
+From ae20efa9fa8cea81079df519d93dcbd1523c8dc3 Mon Sep 17 00:00:00 2001
+From: Dylan Yudaken <dylany@fb.com>
+Date: Mon, 15 Aug 2022 08:32:53 -0700
+Subject: [PATCH] io_uring: support older versions of liburing
+
+Summary: Some #if to support older versions of liburing as reported here; https://github.com/facebook/folly/issues/1832
+
+Reviewed By: Orvid
+
+Differential Revision: D38650359
+
+fbshipit-source-id: eb78a7607eaaf151dc394cef72df3826c83fdfbc
+--- a/folly/experimental/io/IoUringBackend.cpp
++++ b/folly/experimental/io/IoUringBackend.cpp
+@@ -40,6 +40,16 @@ extern "C" FOLLY_ATTR_WEAK void eb_poll_loop_pre_hook(uint64_t* call_time);
+ extern "C" FOLLY_ATTR_WEAK void eb_poll_loop_post_hook(
+ uint64_t call_time, int ret);
+
++// there is no builtin macro we can use in liburing to tell what version we are
++// on or if features are supported. We will try and get this into the next
++// release but for now in the latest release there was also added multishot
++// accept - and so we can use it's pressence to suggest that we can safely use
++// newer features
++#if defined(IORING_ACCEPT_MULTISHOT)
++#define FOLLY_IO_URING_UP_TO_DATE 1
++#else
++#define FOLLY_IO_URING_UP_TO_DATE 0
++#endif
+ namespace folly {
+
+ namespace {
+@@ -296,11 +306,7 @@ std::chrono::time_point<std::chrono::steady_clock> getTimerExpireTime(
+ return now + us;
+ }
+
+-// there is no builtin macro we can use in liburing to tell if buffer rings are
+-// supported. However in the release that added them, there was also added
+-// multishot accept - and so we can use it's pressence to suggest that we can
+-// safely use provided buffer rings
+-#if defined(IORING_ACCEPT_MULTISHOT)
++#if FOLLY_IO_URING_UP_TO_DATE
+
+ class ProvidedBuffersBuffer {
+ public:
+@@ -738,7 +744,11 @@ IoUringBackend::IoUringBackend(Options options)
+ params_.flags |= IORING_SETUP_CQSIZE;
+ params_.cq_entries = options.capacity;
+ if (options_.taskRunCoop) {
++#if FOLLY_IO_URING_UP_TO_DATE
+ params_.flags |= IORING_SETUP_COOP_TASKRUN;
++#else
++ // this has no functional change so just leave it
++#endif
+ }
+
+ // poll SQ options
+@@ -1237,9 +1247,12 @@ int IoUringBackend::eb_event_base_loop(int flags) {
+ }
+
+ if (options_.registerRingFd) {
++ // registering just has some perf impact, so no need to fall back
++#if FOLLY_IO_URING_UP_TO_DATE
+ if (io_uring_register_ring_fd(&ioRing_) < 0) {
+ LOG(ERROR) << "unable to register io_uring ring fd";
+ }
++#endif
+ }
+ }
+
+@@ -1496,9 +1509,11 @@ void IoUringBackend::cancel(IoSqeBase* ioSqe) {
+ auto* sqe = get_sqe();
+ io_uring_prep_cancel64(sqe, (uint64_t)ioSqe, 0);
+ io_uring_sqe_set_data(sqe, (void*)&ioSqeNop); // just need something unique
++#if FOLLY_IO_URING_UP_TO_DATE
+ if (params_.features & IORING_FEAT_CQE_SKIP) {
+ sqe->flags |= IOSQE_CQE_SKIP_SUCCESS;
+ }
++#endif
+ }
+
+ int IoUringBackend::cancelOne(IoSqe* ioSqe) {
+@@ -1848,9 +1863,15 @@ void IoUringBackend::processFileOp(IoSqe* sqe, int64_t res) noexcept {
+ }
+
+ bool IoUringBackend::kernelHasNonBlockWriteFixes() const {
++#if FOLLY_IO_URING_UP_TO_DATE
+ // this was fixed in 5.18, which introduced linked file
+ // fixed in "io_uring: only wake when the correct events are set"
+ return params_.features & IORING_FEAT_LINKED_FILE;
++#else
++ // this indicates that sockets have to manually remove O_NONBLOCK
++ // which is a bit slower but shouldnt cause any functional changes
++ return false;
++#endif
+ }
+
+ namespace {
+