* [Buildroot] [PATCH 1/1] package/ltp-testsuite: Fix uclibc-ng build
@ 2025-07-28 21:26 Petr Vorel
2025-07-29 9:30 ` Waldemar Brodkorb
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Petr Vorel @ 2025-07-28 21:26 UTC (permalink / raw)
To: buildroot; +Cc: Petr Vorel, Julien Olivain
Backport upstream fix.
Fixes:
https://autobuild.buildroot.org/results/f3e/f3e03b9a1a69988d6497f36c9d64a37a66e9ad20/
https://autobuild.buildroot.org/results/856/856365f467efc449faee1951250e63d8d4442bbc/
https://autobuild.buildroot.org/results/2ac/2ac08cecd6a505f1bac1a673efc280b3a8dcb23a/
https://autobuild.buildroot.org/results/59b/59b3ad33667b7e87c81e49dd434d5f494e189e0d/
https://autobuild.buildroot.org/results/b1a/b1a36f9971c97300670d8d772ace11e5fedceaaa/
Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
---
.../0003-tlibio-Detect-aio.h-support.patch | 342 ++++++++++++++++++
1 file changed, 342 insertions(+)
create mode 100644 package/ltp-testsuite/0003-tlibio-Detect-aio.h-support.patch
diff --git a/package/ltp-testsuite/0003-tlibio-Detect-aio.h-support.patch b/package/ltp-testsuite/0003-tlibio-Detect-aio.h-support.patch
new file mode 100644
index 0000000000..442e2fd96b
--- /dev/null
+++ b/package/ltp-testsuite/0003-tlibio-Detect-aio.h-support.patch
@@ -0,0 +1,342 @@
+From 91e6272febf95e19a8300695dfc2089569adf9d8 Mon Sep 17 00:00:00 2001
+From: Petr Vorel <petr.vorel@gmail.com>
+Date: Sun, 27 Jul 2025 22:54:54 +0200
+Subject: [PATCH] tlibio: Detect <aio.h> support
+
+Some libc (i.e. uclibc-ng or uclibc) does not implement <aio.h>.
+Requiring it for the core LTP library breaks build of these libc.
+Restore unintentional removal in fed3e3ee63.
+
+Changes:
+* Fix for all libc without <aio.h> support: previous check
+ 'defined(__linux__) && !defined(__UCLIBC__)' was uclibc-ng specific
+ (and check for __linux__ was not needed anyway). All of these used
+ prior fed3e3ee63 is replaced just by HAVE_AIO_H.
+* Comment out also if block first and last 'line if (...) {' and '}' if
+ the block would be empty anyway.
+* Further join preprocessor checks as code prior fed3e3ee63 contained
+ code compiled for old unixes (e.g. sgi), which fed3e3ee63 removed.
+* Remove nested preprocessors checks in code which is already checked
+ (i.e. lio_wait4asyncio()).
+* Fix wrong #endif comments.
+* Add further cleanup of old unixes.
+
+I also wonder if #else part of struct lio_info_type Lio_info1[]
+should be really defined for code without <aio.h>.
+
+Fixes: fed3e3ee63 ("lib/tlibio: Get rid of support for old UNIXes")
+Fixes: https://autobuild.buildroot.org/results/f3e/f3e03b9a1a69988d6497f36c9d64a37a66e9ad20/
+Fixes: https://autobuild.buildroot.org/results/856/856365f467efc449faee1951250e63d8d4442bbc/
+Fixes: https://autobuild.buildroot.org/results/2ac/2ac08cecd6a505f1bac1a673efc280b3a8dcb23a/
+Fixes: https://autobuild.buildroot.org/results/59b/59b3ad33667b7e87c81e49dd434d5f494e189e0d/
+Fixes: https://autobuild.buildroot.org/results/b1a/b1a36f9971c97300670d8d772ace11e5fedceaaa/
+Reviewed-by: Li Wang <liwang@redhat.com>
+Acked-by: Cyril Hrubis <chrubis@suse.cz>
+Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
+Upstream: https://github.com/linux-test-project/ltp/commit/91e6272febf95e19a8300695dfc2089569adf9d8
+---
+ configure.ac | 1 +
+ lib/tlibio.c | 52 +++++++++++++++++++++++++++++++++++++++++++---------
+ 2 files changed, 44 insertions(+), 9 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 8ec37639c1..12025be51c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,6 +48,7 @@ AC_CHECK_DECLS([PR_CAPBSET_DROP, PR_CAPBSET_READ],,,[#include <sys/prctl.h>])
+ AC_CHECK_DECLS([SEM_STAT_ANY],,,[#include <sys/sem.h>])
+
+ AC_CHECK_HEADERS_ONCE([ \
++ aio.h \
+ asm/ldt.h \
+ asm/prctl.h \
+ cpuid.h \
+diff --git a/lib/tlibio.c b/lib/tlibio.c
+index b877393df2..70e0c6f7d2 100644
+--- a/lib/tlibio.c
++++ b/lib/tlibio.c
+@@ -88,7 +88,9 @@
+ #include <stdint.h>
+ #include <sys/uio.h> /* readv(2)/writev(2) */
+ #include <string.h>
+-#include <aio.h>
++#ifdef HAVE_AIO_H
++# include <aio.h>
++#endif
+ #include <stdlib.h> /* atoi, abs */
+
+ #include "tlibio.h" /* defines LIO* macros */
+@@ -108,7 +110,7 @@ struct lio_info_type Lio_info1[] = {
+ {"b", LIO_IO_ASYNC | LIO_WAIT_SIGPAUSE, "async i/o using pause"},
+ {"a", LIO_IO_ASYNC | LIO_WAIT_RECALL,
+ "async i/o using recall/aio_suspend"},
+-#if defined(sgi) || (defined(__linux__) && !defined(__UCLIBC__))
++#ifdef HAVE_AIO_H
+ {"r",
+ LIO_RANDOM | LIO_IO_TYPES | LIO_WAIT_TYPES,
+ "random sync i/o types and wait methods"},
+@@ -159,7 +161,7 @@ char Lio_SysCall[PATH_MAX]; /* string containing last i/o system call */
+
+ static volatile int Received_signal = 0; /* number of signals received */
+ static volatile int Rec_signal;
+-#if defined(sgi) || (defined(__linux__) && !defined(__UCLIBC__))
++#ifdef HAVE_AIO_H
+ static volatile int Received_callback = 0; /* number of callbacks received */
+ static volatile int Rec_callback;
+ #endif
+@@ -399,7 +401,7 @@ static void lio_async_signal_handler(int sig)
+ return;
+ }
+
+-#if defined(sgi) || (defined(__linux__) && !defined(__UCLIBC__))
++#ifdef HAVE_AIO_H
+ /***********************************************************************
+ * This is an internal callback handler.
+ * If the handler is called, it will increment the Received_callback
+@@ -417,7 +419,7 @@ static void lio_async_callback_handler(union sigval sigval)
+
+ return;
+ }
+-#endif /* sgi */
++#endif
+
+ /***********************************************************************
+ * lio_random_methods
+@@ -515,9 +517,11 @@ int lio_write_buffer(int fd, /* open file descriptor */
+ int omethod = method;
+ int listio_cmd; /* Holds the listio/lio_listio cmd */
+ struct iovec iov; /* iovec for writev(2) */
++#ifdef HAVE_AIO_H
+ struct aiocb aiocbp; /* POSIX aio control block */
+ struct aiocb *aiolist[1]; /* list of aio control blocks for lio_listio */
+ off64_t poffset; /* pwrite(2) offset */
++#endif
+
+ /*
+ * If LIO_RANDOM bit specified, get new method randomly.
+@@ -536,12 +540,15 @@ int lio_write_buffer(int fd, /* open file descriptor */
+ *errmsg = Errormsg;
+
+ Rec_signal = Received_signal; /* get the current number of signals received */
++#ifdef HAVE_AIO_H
+ Rec_callback = Received_callback; /* get the current number of callbacks received */
++#endif
+
+ memset(&iov, 0x00, sizeof(struct iovec));
+ iov.iov_base = buffer;
+ iov.iov_len = size;
+
++#ifdef HAVE_AIO_H
+ memset(&aiocbp, 0x00, sizeof(struct aiocb));
+
+ aiocbp.aio_fildes = fd;
+@@ -589,6 +596,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
+
+ poffset = (off64_t) ret;
+ aiocbp.aio_offset = ret;
++#endif
+
+ /*
+ * If the LIO_USE_SIGNAL bit is not set, only use the signal
+@@ -597,9 +605,9 @@ int lio_write_buffer(int fd, /* open file descriptor */
+ * the signal.
+ */
+ if (sig && !(method & LIO_USE_SIGNAL) && !(method & LIO_WAIT_SIGTYPES)) {
+-
+ sig = 0; /* ignore signal parameter */
+ }
++#ifdef HAVE_AIO_H
+ if (sig && (method & LIO_WAIT_CBTYPES))
+ sig = 0; /* ignore signal parameter */
+
+@@ -626,6 +634,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
+ aiocbp.aio_sigevent.sigev_notify_attributes =
+ (void *)(uintptr_t) size;
+ }
++#endif
+
+ /*
+ * Determine the system call that will be called and produce
+@@ -684,6 +693,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
+ }
+
+ else if (method & LIO_IO_ASYNC) {
++#ifdef HAVE_AIO_H
+ sprintf(Lio_SysCall,
+ "aio_write(fildes=%d, buf, nbytes=%d, signo=%d)", fd,
+ size, sig);
+@@ -705,9 +715,11 @@ int lio_write_buffer(int fd, /* open file descriptor */
+ sigrelse(sig);
+ return -errno;
+ }
++#endif
+ }
+ /* LIO_IO_ASYNC */
+ else if (method & LIO_IO_SLISTIO) {
++#ifdef HAVE_AIO_H
+ aiocbp.aio_lio_opcode = LIO_WRITE;
+ listio_cmd = LIO_WAIT;
+ io_type = "lio_listio(3) sync write";
+@@ -739,9 +751,11 @@ int lio_write_buffer(int fd, /* open file descriptor */
+
+ ret = lio_check_asyncio(io_type, size, &aiocbp, method);
+ return ret;
++#endif
+ }
+ /* LIO_IO_SLISTIO */
+ else if (method & LIO_IO_ALISTIO) {
++#ifdef HAVE_AIO_H
+ aiocbp.aio_lio_opcode = LIO_WRITE;
+ listio_cmd = LIO_NOWAIT;
+ io_type = "lio_listio(3) async write";
+@@ -766,6 +780,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
+ sigrelse(sig);
+ return -errno;
+ }
++#endif
+ }
+ /* LIO_IO_ALISTIO */
+ else if (method & LIO_IO_SYNCV) {
+@@ -796,6 +811,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
+
+ return ret;
+ } /* LIO_IO_SYNCV */
++#ifdef HAVE_AIO_H
+ else if (method & LIO_IO_SYNCP) {
+ io_type = "pwrite(2)";
+
+@@ -827,6 +843,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
+
+ return ret;
+ } /* LIO_IO_SYNCP */
++#endif
+ else {
+ printf("DEBUG %s/%d: No I/O method chosen\n", __FILE__,
+ __LINE__);
+@@ -836,7 +853,9 @@ int lio_write_buffer(int fd, /* open file descriptor */
+ /*
+ * wait for async io to complete.
+ */
++#ifdef HAVE_AIO_H
+ ret = lio_wait4asyncio(method, fd, &aiocbp);
++#endif
+
+ /*
+ * If there was an error waiting for async i/o to complete,
+@@ -862,7 +881,9 @@ int lio_write_buffer(int fd, /* open file descriptor */
+ * have been updated but the actual i/o size if returned.
+ */
+
++#ifdef HAVE_AIO_H
+ ret = lio_check_asyncio(io_type, size, &aiocbp, method);
++#endif
+
+ return ret;
+ } /* end of lio_write_buffer */
+@@ -924,9 +945,11 @@ int lio_read_buffer(int fd, /* open file descriptor */
+ int listio_cmd; /* Holds the listio/lio_listio cmd */
+ int omethod = method;
+ struct iovec iov; /* iovec for readv(2) */
++#ifdef HAVE_AIO_H
+ struct aiocb aiocbp; /* POSIX aio control block */
+ struct aiocb *aiolist[1]; /* list of aio control blocks for lio_listio */
+ off64_t poffset; /* pread(2) offset */
++#endif
+
+ /*
+ * If LIO_RANDOM bit specified, get new method randomly.
+@@ -945,12 +968,15 @@ int lio_read_buffer(int fd, /* open file descriptor */
+ *errmsg = Errormsg;
+
+ Rec_signal = Received_signal; /* get the current number of signals received */
++#ifdef HAVE_AIO_H
+ Rec_callback = Received_callback; /* get the current number of callbacks received */
++#endif
+
+ memset(&iov, 0x00, sizeof(struct iovec));
+ iov.iov_base = buffer;
+ iov.iov_len = size;
+
++#ifdef HAVE_AIO_H
+ memset(&aiocbp, 0x00, sizeof(struct aiocb));
+
+ aiocbp.aio_fildes = fd;
+@@ -998,6 +1024,7 @@ int lio_read_buffer(int fd, /* open file descriptor */
+ }
+ poffset = (off64_t) ret;
+ aiocbp.aio_offset = ret;
++#endif
+
+ /*
+ * If the LIO_USE_SIGNAL bit is not set, only use the signal
+@@ -1010,6 +1037,7 @@ int lio_read_buffer(int fd, /* open file descriptor */
+ sig = 0; /* ignore signal parameter */
+ }
+
++#ifdef HAVE_AIO_H
+ if (sig && (method & LIO_WAIT_CBTYPES))
+ sig = 0; /* ignore signal parameter */
+
+@@ -1020,7 +1048,6 @@ int lio_read_buffer(int fd, /* open file descriptor */
+ * old signal handler will not be restored.
+ *** restoring the signal handler could be added ***
+ */
+-
+ if (sig && (method & LIO_WAIT_SIGTYPES)) {
+ aiocbp.aio_sigevent.sigev_notify = SIGEV_SIGNAL;
+ aiocbp.aio_sigevent.sigev_signo = sig;
+@@ -1035,6 +1062,7 @@ int lio_read_buffer(int fd, /* open file descriptor */
+ aiocbp.aio_sigevent.sigev_notify_attributes =
+ (void *)(uintptr_t) size;
+ }
++#endif
+
+ /*
+ * Determine the system call that will be called and produce
+@@ -1093,6 +1121,7 @@ int lio_read_buffer(int fd, /* open file descriptor */
+ wait4sync_io(fd, 1);
+ }
+
++#ifdef HAVE_AIO_H
+ } else if (method & LIO_IO_ASYNC) {
+ sprintf(Lio_SysCall,
+ "aio_read(fildes=%d, buf, nbytes=%d, signo=%d)", fd,
+@@ -1236,7 +1265,8 @@ int lio_read_buffer(int fd, /* open file descriptor */
+ __FILE__, __LINE__, ret);
+
+ return ret;
+- } /* LIO_IO_SYNCP */
++#endif
++ }
+
+ else {
+ printf("DEBUG %s/%d: No I/O method chosen\n", __FILE__,
+@@ -1248,7 +1278,9 @@ int lio_read_buffer(int fd, /* open file descriptor */
+ * wait for async io to complete.
+ * Note: Sync io should have returned prior to getting here.
+ */
++#ifdef HAVE_AIO_H
+ ret = lio_wait4asyncio(method, fd, &aiocbp);
++#endif
+
+ /*
+ * If there was an error waiting for async i/o to complete,
+@@ -1274,12 +1306,14 @@ int lio_read_buffer(int fd, /* open file descriptor */
+ * have been updated but the actual i/o size if returned.
+ */
+
++#ifdef HAVE_AIO_H
+ ret = lio_check_asyncio(io_type, size, &aiocbp, method);
++#endif
+
+ return ret;
+ } /* end of lio_read_buffer */
+
+-#if !defined(__sun) && !defined(__hpux) && !defined(_AIX)
++#ifdef HAVE_AIO_H
+ /***********************************************************************
+ * This function will check that async io was successful.
+ * It can also be used to check sync listio since it uses the
+--
+2.50.0
+
--
2.50.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Buildroot] [PATCH 1/1] package/ltp-testsuite: Fix uclibc-ng build
2025-07-28 21:26 [Buildroot] [PATCH 1/1] package/ltp-testsuite: Fix uclibc-ng build Petr Vorel
@ 2025-07-29 9:30 ` Waldemar Brodkorb
2025-07-30 1:01 ` Julien Olivain via buildroot
2025-08-07 18:24 ` Thomas Perale via buildroot
2 siblings, 0 replies; 5+ messages in thread
From: Waldemar Brodkorb @ 2025-07-29 9:30 UTC (permalink / raw)
To: Petr Vorel; +Cc: buildroot, Julien Olivain
Hi Petr, all,
Petr Vorel wrote,
> Backport upstream fix.
>
> Fixes:
> https://autobuild.buildroot.org/results/f3e/f3e03b9a1a69988d6497f36c9d64a37a66e9ad20/
> https://autobuild.buildroot.org/results/856/856365f467efc449faee1951250e63d8d4442bbc/
> https://autobuild.buildroot.org/results/2ac/2ac08cecd6a505f1bac1a673efc280b3a8dcb23a/
> https://autobuild.buildroot.org/results/59b/59b3ad33667b7e87c81e49dd434d5f494e189e0d/
> https://autobuild.buildroot.org/results/b1a/b1a36f9971c97300670d8d772ace11e5fedceaaa/
>
> Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
Thanks for fixing it :)
You can add my
Tested-By: Waldemar Brodkorb <wbx@openadk.org>
best regards
Waldemar
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Buildroot] [PATCH 1/1] package/ltp-testsuite: Fix uclibc-ng build
2025-07-28 21:26 [Buildroot] [PATCH 1/1] package/ltp-testsuite: Fix uclibc-ng build Petr Vorel
2025-07-29 9:30 ` Waldemar Brodkorb
@ 2025-07-30 1:01 ` Julien Olivain via buildroot
2025-08-07 18:24 ` Thomas Perale via buildroot
2 siblings, 0 replies; 5+ messages in thread
From: Julien Olivain via buildroot @ 2025-07-30 1:01 UTC (permalink / raw)
To: Petr Vorel; +Cc: buildroot
On 28/07/2025 23:26, Petr Vorel wrote:
> Backport upstream fix.
>
> Fixes:
> https://autobuild.buildroot.org/results/f3e/f3e03b9a1a69988d6497f36c9d64a37a66e9ad20/
> https://autobuild.buildroot.org/results/856/856365f467efc449faee1951250e63d8d4442bbc/
> https://autobuild.buildroot.org/results/2ac/2ac08cecd6a505f1bac1a673efc280b3a8dcb23a/
> https://autobuild.buildroot.org/results/59b/59b3ad33667b7e87c81e49dd434d5f494e189e0d/
> https://autobuild.buildroot.org/results/b1a/b1a36f9971c97300670d8d772ace11e5fedceaaa/
>
> Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
Applied to master, thanks.
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Buildroot] [PATCH 1/1] package/ltp-testsuite: Fix uclibc-ng build
2025-07-28 21:26 [Buildroot] [PATCH 1/1] package/ltp-testsuite: Fix uclibc-ng build Petr Vorel
2025-07-29 9:30 ` Waldemar Brodkorb
2025-07-30 1:01 ` Julien Olivain via buildroot
@ 2025-08-07 18:24 ` Thomas Perale via buildroot
2025-08-11 14:12 ` Arnout Vandecappelle via buildroot
2 siblings, 1 reply; 5+ messages in thread
From: Thomas Perale via buildroot @ 2025-08-07 18:24 UTC (permalink / raw)
To: Petr Vorel; +Cc: Thomas Perale, buildroot
In reply of:
> Backport upstream fix.
>
> Fixes:
> https://autobuild.buildroot.org/results/f3e/f3e03b9a1a69988d6497f36c9d64a37a66e9ad20/
> https://autobuild.buildroot.org/results/856/856365f467efc449faee1951250e63d8d4442bbc/
> https://autobuild.buildroot.org/results/2ac/2ac08cecd6a505f1bac1a673efc280b3a8dcb23a/
> https://autobuild.buildroot.org/results/59b/59b3ad33667b7e87c81e49dd434d5f494e189e0d/
> https://autobuild.buildroot.org/results/b1a/b1a36f9971c97300670d8d772ace11e5fedceaaa/
>
> Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
Applied to 2025.02.x & 2025.05.x. Thanks
> ---
> .../0003-tlibio-Detect-aio.h-support.patch | 342 ++++++++++++++++++
> 1 file changed, 342 insertions(+)
> create mode 100644 package/ltp-testsuite/0003-tlibio-Detect-aio.h-support.patch
>
> diff --git a/package/ltp-testsuite/0003-tlibio-Detect-aio.h-support.patch b/package/ltp-testsuite/0003-tlibio-Detect-aio.h-support.patch
> new file mode 100644
> index 0000000000..442e2fd96b
> --- /dev/null
> +++ b/package/ltp-testsuite/0003-tlibio-Detect-aio.h-support.patch
> @@ -0,0 +1,342 @@
> +From 91e6272febf95e19a8300695dfc2089569adf9d8 Mon Sep 17 00:00:00 2001
> +From: Petr Vorel <petr.vorel@gmail.com>
> +Date: Sun, 27 Jul 2025 22:54:54 +0200
> +Subject: [PATCH] tlibio: Detect <aio.h> support
> +
> +Some libc (i.e. uclibc-ng or uclibc) does not implement <aio.h>.
> +Requiring it for the core LTP library breaks build of these libc.
> +Restore unintentional removal in fed3e3ee63.
> +
> +Changes:
> +* Fix for all libc without <aio.h> support: previous check
> + 'defined(__linux__) && !defined(__UCLIBC__)' was uclibc-ng specific
> + (and check for __linux__ was not needed anyway). All of these used
> + prior fed3e3ee63 is replaced just by HAVE_AIO_H.
> +* Comment out also if block first and last 'line if (...) {' and '}' if
> + the block would be empty anyway.
> +* Further join preprocessor checks as code prior fed3e3ee63 contained
> + code compiled for old unixes (e.g. sgi), which fed3e3ee63 removed.
> +* Remove nested preprocessors checks in code which is already checked
> + (i.e. lio_wait4asyncio()).
> +* Fix wrong #endif comments.
> +* Add further cleanup of old unixes.
> +
> +I also wonder if #else part of struct lio_info_type Lio_info1[]
> +should be really defined for code without <aio.h>.
> +
> +Fixes: fed3e3ee63 ("lib/tlibio: Get rid of support for old UNIXes")
> +Fixes: https://autobuild.buildroot.org/results/f3e/f3e03b9a1a69988d6497f36c9d64a37a66e9ad20/
> +Fixes: https://autobuild.buildroot.org/results/856/856365f467efc449faee1951250e63d8d4442bbc/
> +Fixes: https://autobuild.buildroot.org/results/2ac/2ac08cecd6a505f1bac1a673efc280b3a8dcb23a/
> +Fixes: https://autobuild.buildroot.org/results/59b/59b3ad33667b7e87c81e49dd434d5f494e189e0d/
> +Fixes: https://autobuild.buildroot.org/results/b1a/b1a36f9971c97300670d8d772ace11e5fedceaaa/
> +Reviewed-by: Li Wang <liwang@redhat.com>
> +Acked-by: Cyril Hrubis <chrubis@suse.cz>
> +Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
> +Upstream: https://github.com/linux-test-project/ltp/commit/91e6272febf95e19a8300695dfc2089569adf9d8
> +---
> + configure.ac | 1 +
> + lib/tlibio.c | 52 +++++++++++++++++++++++++++++++++++++++++++---------
> + 2 files changed, 44 insertions(+), 9 deletions(-)
> +
> +diff --git a/configure.ac b/configure.ac
> +index 8ec37639c1..12025be51c 100644
> +--- a/configure.ac
> ++++ b/configure.ac
> +@@ -48,6 +48,7 @@ AC_CHECK_DECLS([PR_CAPBSET_DROP, PR_CAPBSET_READ],,,[#include <sys/prctl.h>])
> + AC_CHECK_DECLS([SEM_STAT_ANY],,,[#include <sys/sem.h>])
> +
> + AC_CHECK_HEADERS_ONCE([ \
> ++ aio.h \
> + asm/ldt.h \
> + asm/prctl.h \
> + cpuid.h \
> +diff --git a/lib/tlibio.c b/lib/tlibio.c
> +index b877393df2..70e0c6f7d2 100644
> +--- a/lib/tlibio.c
> ++++ b/lib/tlibio.c
> +@@ -88,7 +88,9 @@
> + #include <stdint.h>
> + #include <sys/uio.h> /* readv(2)/writev(2) */
> + #include <string.h>
> +-#include <aio.h>
> ++#ifdef HAVE_AIO_H
> ++# include <aio.h>
> ++#endif
> + #include <stdlib.h> /* atoi, abs */
> +
> + #include "tlibio.h" /* defines LIO* macros */
> +@@ -108,7 +110,7 @@ struct lio_info_type Lio_info1[] = {
> + {"b", LIO_IO_ASYNC | LIO_WAIT_SIGPAUSE, "async i/o using pause"},
> + {"a", LIO_IO_ASYNC | LIO_WAIT_RECALL,
> + "async i/o using recall/aio_suspend"},
> +-#if defined(sgi) || (defined(__linux__) && !defined(__UCLIBC__))
> ++#ifdef HAVE_AIO_H
> + {"r",
> + LIO_RANDOM | LIO_IO_TYPES | LIO_WAIT_TYPES,
> + "random sync i/o types and wait methods"},
> +@@ -159,7 +161,7 @@ char Lio_SysCall[PATH_MAX]; /* string containing last i/o system call */
> +
> + static volatile int Received_signal = 0; /* number of signals received */
> + static volatile int Rec_signal;
> +-#if defined(sgi) || (defined(__linux__) && !defined(__UCLIBC__))
> ++#ifdef HAVE_AIO_H
> + static volatile int Received_callback = 0; /* number of callbacks received */
> + static volatile int Rec_callback;
> + #endif
> +@@ -399,7 +401,7 @@ static void lio_async_signal_handler(int sig)
> + return;
> + }
> +
> +-#if defined(sgi) || (defined(__linux__) && !defined(__UCLIBC__))
> ++#ifdef HAVE_AIO_H
> + /***********************************************************************
> + * This is an internal callback handler.
> + * If the handler is called, it will increment the Received_callback
> +@@ -417,7 +419,7 @@ static void lio_async_callback_handler(union sigval sigval)
> +
> + return;
> + }
> +-#endif /* sgi */
> ++#endif
> +
> + /***********************************************************************
> + * lio_random_methods
> +@@ -515,9 +517,11 @@ int lio_write_buffer(int fd, /* open file descriptor */
> + int omethod = method;
> + int listio_cmd; /* Holds the listio/lio_listio cmd */
> + struct iovec iov; /* iovec for writev(2) */
> ++#ifdef HAVE_AIO_H
> + struct aiocb aiocbp; /* POSIX aio control block */
> + struct aiocb *aiolist[1]; /* list of aio control blocks for lio_listio */
> + off64_t poffset; /* pwrite(2) offset */
> ++#endif
> +
> + /*
> + * If LIO_RANDOM bit specified, get new method randomly.
> +@@ -536,12 +540,15 @@ int lio_write_buffer(int fd, /* open file descriptor */
> + *errmsg = Errormsg;
> +
> + Rec_signal = Received_signal; /* get the current number of signals received */
> ++#ifdef HAVE_AIO_H
> + Rec_callback = Received_callback; /* get the current number of callbacks received */
> ++#endif
> +
> + memset(&iov, 0x00, sizeof(struct iovec));
> + iov.iov_base = buffer;
> + iov.iov_len = size;
> +
> ++#ifdef HAVE_AIO_H
> + memset(&aiocbp, 0x00, sizeof(struct aiocb));
> +
> + aiocbp.aio_fildes = fd;
> +@@ -589,6 +596,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
> +
> + poffset = (off64_t) ret;
> + aiocbp.aio_offset = ret;
> ++#endif
> +
> + /*
> + * If the LIO_USE_SIGNAL bit is not set, only use the signal
> +@@ -597,9 +605,9 @@ int lio_write_buffer(int fd, /* open file descriptor */
> + * the signal.
> + */
> + if (sig && !(method & LIO_USE_SIGNAL) && !(method & LIO_WAIT_SIGTYPES)) {
> +-
> + sig = 0; /* ignore signal parameter */
> + }
> ++#ifdef HAVE_AIO_H
> + if (sig && (method & LIO_WAIT_CBTYPES))
> + sig = 0; /* ignore signal parameter */
> +
> +@@ -626,6 +634,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
> + aiocbp.aio_sigevent.sigev_notify_attributes =
> + (void *)(uintptr_t) size;
> + }
> ++#endif
> +
> + /*
> + * Determine the system call that will be called and produce
> +@@ -684,6 +693,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
> + }
> +
> + else if (method & LIO_IO_ASYNC) {
> ++#ifdef HAVE_AIO_H
> + sprintf(Lio_SysCall,
> + "aio_write(fildes=%d, buf, nbytes=%d, signo=%d)", fd,
> + size, sig);
> +@@ -705,9 +715,11 @@ int lio_write_buffer(int fd, /* open file descriptor */
> + sigrelse(sig);
> + return -errno;
> + }
> ++#endif
> + }
> + /* LIO_IO_ASYNC */
> + else if (method & LIO_IO_SLISTIO) {
> ++#ifdef HAVE_AIO_H
> + aiocbp.aio_lio_opcode = LIO_WRITE;
> + listio_cmd = LIO_WAIT;
> + io_type = "lio_listio(3) sync write";
> +@@ -739,9 +751,11 @@ int lio_write_buffer(int fd, /* open file descriptor */
> +
> + ret = lio_check_asyncio(io_type, size, &aiocbp, method);
> + return ret;
> ++#endif
> + }
> + /* LIO_IO_SLISTIO */
> + else if (method & LIO_IO_ALISTIO) {
> ++#ifdef HAVE_AIO_H
> + aiocbp.aio_lio_opcode = LIO_WRITE;
> + listio_cmd = LIO_NOWAIT;
> + io_type = "lio_listio(3) async write";
> +@@ -766,6 +780,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
> + sigrelse(sig);
> + return -errno;
> + }
> ++#endif
> + }
> + /* LIO_IO_ALISTIO */
> + else if (method & LIO_IO_SYNCV) {
> +@@ -796,6 +811,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
> +
> + return ret;
> + } /* LIO_IO_SYNCV */
> ++#ifdef HAVE_AIO_H
> + else if (method & LIO_IO_SYNCP) {
> + io_type = "pwrite(2)";
> +
> +@@ -827,6 +843,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
> +
> + return ret;
> + } /* LIO_IO_SYNCP */
> ++#endif
> + else {
> + printf("DEBUG %s/%d: No I/O method chosen\n", __FILE__,
> + __LINE__);
> +@@ -836,7 +853,9 @@ int lio_write_buffer(int fd, /* open file descriptor */
> + /*
> + * wait for async io to complete.
> + */
> ++#ifdef HAVE_AIO_H
> + ret = lio_wait4asyncio(method, fd, &aiocbp);
> ++#endif
> +
> + /*
> + * If there was an error waiting for async i/o to complete,
> +@@ -862,7 +881,9 @@ int lio_write_buffer(int fd, /* open file descriptor */
> + * have been updated but the actual i/o size if returned.
> + */
> +
> ++#ifdef HAVE_AIO_H
> + ret = lio_check_asyncio(io_type, size, &aiocbp, method);
> ++#endif
> +
> + return ret;
> + } /* end of lio_write_buffer */
> +@@ -924,9 +945,11 @@ int lio_read_buffer(int fd, /* open file descriptor */
> + int listio_cmd; /* Holds the listio/lio_listio cmd */
> + int omethod = method;
> + struct iovec iov; /* iovec for readv(2) */
> ++#ifdef HAVE_AIO_H
> + struct aiocb aiocbp; /* POSIX aio control block */
> + struct aiocb *aiolist[1]; /* list of aio control blocks for lio_listio */
> + off64_t poffset; /* pread(2) offset */
> ++#endif
> +
> + /*
> + * If LIO_RANDOM bit specified, get new method randomly.
> +@@ -945,12 +968,15 @@ int lio_read_buffer(int fd, /* open file descriptor */
> + *errmsg = Errormsg;
> +
> + Rec_signal = Received_signal; /* get the current number of signals received */
> ++#ifdef HAVE_AIO_H
> + Rec_callback = Received_callback; /* get the current number of callbacks received */
> ++#endif
> +
> + memset(&iov, 0x00, sizeof(struct iovec));
> + iov.iov_base = buffer;
> + iov.iov_len = size;
> +
> ++#ifdef HAVE_AIO_H
> + memset(&aiocbp, 0x00, sizeof(struct aiocb));
> +
> + aiocbp.aio_fildes = fd;
> +@@ -998,6 +1024,7 @@ int lio_read_buffer(int fd, /* open file descriptor */
> + }
> + poffset = (off64_t) ret;
> + aiocbp.aio_offset = ret;
> ++#endif
> +
> + /*
> + * If the LIO_USE_SIGNAL bit is not set, only use the signal
> +@@ -1010,6 +1037,7 @@ int lio_read_buffer(int fd, /* open file descriptor */
> + sig = 0; /* ignore signal parameter */
> + }
> +
> ++#ifdef HAVE_AIO_H
> + if (sig && (method & LIO_WAIT_CBTYPES))
> + sig = 0; /* ignore signal parameter */
> +
> +@@ -1020,7 +1048,6 @@ int lio_read_buffer(int fd, /* open file descriptor */
> + * old signal handler will not be restored.
> + *** restoring the signal handler could be added ***
> + */
> +-
> + if (sig && (method & LIO_WAIT_SIGTYPES)) {
> + aiocbp.aio_sigevent.sigev_notify = SIGEV_SIGNAL;
> + aiocbp.aio_sigevent.sigev_signo = sig;
> +@@ -1035,6 +1062,7 @@ int lio_read_buffer(int fd, /* open file descriptor */
> + aiocbp.aio_sigevent.sigev_notify_attributes =
> + (void *)(uintptr_t) size;
> + }
> ++#endif
> +
> + /*
> + * Determine the system call that will be called and produce
> +@@ -1093,6 +1121,7 @@ int lio_read_buffer(int fd, /* open file descriptor */
> + wait4sync_io(fd, 1);
> + }
> +
> ++#ifdef HAVE_AIO_H
> + } else if (method & LIO_IO_ASYNC) {
> + sprintf(Lio_SysCall,
> + "aio_read(fildes=%d, buf, nbytes=%d, signo=%d)", fd,
> +@@ -1236,7 +1265,8 @@ int lio_read_buffer(int fd, /* open file descriptor */
> + __FILE__, __LINE__, ret);
> +
> + return ret;
> +- } /* LIO_IO_SYNCP */
> ++#endif
> ++ }
> +
> + else {
> + printf("DEBUG %s/%d: No I/O method chosen\n", __FILE__,
> +@@ -1248,7 +1278,9 @@ int lio_read_buffer(int fd, /* open file descriptor */
> + * wait for async io to complete.
> + * Note: Sync io should have returned prior to getting here.
> + */
> ++#ifdef HAVE_AIO_H
> + ret = lio_wait4asyncio(method, fd, &aiocbp);
> ++#endif
> +
> + /*
> + * If there was an error waiting for async i/o to complete,
> +@@ -1274,12 +1306,14 @@ int lio_read_buffer(int fd, /* open file descriptor */
> + * have been updated but the actual i/o size if returned.
> + */
> +
> ++#ifdef HAVE_AIO_H
> + ret = lio_check_asyncio(io_type, size, &aiocbp, method);
> ++#endif
> +
> + return ret;
> + } /* end of lio_read_buffer */
> +
> +-#if !defined(__sun) && !defined(__hpux) && !defined(_AIX)
> ++#ifdef HAVE_AIO_H
> + /***********************************************************************
> + * This function will check that async io was successful.
> + * It can also be used to check sync listio since it uses the
> +--
> +2.50.0
> +
> --
> 2.50.0
>
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Buildroot] [PATCH 1/1] package/ltp-testsuite: Fix uclibc-ng build
2025-08-07 18:24 ` Thomas Perale via buildroot
@ 2025-08-11 14:12 ` Arnout Vandecappelle via buildroot
0 siblings, 0 replies; 5+ messages in thread
From: Arnout Vandecappelle via buildroot @ 2025-08-11 14:12 UTC (permalink / raw)
To: Thomas Perale, Petr Vorel; +Cc: buildroot
On 07/08/2025 20:24, Thomas Perale via buildroot wrote:
> In reply of:
>> Backport upstream fix.
>>
>> Fixes:
>> https://autobuild.buildroot.org/results/f3e/f3e03b9a1a69988d6497f36c9d64a37a66e9ad20/
>> https://autobuild.buildroot.org/results/856/856365f467efc449faee1951250e63d8d4442bbc/
>> https://autobuild.buildroot.org/results/2ac/2ac08cecd6a505f1bac1a673efc280b3a8dcb23a/
>> https://autobuild.buildroot.org/results/59b/59b3ad33667b7e87c81e49dd434d5f494e189e0d/
>> https://autobuild.buildroot.org/results/b1a/b1a36f9971c97300670d8d772ace11e5fedceaaa/
>>
>> Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
>
> Applied to 2025.02.x & 2025.05.x. Thanks
And reverted again because the patch doesn't actually apply (stable branches
are still on 20250130).
Regards,
Arnout
>
>> ---
>> .../0003-tlibio-Detect-aio.h-support.patch | 342 ++++++++++++++++++
>> 1 file changed, 342 insertions(+)
>> create mode 100644 package/ltp-testsuite/0003-tlibio-Detect-aio.h-support.patch
>>
>> diff --git a/package/ltp-testsuite/0003-tlibio-Detect-aio.h-support.patch b/package/ltp-testsuite/0003-tlibio-Detect-aio.h-support.patch
>> new file mode 100644
>> index 0000000000..442e2fd96b
>> --- /dev/null
>> +++ b/package/ltp-testsuite/0003-tlibio-Detect-aio.h-support.patch
>> @@ -0,0 +1,342 @@
>> +From 91e6272febf95e19a8300695dfc2089569adf9d8 Mon Sep 17 00:00:00 2001
>> +From: Petr Vorel <petr.vorel@gmail.com>
>> +Date: Sun, 27 Jul 2025 22:54:54 +0200
>> +Subject: [PATCH] tlibio: Detect <aio.h> support
>> +
>> +Some libc (i.e. uclibc-ng or uclibc) does not implement <aio.h>.
>> +Requiring it for the core LTP library breaks build of these libc.
>> +Restore unintentional removal in fed3e3ee63.
>> +
>> +Changes:
>> +* Fix for all libc without <aio.h> support: previous check
>> + 'defined(__linux__) && !defined(__UCLIBC__)' was uclibc-ng specific
>> + (and check for __linux__ was not needed anyway). All of these used
>> + prior fed3e3ee63 is replaced just by HAVE_AIO_H.
>> +* Comment out also if block first and last 'line if (...) {' and '}' if
>> + the block would be empty anyway.
>> +* Further join preprocessor checks as code prior fed3e3ee63 contained
>> + code compiled for old unixes (e.g. sgi), which fed3e3ee63 removed.
>> +* Remove nested preprocessors checks in code which is already checked
>> + (i.e. lio_wait4asyncio()).
>> +* Fix wrong #endif comments.
>> +* Add further cleanup of old unixes.
>> +
>> +I also wonder if #else part of struct lio_info_type Lio_info1[]
>> +should be really defined for code without <aio.h>.
>> +
>> +Fixes: fed3e3ee63 ("lib/tlibio: Get rid of support for old UNIXes")
>> +Fixes: https://autobuild.buildroot.org/results/f3e/f3e03b9a1a69988d6497f36c9d64a37a66e9ad20/
>> +Fixes: https://autobuild.buildroot.org/results/856/856365f467efc449faee1951250e63d8d4442bbc/
>> +Fixes: https://autobuild.buildroot.org/results/2ac/2ac08cecd6a505f1bac1a673efc280b3a8dcb23a/
>> +Fixes: https://autobuild.buildroot.org/results/59b/59b3ad33667b7e87c81e49dd434d5f494e189e0d/
>> +Fixes: https://autobuild.buildroot.org/results/b1a/b1a36f9971c97300670d8d772ace11e5fedceaaa/
>> +Reviewed-by: Li Wang <liwang@redhat.com>
>> +Acked-by: Cyril Hrubis <chrubis@suse.cz>
>> +Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
>> +Upstream: https://github.com/linux-test-project/ltp/commit/91e6272febf95e19a8300695dfc2089569adf9d8
>> +---
>> + configure.ac | 1 +
>> + lib/tlibio.c | 52 +++++++++++++++++++++++++++++++++++++++++++---------
>> + 2 files changed, 44 insertions(+), 9 deletions(-)
>> +
>> +diff --git a/configure.ac b/configure.ac
>> +index 8ec37639c1..12025be51c 100644
>> +--- a/configure.ac
>> ++++ b/configure.ac
>> +@@ -48,6 +48,7 @@ AC_CHECK_DECLS([PR_CAPBSET_DROP, PR_CAPBSET_READ],,,[#include <sys/prctl.h>])
>> + AC_CHECK_DECLS([SEM_STAT_ANY],,,[#include <sys/sem.h>])
>> +
>> + AC_CHECK_HEADERS_ONCE([ \
>> ++ aio.h \
>> + asm/ldt.h \
>> + asm/prctl.h \
>> + cpuid.h \
>> +diff --git a/lib/tlibio.c b/lib/tlibio.c
>> +index b877393df2..70e0c6f7d2 100644
>> +--- a/lib/tlibio.c
>> ++++ b/lib/tlibio.c
>> +@@ -88,7 +88,9 @@
>> + #include <stdint.h>
>> + #include <sys/uio.h> /* readv(2)/writev(2) */
>> + #include <string.h>
>> +-#include <aio.h>
>> ++#ifdef HAVE_AIO_H
>> ++# include <aio.h>
>> ++#endif
>> + #include <stdlib.h> /* atoi, abs */
>> +
>> + #include "tlibio.h" /* defines LIO* macros */
>> +@@ -108,7 +110,7 @@ struct lio_info_type Lio_info1[] = {
>> + {"b", LIO_IO_ASYNC | LIO_WAIT_SIGPAUSE, "async i/o using pause"},
>> + {"a", LIO_IO_ASYNC | LIO_WAIT_RECALL,
>> + "async i/o using recall/aio_suspend"},
>> +-#if defined(sgi) || (defined(__linux__) && !defined(__UCLIBC__))
>> ++#ifdef HAVE_AIO_H
>> + {"r",
>> + LIO_RANDOM | LIO_IO_TYPES | LIO_WAIT_TYPES,
>> + "random sync i/o types and wait methods"},
>> +@@ -159,7 +161,7 @@ char Lio_SysCall[PATH_MAX]; /* string containing last i/o system call */
>> +
>> + static volatile int Received_signal = 0; /* number of signals received */
>> + static volatile int Rec_signal;
>> +-#if defined(sgi) || (defined(__linux__) && !defined(__UCLIBC__))
>> ++#ifdef HAVE_AIO_H
>> + static volatile int Received_callback = 0; /* number of callbacks received */
>> + static volatile int Rec_callback;
>> + #endif
>> +@@ -399,7 +401,7 @@ static void lio_async_signal_handler(int sig)
>> + return;
>> + }
>> +
>> +-#if defined(sgi) || (defined(__linux__) && !defined(__UCLIBC__))
>> ++#ifdef HAVE_AIO_H
>> + /***********************************************************************
>> + * This is an internal callback handler.
>> + * If the handler is called, it will increment the Received_callback
>> +@@ -417,7 +419,7 @@ static void lio_async_callback_handler(union sigval sigval)
>> +
>> + return;
>> + }
>> +-#endif /* sgi */
>> ++#endif
>> +
>> + /***********************************************************************
>> + * lio_random_methods
>> +@@ -515,9 +517,11 @@ int lio_write_buffer(int fd, /* open file descriptor */
>> + int omethod = method;
>> + int listio_cmd; /* Holds the listio/lio_listio cmd */
>> + struct iovec iov; /* iovec for writev(2) */
>> ++#ifdef HAVE_AIO_H
>> + struct aiocb aiocbp; /* POSIX aio control block */
>> + struct aiocb *aiolist[1]; /* list of aio control blocks for lio_listio */
>> + off64_t poffset; /* pwrite(2) offset */
>> ++#endif
>> +
>> + /*
>> + * If LIO_RANDOM bit specified, get new method randomly.
>> +@@ -536,12 +540,15 @@ int lio_write_buffer(int fd, /* open file descriptor */
>> + *errmsg = Errormsg;
>> +
>> + Rec_signal = Received_signal; /* get the current number of signals received */
>> ++#ifdef HAVE_AIO_H
>> + Rec_callback = Received_callback; /* get the current number of callbacks received */
>> ++#endif
>> +
>> + memset(&iov, 0x00, sizeof(struct iovec));
>> + iov.iov_base = buffer;
>> + iov.iov_len = size;
>> +
>> ++#ifdef HAVE_AIO_H
>> + memset(&aiocbp, 0x00, sizeof(struct aiocb));
>> +
>> + aiocbp.aio_fildes = fd;
>> +@@ -589,6 +596,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
>> +
>> + poffset = (off64_t) ret;
>> + aiocbp.aio_offset = ret;
>> ++#endif
>> +
>> + /*
>> + * If the LIO_USE_SIGNAL bit is not set, only use the signal
>> +@@ -597,9 +605,9 @@ int lio_write_buffer(int fd, /* open file descriptor */
>> + * the signal.
>> + */
>> + if (sig && !(method & LIO_USE_SIGNAL) && !(method & LIO_WAIT_SIGTYPES)) {
>> +-
>> + sig = 0; /* ignore signal parameter */
>> + }
>> ++#ifdef HAVE_AIO_H
>> + if (sig && (method & LIO_WAIT_CBTYPES))
>> + sig = 0; /* ignore signal parameter */
>> +
>> +@@ -626,6 +634,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
>> + aiocbp.aio_sigevent.sigev_notify_attributes =
>> + (void *)(uintptr_t) size;
>> + }
>> ++#endif
>> +
>> + /*
>> + * Determine the system call that will be called and produce
>> +@@ -684,6 +693,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
>> + }
>> +
>> + else if (method & LIO_IO_ASYNC) {
>> ++#ifdef HAVE_AIO_H
>> + sprintf(Lio_SysCall,
>> + "aio_write(fildes=%d, buf, nbytes=%d, signo=%d)", fd,
>> + size, sig);
>> +@@ -705,9 +715,11 @@ int lio_write_buffer(int fd, /* open file descriptor */
>> + sigrelse(sig);
>> + return -errno;
>> + }
>> ++#endif
>> + }
>> + /* LIO_IO_ASYNC */
>> + else if (method & LIO_IO_SLISTIO) {
>> ++#ifdef HAVE_AIO_H
>> + aiocbp.aio_lio_opcode = LIO_WRITE;
>> + listio_cmd = LIO_WAIT;
>> + io_type = "lio_listio(3) sync write";
>> +@@ -739,9 +751,11 @@ int lio_write_buffer(int fd, /* open file descriptor */
>> +
>> + ret = lio_check_asyncio(io_type, size, &aiocbp, method);
>> + return ret;
>> ++#endif
>> + }
>> + /* LIO_IO_SLISTIO */
>> + else if (method & LIO_IO_ALISTIO) {
>> ++#ifdef HAVE_AIO_H
>> + aiocbp.aio_lio_opcode = LIO_WRITE;
>> + listio_cmd = LIO_NOWAIT;
>> + io_type = "lio_listio(3) async write";
>> +@@ -766,6 +780,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
>> + sigrelse(sig);
>> + return -errno;
>> + }
>> ++#endif
>> + }
>> + /* LIO_IO_ALISTIO */
>> + else if (method & LIO_IO_SYNCV) {
>> +@@ -796,6 +811,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
>> +
>> + return ret;
>> + } /* LIO_IO_SYNCV */
>> ++#ifdef HAVE_AIO_H
>> + else if (method & LIO_IO_SYNCP) {
>> + io_type = "pwrite(2)";
>> +
>> +@@ -827,6 +843,7 @@ int lio_write_buffer(int fd, /* open file descriptor */
>> +
>> + return ret;
>> + } /* LIO_IO_SYNCP */
>> ++#endif
>> + else {
>> + printf("DEBUG %s/%d: No I/O method chosen\n", __FILE__,
>> + __LINE__);
>> +@@ -836,7 +853,9 @@ int lio_write_buffer(int fd, /* open file descriptor */
>> + /*
>> + * wait for async io to complete.
>> + */
>> ++#ifdef HAVE_AIO_H
>> + ret = lio_wait4asyncio(method, fd, &aiocbp);
>> ++#endif
>> +
>> + /*
>> + * If there was an error waiting for async i/o to complete,
>> +@@ -862,7 +881,9 @@ int lio_write_buffer(int fd, /* open file descriptor */
>> + * have been updated but the actual i/o size if returned.
>> + */
>> +
>> ++#ifdef HAVE_AIO_H
>> + ret = lio_check_asyncio(io_type, size, &aiocbp, method);
>> ++#endif
>> +
>> + return ret;
>> + } /* end of lio_write_buffer */
>> +@@ -924,9 +945,11 @@ int lio_read_buffer(int fd, /* open file descriptor */
>> + int listio_cmd; /* Holds the listio/lio_listio cmd */
>> + int omethod = method;
>> + struct iovec iov; /* iovec for readv(2) */
>> ++#ifdef HAVE_AIO_H
>> + struct aiocb aiocbp; /* POSIX aio control block */
>> + struct aiocb *aiolist[1]; /* list of aio control blocks for lio_listio */
>> + off64_t poffset; /* pread(2) offset */
>> ++#endif
>> +
>> + /*
>> + * If LIO_RANDOM bit specified, get new method randomly.
>> +@@ -945,12 +968,15 @@ int lio_read_buffer(int fd, /* open file descriptor */
>> + *errmsg = Errormsg;
>> +
>> + Rec_signal = Received_signal; /* get the current number of signals received */
>> ++#ifdef HAVE_AIO_H
>> + Rec_callback = Received_callback; /* get the current number of callbacks received */
>> ++#endif
>> +
>> + memset(&iov, 0x00, sizeof(struct iovec));
>> + iov.iov_base = buffer;
>> + iov.iov_len = size;
>> +
>> ++#ifdef HAVE_AIO_H
>> + memset(&aiocbp, 0x00, sizeof(struct aiocb));
>> +
>> + aiocbp.aio_fildes = fd;
>> +@@ -998,6 +1024,7 @@ int lio_read_buffer(int fd, /* open file descriptor */
>> + }
>> + poffset = (off64_t) ret;
>> + aiocbp.aio_offset = ret;
>> ++#endif
>> +
>> + /*
>> + * If the LIO_USE_SIGNAL bit is not set, only use the signal
>> +@@ -1010,6 +1037,7 @@ int lio_read_buffer(int fd, /* open file descriptor */
>> + sig = 0; /* ignore signal parameter */
>> + }
>> +
>> ++#ifdef HAVE_AIO_H
>> + if (sig && (method & LIO_WAIT_CBTYPES))
>> + sig = 0; /* ignore signal parameter */
>> +
>> +@@ -1020,7 +1048,6 @@ int lio_read_buffer(int fd, /* open file descriptor */
>> + * old signal handler will not be restored.
>> + *** restoring the signal handler could be added ***
>> + */
>> +-
>> + if (sig && (method & LIO_WAIT_SIGTYPES)) {
>> + aiocbp.aio_sigevent.sigev_notify = SIGEV_SIGNAL;
>> + aiocbp.aio_sigevent.sigev_signo = sig;
>> +@@ -1035,6 +1062,7 @@ int lio_read_buffer(int fd, /* open file descriptor */
>> + aiocbp.aio_sigevent.sigev_notify_attributes =
>> + (void *)(uintptr_t) size;
>> + }
>> ++#endif
>> +
>> + /*
>> + * Determine the system call that will be called and produce
>> +@@ -1093,6 +1121,7 @@ int lio_read_buffer(int fd, /* open file descriptor */
>> + wait4sync_io(fd, 1);
>> + }
>> +
>> ++#ifdef HAVE_AIO_H
>> + } else if (method & LIO_IO_ASYNC) {
>> + sprintf(Lio_SysCall,
>> + "aio_read(fildes=%d, buf, nbytes=%d, signo=%d)", fd,
>> +@@ -1236,7 +1265,8 @@ int lio_read_buffer(int fd, /* open file descriptor */
>> + __FILE__, __LINE__, ret);
>> +
>> + return ret;
>> +- } /* LIO_IO_SYNCP */
>> ++#endif
>> ++ }
>> +
>> + else {
>> + printf("DEBUG %s/%d: No I/O method chosen\n", __FILE__,
>> +@@ -1248,7 +1278,9 @@ int lio_read_buffer(int fd, /* open file descriptor */
>> + * wait for async io to complete.
>> + * Note: Sync io should have returned prior to getting here.
>> + */
>> ++#ifdef HAVE_AIO_H
>> + ret = lio_wait4asyncio(method, fd, &aiocbp);
>> ++#endif
>> +
>> + /*
>> + * If there was an error waiting for async i/o to complete,
>> +@@ -1274,12 +1306,14 @@ int lio_read_buffer(int fd, /* open file descriptor */
>> + * have been updated but the actual i/o size if returned.
>> + */
>> +
>> ++#ifdef HAVE_AIO_H
>> + ret = lio_check_asyncio(io_type, size, &aiocbp, method);
>> ++#endif
>> +
>> + return ret;
>> + } /* end of lio_read_buffer */
>> +
>> +-#if !defined(__sun) && !defined(__hpux) && !defined(_AIX)
>> ++#ifdef HAVE_AIO_H
>> + /***********************************************************************
>> + * This function will check that async io was successful.
>> + * It can also be used to check sync listio since it uses the
>> +--
>> +2.50.0
>> +
>> --
>> 2.50.0
>>
>> _______________________________________________
>> buildroot mailing list
>> buildroot@buildroot.org
>> https://lists.buildroot.org/mailman/listinfo/buildroot
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-08-11 14:19 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-28 21:26 [Buildroot] [PATCH 1/1] package/ltp-testsuite: Fix uclibc-ng build Petr Vorel
2025-07-29 9:30 ` Waldemar Brodkorb
2025-07-30 1:01 ` Julien Olivain via buildroot
2025-08-07 18:24 ` Thomas Perale via buildroot
2025-08-11 14:12 ` Arnout Vandecappelle via buildroot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox