summaryrefslogtreecommitdiffhomepage
path: root/auto/unix
diff options
context:
space:
mode:
authorRuslan Ermilov <ru@nginx.com>2014-05-23 16:37:05 +0400
committerRuslan Ermilov <ru@nginx.com>2014-05-23 16:37:05 +0400
commit5c170306718a8fe5f606f7bdd2d492a54c1cf0ce (patch)
tree0d7c14c86d7186f9dc5779a04ae8a532d9295883 /auto/unix
parent3e279a8eb492ff903ccc46cf03bbd95a30a7dcf1 (diff)
downloadnginx-5c170306718a8fe5f606f7bdd2d492a54c1cf0ce.tar.gz
nginx-5c170306718a8fe5f606f7bdd2d492a54c1cf0ce.tar.bz2
Events: use eventfd() instead of syscall(SYS_eventfd) if possible.
This fixes --with-file-aio support on systems that lack eventfd() syscall, notably aarch64 Linux. The syscall(SYS_eventfd) may still be necessary on systems that have eventfd() syscall in the kernel but lack it in glibc, e.g. as seen in the current CentOS 5 release.
Diffstat (limited to 'auto/unix')
-rwxr-xr-xauto/unix33
1 files changed, 27 insertions, 6 deletions
diff --git a/auto/unix b/auto/unix
index 10fd3d293..9b4764c6d 100755
--- a/auto/unix
+++ b/auto/unix
@@ -398,16 +398,36 @@ if [ $NGX_FILE_AIO = YES ]; then
if [ $ngx_found = yes ]; then
CORE_SRCS="$CORE_SRCS $FILE_AIO_SRCS"
+ fi
- elif [ $ngx_found = no ]; then
+ if [ $ngx_found = no ]; then
ngx_feature="Linux AIO support"
ngx_feature_name="NGX_HAVE_FILE_AIO"
ngx_feature_run=no
ngx_feature_incs="#include <linux/aio_abi.h>
- #include <sys/syscall.h>"
+ #include <sys/eventfd.h>"
ngx_feature_path=
ngx_feature_libs=
+ ngx_feature_test="struct iocb iocb;
+ iocb.aio_lio_opcode = IOCB_CMD_PREAD;
+ iocb.aio_flags = IOCB_FLAG_RESFD;
+ iocb.aio_resfd = -1;
+ (void) eventfd(0, 0)"
+ . auto/feature
+
+ if [ $ngx_found = yes ]; then
+ have=NGX_HAVE_EVENTFD . auto/have
+ have=NGX_HAVE_SYS_EVENTFD_H . auto/have
+ CORE_SRCS="$CORE_SRCS $LINUX_AIO_SRCS"
+ fi
+ fi
+
+ if [ $ngx_found = no ]; then
+
+ ngx_feature="Linux AIO support (SYS_eventfd)"
+ ngx_feature_incs="#include <linux/aio_abi.h>
+ #include <sys/syscall.h>"
ngx_feature_test="int n = SYS_eventfd;
struct iocb iocb;
iocb.aio_lio_opcode = IOCB_CMD_PREAD;
@@ -418,16 +438,17 @@ if [ $NGX_FILE_AIO = YES ]; then
if [ $ngx_found = yes ]; then
have=NGX_HAVE_EVENTFD . auto/have
CORE_SRCS="$CORE_SRCS $LINUX_AIO_SRCS"
+ fi
+ fi
- else
- cat << END
+ if [ $ngx_found = no ]; then
+ cat << END
$0: no supported file AIO was found
Currently file AIO is supported on FreeBSD 4.3+ and Linux 2.6.22+ only
END
- exit 1
- fi
+ exit 1
fi
fi