Index: libcfa/configure
===================================================================
--- libcfa/configure	(revision d9c2284a9d9f81d61d2fa67b461262ba1be38950)
+++ libcfa/configure	(revision 5751a56c72a73cfd724a07d14af375206ec3dcc6)
@@ -677,5 +677,4 @@
 AMDEP_FALSE
 AMDEP_TRUE
-am__quote
 am__include
 DEPDIR
@@ -784,5 +783,6 @@
 PACKAGE_NAME
 PATH_SEPARATOR
-SHELL'
+SHELL
+am__quote'
 ac_subst_files=''
 ac_user_opts='
@@ -2054,4 +2054,50 @@
 
 } # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  as_decl_name=`echo $2|sed 's/ *(.*//'`
+  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+  (void) $as_decl_use;
+#else
+  (void) $as_decl_name;
+#endif
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
@@ -2486,5 +2532,5 @@
 
 
-am__api_version='1.15'
+am__api_version='1.16'
 
 # Find a good install program.  We prefer a C program (faster),
@@ -2963,6 +3009,6 @@
 # For better backward compatibility.  To be removed once Automake 1.9.x
 # dies out for good.  For more background, see:
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
 mkdir_p='$(MKDIR_P)'
 
@@ -3015,5 +3061,5 @@
 
 You can download and install GNU coreutils to get an 'rm' implementation
-that behaves properly: <http://www.gnu.org/software/coreutils/>.
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
 
 If you want to complete the configuration process using your problematic
@@ -3399,43 +3445,43 @@
 ac_config_commands="$ac_config_commands depfiles"
 
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
+$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; }
+cat > confinc.mk << 'END'
 am__doit:
-	@echo this is the am__doit target
+	@echo this is the am__doit target >confinc.out
 .PHONY: am__doit
 END
-# If we don't find an include directive, just comment out the code.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
-$as_echo_n "checking for style of include used by $am_make... " >&6; }
 am__include="#"
 am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from 'make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
-  am__include=include
-  am__quote=
-  _am_result=GNU
-  ;;
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+  { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
+   (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+  case $?:`cat confinc.out 2>/dev/null` in #(
+  '0:this is the am__doit target') :
+    case $s in #(
+  BSD) :
+    am__include='.include' am__quote='"' ;; #(
+  *) :
+    am__include='include' am__quote='' ;;
+esac ;; #(
+  *) :
+     ;;
 esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   case `$am_make -s -f confmf 2> /dev/null` in #(
-   *the\ am__doit\ target*)
-     am__include=.include
-     am__quote="\""
-     _am_result=BSD
-     ;;
-   esac
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
-$as_echo "$_am_result" >&6; }
-rm -f confinc confmf
+  if test "$am__include" != "#"; then
+    _am_result="yes ($s style)"
+    break
+  fi
+done
+rm -f confinc.* confmf.*
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
+$as_echo "${_am_result}" >&6; }
 
 # Check whether --enable-dependency-tracking was given.
@@ -5941,5 +5987,5 @@
 
 : ${AR=ar}
-: ${AR_FLAGS=cru}
+: ${AR_FLAGS=cr}
 
 
@@ -6442,9 +6488,6 @@
     # Now try to grab the symbols.
     nlist=conftest.nm
-    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
-  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s "$nlist"; then
+    $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&5
+    if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&5 && test -s "$nlist"; then
       # Try sorting and uniquifying the output.
       if sort "$nlist" | uniq > "$nlist"T; then
@@ -7665,6 +7708,6 @@
       echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
       $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
-      echo "$AR cru libconftest.a conftest.o" >&5
-      $AR cru libconftest.a conftest.o 2>&5
+      echo "$AR cr libconftest.a conftest.o" >&5
+      $AR cr libconftest.a conftest.o 2>&5
       echo "$RANLIB libconftest.a" >&5
       $RANLIB libconftest.a 2>&5
@@ -8792,4 +8835,10 @@
 	lt_prog_compiler_wl='-Wl,'
 	lt_prog_compiler_pic='-KPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # flang / f18. f95 an alias for gfortran or flang on Debian
+      flang* | f18* | f95*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fPIC'
 	lt_prog_compiler_static='-static'
         ;;
@@ -13154,5 +13203,5 @@
       # what "hidden" libraries, object files and flags are used when
       # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"'
 
     else
@@ -13646,5 +13695,5 @@
             # from the output so that they don't get included in the library
             # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
             ;;
           *)
@@ -13711,5 +13760,5 @@
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
           *)
@@ -14050,5 +14099,5 @@
 	      # what "hidden" libraries, object files and flags are used when
 	      # linking a shared library.
-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"'
 
 	    else
@@ -14134,5 +14183,5 @@
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"'
 	      else
 	        # g++ 2.7 appears to require '-G' NOT '-shared' on this
@@ -14145,5 +14194,5 @@
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"'
 	      fi
 
@@ -16962,4 +17011,10 @@
 
 
+
+
+#io_uring 5.4 and earlier uses defines
+#io_uring 5.5 uses enum values
+#io_uring 5.6 and later uses probes
+
 for ac_header in linux/io_uring.h
 do :
@@ -16969,4 +17024,275 @@
 #define HAVE_LINUX_IO_URING_H 1
 _ACEOF
+
+	$as_echo "#define CFA_HAVE_LINUX_IO_URING_H 1" >>confdefs.h
+
+	# AC_CHECK_HEADER([liburing.h], [
+	# 	AC_CHECK_LIB([uring], [io_uring_get_probe])
+	# ])
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_NOP" "ac_cv_have_decl_IORING_OP_NOP" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_NOP" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_NOP 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_READV" "ac_cv_have_decl_IORING_OP_READV" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_READV" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_READV 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_WRITEV" "ac_cv_have_decl_IORING_OP_WRITEV" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_WRITEV" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_WRITEV 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_FSYNC" "ac_cv_have_decl_IORING_OP_FSYNC" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_FSYNC" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_FSYNC 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_READ_FIXED" "ac_cv_have_decl_IORING_OP_READ_FIXED" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_READ_FIXED" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_READ_FIXED 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_WRITE_FIXED" "ac_cv_have_decl_IORING_OP_WRITE_FIXED" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_WRITE_FIXED" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_WRITE_FIXED 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_POLL_ADD" "ac_cv_have_decl_IORING_OP_POLL_ADD" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_POLL_ADD" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_POLL_ADD 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_POLL_REMOVE" "ac_cv_have_decl_IORING_OP_POLL_REMOVE" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_POLL_REMOVE" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_POLL_REMOVE 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_SYNC_FILE_RANGE" "ac_cv_have_decl_IORING_OP_SYNC_FILE_RANGE" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_SYNC_FILE_RANGE" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_SYNC_FILE_RANGE 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_SENDMSG" "ac_cv_have_decl_IORING_OP_SENDMSG" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_SENDMSG" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_SENDMSG 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_RECVMSG" "ac_cv_have_decl_IORING_OP_RECVMSG" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_RECVMSG" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_RECVMSG 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_TIMEOUT" "ac_cv_have_decl_IORING_OP_TIMEOUT" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_TIMEOUT" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_TIMEOUT 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_TIMEOUT_REMOVE" "ac_cv_have_decl_IORING_OP_TIMEOUT_REMOVE" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_TIMEOUT_REMOVE" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_TIMEOUT_REMOVE 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_ACCEPT" "ac_cv_have_decl_IORING_OP_ACCEPT" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_ACCEPT" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_ACCEPT 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_ASYNC_CANCEL" "ac_cv_have_decl_IORING_OP_ASYNC_CANCEL" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_ASYNC_CANCEL" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_ASYNC_CANCEL 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_LINK_TIMEOUT" "ac_cv_have_decl_IORING_OP_LINK_TIMEOUT" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_LINK_TIMEOUT" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_LINK_TIMEOUT 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_CONNECT" "ac_cv_have_decl_IORING_OP_CONNECT" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_CONNECT" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_CONNECT 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_FALLOCATE" "ac_cv_have_decl_IORING_OP_FALLOCATE" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_FALLOCATE" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_FALLOCATE 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_OPENAT" "ac_cv_have_decl_IORING_OP_OPENAT" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_OPENAT" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_OPENAT 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_CLOSE" "ac_cv_have_decl_IORING_OP_CLOSE" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_CLOSE" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_CLOSE 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_FILES_UPDATE" "ac_cv_have_decl_IORING_OP_FILES_UPDATE" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_FILES_UPDATE" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_FILES_UPDATE 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_STATX" "ac_cv_have_decl_IORING_OP_STATX" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_STATX" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_STATX 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_READ" "ac_cv_have_decl_IORING_OP_READ" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_READ" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_READ 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_WRITE" "ac_cv_have_decl_IORING_OP_WRITE" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_WRITE" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_WRITE 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_FADVISE" "ac_cv_have_decl_IORING_OP_FADVISE" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_FADVISE" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_FADVISE 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_MADVISE" "ac_cv_have_decl_IORING_OP_MADVISE" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_MADVISE" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_MADVISE 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_SEND" "ac_cv_have_decl_IORING_OP_SEND" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_SEND" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_SEND 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_RECV" "ac_cv_have_decl_IORING_OP_RECV" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_RECV" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_RECV 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_OPENAT2" "ac_cv_have_decl_IORING_OP_OPENAT2" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_OPENAT2" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_OPENAT2 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_EPOLL_CTL" "ac_cv_have_decl_IORING_OP_EPOLL_CTL" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_EPOLL_CTL" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_EPOLL_CTL 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_SPLICE" "ac_cv_have_decl_IORING_OP_SPLICE" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_SPLICE" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_SPLICE 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_PROVIDE_BUFFERS" "ac_cv_have_decl_IORING_OP_PROVIDE_BUFFERS" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_PROVIDE_BUFFERS" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_PROVIDE_BUFFERS 1" >>confdefs.h
+
+fi
+
+
+		ac_fn_c_check_decl "$LINENO" "IORING_OP_REMOVE_BUFFER" "ac_cv_have_decl_IORING_OP_REMOVE_BUFFER" "#include <linux/io_uring.h>
+"
+if test "x$ac_cv_have_decl_IORING_OP_REMOVE_BUFFER" = xyes; then :
+  $as_echo "#define CFA_HAVE_IORING_OP_REMOVE_BUFFER 1" >>confdefs.h
+
+fi
+
+
 
 fi
@@ -17728,5 +18054,5 @@
 # INIT-COMMANDS
 #
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
 
 
@@ -18724,27 +19050,33 @@
   # are listed without --file.  Let's play safe and only enable the eval
   # if we detect the quoting.
-  case $CONFIG_FILES in
-  *\'*) eval set x "$CONFIG_FILES" ;;
-  *)   set x $CONFIG_FILES ;;
-  esac
+  # TODO: see whether this extra hack can be removed once we start
+  # requiring Autoconf 2.70 or later.
+  case $CONFIG_FILES in #(
+  *\'*) :
+    eval set x "$CONFIG_FILES" ;; #(
+  *) :
+    set x $CONFIG_FILES ;; #(
+  *) :
+     ;;
+esac
   shift
-  for mf
+  # Used to flag and report bootstrapping failures.
+  am_rc=0
+  for am_mf
   do
     # Strip MF so we end up with the name of the file.
-    mf=`echo "$mf" | sed -e 's/:.*$//'`
-    # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named 'Makefile.in', but
-    # some people rename them; so instead we look at the file content.
-    # Grep'ing the first line is not enough: some people post-process
-    # each Makefile.in and add a new line on top of each file to say so.
-    # Grep'ing the whole file is not good either: AIX grep has a line
+    am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile which includes
+    # dependency-tracking related rules and includes.
+    # Grep'ing the whole file directly is not great: AIX grep has a line
     # limit of 2048, but all sed's we know have understand at least 4000.
-    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-      dirpart=`$as_dirname -- "$mf" ||
-$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$mf" : 'X\(//\)[^/]' \| \
-	 X"$mf" : 'X\(//\)$' \| \
-	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$mf" |
+    sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+      || continue
+    am_dirpart=`$as_dirname -- "$am_mf" ||
+$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$am_mf" : 'X\(//\)[^/]' \| \
+	 X"$am_mf" : 'X\(//\)$' \| \
+	 X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$am_mf" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
 	    s//\1/
@@ -18764,51 +19096,46 @@
 	  }
 	  s/.*/./; q'`
-    else
-      continue
-    fi
-    # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running 'make'.
-    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-    test -z "$DEPDIR" && continue
-    am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "$am__include" && continue
-    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # Find all dependency output files, they are included files with
-    # $(DEPDIR) in their names.  We invoke sed twice because it is the
-    # simplest approach to changing $(DEPDIR) to its actual value in the
-    # expansion.
-    for file in `sed -n "
-      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
-      # Make sure the directory exists.
-      test -f "$dirpart/$file" && continue
-      fdir=`$as_dirname -- "$file" ||
-$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$file" : 'X\(//\)[^/]' \| \
-	 X"$file" : 'X\(//\)$' \| \
-	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+    am_filepart=`$as_basename -- "$am_mf" ||
+$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$am_mf" : 'X\(//\)$' \| \
+	 X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$am_mf" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
 	    s//\1/
 	    q
 	  }
-	  /^X\(\/\/\)[^/].*/{
+	  /^X\/\(\/\/\)$/{
 	    s//\1/
 	    q
 	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
+	  /^X\/\(\/\).*/{
 	    s//\1/
 	    q
 	  }
 	  s/.*/./; q'`
-      as_dir=$dirpart/$fdir; as_fn_mkdir_p
-      # echo "creating $dirpart/$file"
-      echo '# dummy' > "$dirpart/$file"
-    done
+    { echo "$as_me:$LINENO: cd "$am_dirpart" \
+      && sed -e '/# am--include-marker/d' "$am_filepart" \
+        | $MAKE -f - am--depfiles" >&5
+   (cd "$am_dirpart" \
+      && sed -e '/# am--include-marker/d' "$am_filepart" \
+        | $MAKE -f - am--depfiles) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } || am_rc=$?
   done
+  if test $am_rc -ne 0; then
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "Something went wrong bootstrapping makefile fragments
+    for automatic dependency tracking.  Try re-running configure with the
+    '--disable-dependency-tracking' option to at least be able to build
+    the package (albeit without support for automatic dependency tracking).
+See \`config.log' for more details" "$LINENO" 5; }
+  fi
+  { am_dirpart=; unset am_dirpart;}
+  { am_filepart=; unset am_filepart;}
+  { am_mf=; unset am_mf;}
+  { am_rc=; unset am_rc;}
+  rm -f conftest-deps.mk
 }
  ;;
@@ -18828,5 +19155,4 @@
 #! $SHELL
 # Generated automatically by $as_me ($PACKAGE) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 
Index: libcfa/configure.ac
===================================================================
--- libcfa/configure.ac	(revision d9c2284a9d9f81d61d2fa67b461262ba1be38950)
+++ libcfa/configure.ac	(revision 5751a56c72a73cfd724a07d14af375206ec3dcc6)
@@ -123,5 +123,19 @@
 AC_PROG_MAKE_SET
 
-AC_CHECK_HEADERS([linux/io_uring.h])
+
+
+#io_uring 5.4 and earlier uses defines
+#io_uring 5.5 uses enum values
+#io_uring 5.6 and later uses probes
+
+AC_CHECK_HEADERS([linux/io_uring.h], [
+	AC_DEFINE(CFA_HAVE_LINUX_IO_URING_H)
+	# AC_CHECK_HEADER([liburing.h], [
+	# 	AC_CHECK_LIB([uring], [io_uring_get_probe])
+	# ])
+	m4_foreach([op], [IORING_OP_NOP,IORING_OP_READV,IORING_OP_WRITEV,IORING_OP_FSYNC,IORING_OP_READ_FIXED,IORING_OP_WRITE_FIXED,IORING_OP_POLL_ADD,IORING_OP_POLL_REMOVE,IORING_OP_SYNC_FILE_RANGE,IORING_OP_SENDMSG,IORING_OP_RECVMSG,IORING_OP_TIMEOUT,IORING_OP_TIMEOUT_REMOVE,IORING_OP_ACCEPT,IORING_OP_ASYNC_CANCEL,IORING_OP_LINK_TIMEOUT,IORING_OP_CONNECT,IORING_OP_FALLOCATE,IORING_OP_OPENAT,IORING_OP_CLOSE,IORING_OP_FILES_UPDATE,IORING_OP_STATX,IORING_OP_READ,IORING_OP_WRITE,IORING_OP_FADVISE,IORING_OP_MADVISE,IORING_OP_SEND,IORING_OP_RECV,IORING_OP_OPENAT2,IORING_OP_EPOLL_CTL,IORING_OP_SPLICE,IORING_OP_PROVIDE_BUFFERS,IORING_OP_REMOVE_BUFFER], [
+		AC_CHECK_DECL(op, [AC_DEFINE([CFA_HAVE_]op)], [], [[#include <linux/io_uring.h>]])
+	])
+])
 AC_CHECK_FUNCS([preadv2 pwritev2])
 
Index: libcfa/prelude/defines.hfa.in
===================================================================
--- libcfa/prelude/defines.hfa.in	(revision d9c2284a9d9f81d61d2fa67b461262ba1be38950)
+++ libcfa/prelude/defines.hfa.in	(revision 5751a56c72a73cfd724a07d14af375206ec3dcc6)
@@ -14,5 +14,39 @@
 //
 
-#undef HAVE_LINUX_IO_URING_H
+#undef CFA_HAVE_LINUX_IO_URING_H
+
+#undef CFA_HAVE_IORING_OP_NOP
+#undef CFA_HAVE_IORING_OP_READV
+#undef CFA_HAVE_IORING_OP_WRITEV
+#undef CFA_HAVE_IORING_OP_FSYNC
+#undef CFA_HAVE_IORING_OP_READ_FIXED
+#undef CFA_HAVE_IORING_OP_WRITE_FIXED
+#undef CFA_HAVE_IORING_OP_POLL_ADD
+#undef CFA_HAVE_IORING_OP_POLL_REMOVE
+#undef CFA_HAVE_IORING_OP_SYNC_FILE_RANGE
+#undef CFA_HAVE_IORING_OP_SENDMSG
+#undef CFA_HAVE_IORING_OP_RECVMSG
+#undef CFA_HAVE_IORING_OP_TIMEOUT
+#undef CFA_HAVE_IORING_OP_TIMEOUT_REMOVE
+#undef CFA_HAVE_IORING_OP_ACCEPT
+#undef CFA_HAVE_IORING_OP_ASYNC_CANCEL
+#undef CFA_HAVE_IORING_OP_LINK_TIMEOUT
+#undef CFA_HAVE_IORING_OP_CONNECT
+#undef CFA_HAVE_IORING_OP_FALLOCATE
+#undef CFA_HAVE_IORING_OP_OPENAT
+#undef CFA_HAVE_IORING_OP_CLOSE
+#undef CFA_HAVE_IORING_OP_FILES_UPDATE
+#undef CFA_HAVE_IORING_OP_STATX
+#undef CFA_HAVE_IORING_OP_READ
+#undef CFA_HAVE_IORING_OP_WRITE
+#undef CFA_HAVE_IORING_OP_FADVISE
+#undef CFA_HAVE_IORING_OP_MADVISE
+#undef CFA_HAVE_IORING_OP_SEND
+#undef CFA_HAVE_IORING_OP_RECV
+#undef CFA_HAVE_IORING_OP_OPENAT2
+#undef CFA_HAVE_IORING_OP_EPOLL_CTL
+#undef CFA_HAVE_IORING_OP_SPLICE
+#undef CFA_HAVE_IORING_OP_PROVIDE_BUFFERS
+#undef CFA_HAVE_IORING_OP_REMOVE_BUFFER
 
 #undef HAVE_PREADV2
Index: libcfa/src/concurrency/io.cfa
===================================================================
--- libcfa/src/concurrency/io.cfa	(revision d9c2284a9d9f81d61d2fa67b461262ba1be38950)
+++ libcfa/src/concurrency/io.cfa	(revision 5751a56c72a73cfd724a07d14af375206ec3dcc6)
@@ -16,5 +16,5 @@
 #if defined(__CFA_DEBUG__)
 	// #define __CFA_DEBUG_PRINT_IO__
-	#define __CFA_DEBUG_PRINT_IO_CORE__
+	// #define __CFA_DEBUG_PRINT_IO_CORE__
 #endif
 
@@ -22,5 +22,5 @@
 #include "bitmanip.hfa"
 
-#if !defined(HAVE_LINUX_IO_URING_H)
+#if !defined(CFA_HAVE_LINUX_IO_URING_H)
 	void __kernel_io_startup( cluster &, unsigned, bool ) {
 		// Nothing to do without io_uring
@@ -490,4 +490,13 @@
 	static uint32_t __release_consumed_submission( struct __io_data & ring );
 
+	static inline void process(struct io_uring_cqe & cqe, struct __processor_id_t * id ) {
+		struct __io_user_data_t * data = (struct __io_user_data_t *)(uintptr_t)cqe.user_data;
+		__cfadbg_print_safe( io, "Kernel I/O : Syscall completed : cqe %p, result %d for %p\n", data, cqe.res, data->thrd );
+
+		data->result = cqe.res;
+		if(!id) { unpark(     data->thrd __cfaabi_dbg_ctx2 ); }
+		else  { __unpark( id, data->thrd __cfaabi_dbg_ctx2 ); }
+	}
+
 	// Process a single completion message from the io_uring
 	// This is NOT thread-safe
@@ -538,10 +547,5 @@
 			/* paranoid */ verify(&cqe);
 
-			struct __io_user_data_t * data = (struct __io_user_data_t *)(uintptr_t)cqe.user_data;
-			__cfadbg_print_safe( io, "Kernel I/O : Performed reading io cqe %p, result %d for %p\n", data, cqe.res, data->thrd );
-
-			data->result = cqe.res;
-			if(!mask) { unpark( data->thrd __cfaabi_dbg_ctx2 ); }
-			else      { __unpark( &ring.poller.slow.id, data->thrd __cfaabi_dbg_ctx2 ); }
+			process( cqe, !mask ? (struct __processor_id_t *)0p : &ring.poller.slow.id );
 		}
 
Index: libcfa/src/concurrency/iocall.cfa
===================================================================
--- libcfa/src/concurrency/iocall.cfa	(revision d9c2284a9d9f81d61d2fa67b461262ba1be38950)
+++ libcfa/src/concurrency/iocall.cfa	(revision 5751a56c72a73cfd724a07d14af375206ec3dcc6)
@@ -20,5 +20,5 @@
 //=============================================================================================
 
-#if defined(HAVE_LINUX_IO_URING_H)
+#if defined(CFA_HAVE_LINUX_IO_URING_H)
 	#include <stdint.h>
 	#include <linux/io_uring.h>
@@ -122,5 +122,5 @@
 #if defined(HAVE_PREADV2)
 	ssize_t cfa_preadv2(int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags) {
-		#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_READV)
+		#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_READV)
 			return preadv2(fd, iov, iovcnt, offset, flags);
 		#else
@@ -134,5 +134,5 @@
 
 	ssize_t cfa_preadv2_fixed(int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags) {
-		#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_READV)
+		#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_READV)
 			return preadv2(fd, iov, iovcnt, offset, flags);
 		#else
@@ -149,5 +149,5 @@
 #if defined(HAVE_PWRITEV2)
 	ssize_t cfa_pwritev2(int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags) {
-		#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_WRITEV)
+		#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_WRITEV)
 			return pwritev2(fd, iov, iovcnt, offset, flags);
 		#else
@@ -162,5 +162,5 @@
 
 int cfa_fsync(int fd) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_FSYNC)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_FSYNC)
 		return fsync(fd);
 	#else
@@ -174,5 +174,5 @@
 
 int cfa_sync_file_range(int fd, int64_t offset, int64_t nbytes, unsigned int flags) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_SYNC_FILE_RANGE)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_SYNC_FILE_RANGE)
 		return sync_file_range(fd, offset, nbytes, flags);
 	#else
@@ -190,5 +190,5 @@
 
 ssize_t cfa_sendmsg(int sockfd, const struct msghdr *msg, int flags) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_SENDMSG)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_SENDMSG)
 		return sendmsg(sockfd, msg, flags);
 	#else
@@ -203,5 +203,5 @@
 
 ssize_t cfa_recvmsg(int sockfd, struct msghdr *msg, int flags) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_RECVMSG)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_RECVMSG)
 		return recvmsg(sockfd, msg, flags);
 	#else
@@ -216,5 +216,5 @@
 
 ssize_t cfa_send(int sockfd, const void *buf, size_t len, int flags) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_SEND)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_SEND)
 		return send( sockfd, buf, len, flags );
 	#else
@@ -231,5 +231,5 @@
 
 ssize_t cfa_recv(int sockfd, void *buf, size_t len, int flags) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_RECV)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_RECV)
 		return recv( sockfd, buf, len, flags );
 	#else
@@ -246,5 +246,5 @@
 
 int cfa_accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_ACCEPT)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_ACCEPT)
 		return accept4( sockfd, addr, addrlen, flags );
 	#else
@@ -261,5 +261,5 @@
 
 int cfa_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_CONNECT)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_CONNECT)
 		return connect( sockfd, addr, addrlen );
 	#else
@@ -275,5 +275,5 @@
 
 int cfa_fallocate(int fd, int mode, uint64_t offset, uint64_t len) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_FALLOCATE)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_FALLOCATE)
 		return fallocate( fd, mode, offset, len );
 	#else
@@ -290,5 +290,5 @@
 
 int cfa_fadvise(int fd, uint64_t offset, uint64_t len, int advice) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_FADVISE)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_FADVISE)
 		return posix_fadvise( fd, offset, len, advice );
 	#else
@@ -305,5 +305,5 @@
 
 int cfa_madvise(void *addr, size_t length, int advice) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_MADVISE)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_MADVISE)
 		return madvise( addr, length, advice );
 	#else
@@ -320,5 +320,5 @@
 
 int cfa_openat(int dirfd, const char *pathname, int flags, mode_t mode) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_OPENAT)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_OPENAT)
 		return openat( dirfd, pathname, flags, mode );
 	#else
@@ -335,5 +335,5 @@
 
 int cfa_close(int fd) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_CLOSE)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_CLOSE)
 		return close( fd );
 	#else
@@ -349,5 +349,5 @@
 struct statx;
 int cfa_statx(int dirfd, const char *pathname, int flags, unsigned int mask, struct statx *statxbuf) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_STATX)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_STATX)
 		#if defined(__NR_statx)
 			return syscall( __NR_statx, dirfd, pathname, flags, mask, statxbuf );
@@ -367,5 +367,5 @@
 
 ssize_t cfa_read(int fd, void *buf, size_t count) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_READ)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_READ)
 		return read( fd, buf, count );
 	#else
@@ -379,5 +379,5 @@
 
 ssize_t cfa_write(int fd, void *buf, size_t count) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_WRITE)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_WRITE)
 		return read( fd, buf, count );
 	#else
@@ -391,5 +391,5 @@
 
 ssize_t cfa_splice(int fd_in, loff_t *off_in, int fd_out, loff_t *off_out, size_t len, unsigned int flags) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_SPLICE)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_SPLICE)
 		return splice( fd_in, off_in, fd_out, off_out, len, flags );
 	#else
@@ -405,6 +405,22 @@
 }
 
+ssize_t cfa_splice(int fd_in, loff_t *off_in, int fd_out, loff_t *off_out, size_t len, unsigned int flags, int in_flags, int out_flags) {
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_SPLICE)
+		return splice( fd_in, off_in, fd_out, off_out, len, flags );
+	#else
+		__submit_prelude
+
+		(*sqe){ IORING_OP_SPLICE, fd_out, 0p, len, off_out };
+		sqe->splice_fd_in  = fd_in;
+		sqe->splice_off_in = off_in;
+		sqe->splice_flags  = flags | out_flags;
+		sqe->flags = in_flags;
+
+		__submit_wait
+	#endif
+}
+
 ssize_t cfa_tee(int fd_in, int fd_out, size_t len, unsigned int flags) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_TEE)
+	#if !defined(CFA_HAVE_LINUX_IO_URING_H) || !defined(CFA_HAVE_IORING_OP_TEE)
 		return tee( fd_in, fd_out, len, flags );
 	#else
@@ -429,10 +445,10 @@
 
 bool has_user_level_blocking( fptr_t func ) {
-	#if defined(HAVE_LINUX_IO_URING_H)
+	#if defined(CFA_HAVE_LINUX_IO_URING_H)
 		#if defined(HAVE_PREADV2)
 			if( /*func == (fptr_t)preadv2 || */
 				func == (fptr_t)cfa_preadv2 )
-				#define _CFA_IO_FEATURE_IORING_OP_READV ,
-				return IS_DEFINED(IORING_OP_READV);
+				#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_READV ,
+				return IS_DEFINED(CFA_HAVE_IORING_OP_READV);
 		#endif
 
@@ -440,92 +456,93 @@
 			if( /*func == (fptr_t)pwritev2 || */
 				func == (fptr_t)cfa_pwritev2 )
-				#define _CFA_IO_FEATURE_IORING_OP_WRITEV ,
-				return IS_DEFINED(IORING_OP_WRITEV);
+				#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_WRITEV ,
+				return IS_DEFINED(CFA_HAVE_IORING_OP_WRITEV);
 		#endif
 
 		if( /*func == (fptr_t)fsync || */
 			func == (fptr_t)cfa_fsync )
-			#define _CFA_IO_FEATURE_IORING_OP_FSYNC ,
-			return IS_DEFINED(IORING_OP_FSYNC);
+			#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_FSYNC ,
+			return IS_DEFINED(CFA_HAVE_IORING_OP_FSYNC);
 
 		if( /*func == (fptr_t)ync_file_range || */
 			func == (fptr_t)cfa_sync_file_range )
-			#define _CFA_IO_FEATURE_IORING_OP_SYNC_FILE_RANGE ,
-			return IS_DEFINED(IORING_OP_SYNC_FILE_RANGE);
+			#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_SYNC_FILE_RANGE ,
+			return IS_DEFINED(CFA_HAVE_IORING_OP_SYNC_FILE_RANGE);
 
 		if( /*func == (fptr_t)sendmsg || */
 			func == (fptr_t)cfa_sendmsg )
-			#define _CFA_IO_FEATURE_IORING_OP_SENDMSG ,
-			return IS_DEFINED(IORING_OP_SENDMSG);
+			#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_SENDMSG ,
+			return IS_DEFINED(CFA_HAVE_IORING_OP_SENDMSG);
 
 		if( /*func == (fptr_t)recvmsg || */
 			func == (fptr_t)cfa_recvmsg )
-			#define _CFA_IO_FEATURE_IORING_OP_RECVMSG ,
-			return IS_DEFINED(IORING_OP_RECVMSG);
+			#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_RECVMSG ,
+			return IS_DEFINED(CFA_HAVE_IORING_OP_RECVMSG);
 
 		if( /*func == (fptr_t)send || */
 			func == (fptr_t)cfa_send )
-			#define _CFA_IO_FEATURE_IORING_OP_SEND ,
-			return IS_DEFINED(IORING_OP_SEND);
+			#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_SEND ,
+			return IS_DEFINED(CFA_HAVE_IORING_OP_SEND);
 
 		if( /*func == (fptr_t)recv || */
 			func == (fptr_t)cfa_recv )
-			#define _CFA_IO_FEATURE_IORING_OP_RECV ,
-			return IS_DEFINED(IORING_OP_RECV);
+			#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_RECV ,
+			return IS_DEFINED(CFA_HAVE_IORING_OP_RECV);
 
 		if( /*func == (fptr_t)accept4 || */
 			func == (fptr_t)cfa_accept4 )
-			#define _CFA_IO_FEATURE_IORING_OP_ACCEPT ,
-			return IS_DEFINED(IORING_OP_ACCEPT);
+			#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_ACCEPT ,
+			return IS_DEFINED(CFA_HAVE_IORING_OP_ACCEPT);
 
 		if( /*func == (fptr_t)connect || */
 			func == (fptr_t)cfa_connect )
-			#define _CFA_IO_FEATURE_IORING_OP_CONNECT ,
-			return IS_DEFINED(IORING_OP_CONNECT);
+			#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_CONNECT ,
+			return IS_DEFINED(CFA_HAVE_IORING_OP_CONNECT);
 
 		if( /*func == (fptr_t)fallocate || */
 			func == (fptr_t)cfa_fallocate )
-			#define _CFA_IO_FEATURE_IORING_OP_FALLOCATE ,
-			return IS_DEFINED(IORING_OP_FALLOCATE);
+			#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_FALLOCATE ,
+			return IS_DEFINED(CFA_HAVE_IORING_OP_FALLOCATE);
 
 		if( /*func == (fptr_t)posix_fadvise || */
 			func == (fptr_t)cfa_fadvise )
-			#define _CFA_IO_FEATURE_IORING_OP_FADVISE ,
-			return IS_DEFINED(IORING_OP_FADVISE);
+			#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_FADVISE ,
+			return IS_DEFINED(CFA_HAVE_IORING_OP_FADVISE);
 
 		if( /*func == (fptr_t)madvise || */
 			func == (fptr_t)cfa_madvise )
-			#define _CFA_IO_FEATURE_IORING_OP_MADVISE ,
-			return IS_DEFINED(IORING_OP_MADVISE);
+			#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_MADVISE ,
+			return IS_DEFINED(CFA_HAVE_IORING_OP_MADVISE);
 
 		if( /*func == (fptr_t)openat || */
 			func == (fptr_t)cfa_openat )
-			#define _CFA_IO_FEATURE_IORING_OP_OPENAT ,
-			return IS_DEFINED(IORING_OP_OPENAT);
+			#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_OPENAT ,
+			return IS_DEFINED(CFA_HAVE_IORING_OP_OPENAT);
 
 		if( /*func == (fptr_t)close || */
 			func == (fptr_t)cfa_close )
-			#define _CFA_IO_FEATURE_IORING_OP_CLOSE ,
-			return IS_DEFINED(IORING_OP_CLOSE);
+			#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_CLOSE ,
+			return IS_DEFINED(CFA_HAVE_IORING_OP_CLOSE);
 
 		if( /*func == (fptr_t)read || */
 			func == (fptr_t)cfa_read )
-			#define _CFA_IO_FEATURE_IORING_OP_READ ,
-			return IS_DEFINED(IORING_OP_READ);
+			#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_READ ,
+			return IS_DEFINED(CFA_HAVE_IORING_OP_READ);
 
 		if( /*func == (fptr_t)write || */
 			func == (fptr_t)cfa_write )
-			#define _CFA_IO_FEATURE_IORING_OP_WRITE ,
-			return IS_DEFINED(IORING_OP_WRITE);
+			#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_WRITE ,
+			return IS_DEFINED(CFA_HAVE_IORING_OP_WRITE);
 
 		if( /*func == (fptr_t)splice || */
-			func == (fptr_t)cfa_splice )
-			#define _CFA_IO_FEATURE_IORING_OP_SPLICE ,
-			return IS_DEFINED(IORING_OP_SPLICE);
+			func == (fptr_t)(ssize_t (*)(int, loff_t *, int, loff_t *, size_t, unsigned int))cfa_splice,
+			func == (fptr_t)(ssize_t (*)(int, loff_t *, int, loff_t *, size_t, unsigned int, int, int))cfa_splice )
+			#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_SPLICE ,
+			return IS_DEFINED(CFA_HAVE_IORING_OP_SPLICE);
 
 		if( /*func == (fptr_t)tee || */
 			func == (fptr_t)cfa_tee )
-			#define _CFA_IO_FEATURE_IORING_OP_TEE ,
-			return IS_DEFINED(IORING_OP_TEE);
+			#define _CFA_IO_FEATURE_CFA_HAVE_IORING_OP_TEE ,
+			return IS_DEFINED(CFA_HAVE_IORING_OP_TEE);
 	#endif
 
Index: libcfa/src/concurrency/stats.cfa
===================================================================
--- libcfa/src/concurrency/stats.cfa	(revision d9c2284a9d9f81d61d2fa67b461262ba1be38950)
+++ libcfa/src/concurrency/stats.cfa	(revision 5751a56c72a73cfd724a07d14af375206ec3dcc6)
@@ -24,5 +24,5 @@
 		stats->ready.sleep.exits   = 0;
 
-		#if defined(HAVE_LINUX_IO_URING_H)
+		#if defined(CFA_HAVE_LINUX_IO_URING_H)
 			stats->io.submit_q.submit_avg.rdy = 0;
 			stats->io.submit_q.submit_avg.csm = 0;
@@ -59,5 +59,5 @@
 		__atomic_fetch_add( &cltr->ready.sleep.exits  , proc->ready.sleep.exits  , __ATOMIC_SEQ_CST );
 
-		#if defined(HAVE_LINUX_IO_URING_H)
+		#if defined(CFA_HAVE_LINUX_IO_URING_H)
 			__atomic_fetch_add( &cltr->io.submit_q.submit_avg.rdy          , proc->io.submit_q.submit_avg.rdy          , __ATOMIC_SEQ_CST );
 			__atomic_fetch_add( &cltr->io.submit_q.submit_avg.csm          , proc->io.submit_q.submit_avg.csm          , __ATOMIC_SEQ_CST );
@@ -121,5 +121,5 @@
 		}
 
-		#if defined(HAVE_LINUX_IO_URING_H)
+		#if defined(CFA_HAVE_LINUX_IO_URING_H)
 			if( flags & CFA_STATS_IO ) {
 				double avgrdy = ((double)io.submit_q.submit_avg.rdy) / io.submit_q.submit_avg.cnt;
Index: libcfa/src/concurrency/stats.hfa
===================================================================
--- libcfa/src/concurrency/stats.hfa	(revision d9c2284a9d9f81d61d2fa67b461262ba1be38950)
+++ libcfa/src/concurrency/stats.hfa	(revision 5751a56c72a73cfd724a07d14af375206ec3dcc6)
@@ -11,5 +11,5 @@
 	enum {
 		CFA_STATS_READY_Q  = 0x01,
-		#if defined(HAVE_LINUX_IO_URING_H)
+		#if defined(CFA_HAVE_LINUX_IO_URING_H)
 			CFA_STATS_IO = 0x02,
 		#endif
@@ -64,5 +64,5 @@
 	};
 
-	#if defined(HAVE_LINUX_IO_URING_H)
+	#if defined(CFA_HAVE_LINUX_IO_URING_H)
 		struct __attribute__((aligned(64))) __stats_io_t{
 			struct {
@@ -99,5 +99,5 @@
 	struct __attribute__((aligned(128))) __stats_t {
 		__stats_readQ_t ready;
-		#if defined(HAVE_LINUX_IO_URING_H)
+		#if defined(CFA_HAVE_LINUX_IO_URING_H)
 			__stats_io_t    io;
 		#endif
