diff options
author | Ian Campbell <ian.campbell@citrix.com> | 2013-03-15 13:15:43 +0000 |
---|---|---|
committer | Ian Campbell <ian.campbell@citrix.com> | 2013-04-11 11:09:25 +0100 |
commit | b073e110e81bc16d17d4d0bcc40f0137685bbf39 (patch) | |
tree | c20e05cfeaca7728a9a80883bd5fcf1951460953 /tools | |
parent | 1cc48e865b2faa3f8147c15fcec4c24c46b3d63f (diff) | |
download | xen-b073e110e81bc16d17d4d0bcc40f0137685bbf39.tar.gz xen-b073e110e81bc16d17d4d0bcc40f0137685bbf39.tar.bz2 xen-b073e110e81bc16d17d4d0bcc40f0137685bbf39.zip |
blktap2: use sys/eventfd.h if it is available
arm64 only has the eventfd2 system call and using the libc wrapper when
available hides this from us. eventfd() has been in libc since glibc 2.8.
This code is already Linux specific.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/blktap2/drivers/libaio-compat.h | 12 | ||||
-rw-r--r-- | tools/config.h.in | 3 | ||||
-rwxr-xr-x | tools/configure | 9 | ||||
-rw-r--r-- | tools/configure.ac | 2 |
4 files changed, 21 insertions, 5 deletions
diff --git a/tools/blktap2/drivers/libaio-compat.h b/tools/blktap2/drivers/libaio-compat.h index 353c36a869..47cd96de94 100644 --- a/tools/blktap2/drivers/libaio-compat.h +++ b/tools/blktap2/drivers/libaio-compat.h @@ -29,6 +29,7 @@ #ifndef __LIBAIO_COMPAT #define __LIBAIO_COMPAT +#include "../../config.h" #include <libaio.h> #include <unistd.h> #include <sys/syscall.h> @@ -50,6 +51,16 @@ static inline void __io_set_eventfd(struct iocb *iocb, int eventfd) c->resfd = eventfd; } +#ifdef HAVE_SYS_EVENTFD_H + +#include <sys/eventfd.h> + +static inline int tapdisk_sys_eventfd(int initval) +{ + return eventfd(initval, 0); +} + +#else /* Fallback */ #ifndef SYS_eventfd #ifndef __NR_eventfd # if defined(__alpha__) @@ -88,5 +99,6 @@ static inline int tapdisk_sys_eventfd(int initval) { return syscall(SYS_eventfd, initval, 0); } +#endif #endif /* __LIBAIO_COMPAT */ diff --git a/tools/config.h.in b/tools/config.h.in index 08e337a1f5..a67910b57d 100644 --- a/tools/config.h.in +++ b/tools/config.h.in @@ -27,6 +27,9 @@ /* Define to 1 if you have the <string.h> header file. */ #undef HAVE_STRING_H +/* Define to 1 if you have the <sys/eventfd.h> header file. */ +#undef HAVE_SYS_EVENTFD_H + /* Define to 1 if you have the <sys/stat.h> header file. */ #undef HAVE_SYS_STAT_H diff --git a/tools/configure b/tools/configure index 9f731724ea..a98dd9e0ad 100755 --- a/tools/configure +++ b/tools/configure @@ -7817,12 +7817,13 @@ fi # Checks for header files. -for ac_header in yajl/yajl_version.h +for ac_header in yajl/yajl_version.h sys/eventfd.h do : - ac_fn_c_check_header_mongrel "$LINENO" "yajl/yajl_version.h" "ac_cv_header_yajl_yajl_version_h" "$ac_includes_default" -if test "x$ac_cv_header_yajl_yajl_version_h" = x""yes; then : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF -#define HAVE_YAJL_YAJL_VERSION_H 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi diff --git a/tools/configure.ac b/tools/configure.ac index f6e2fec2af..36a3343b87 100644 --- a/tools/configure.ac +++ b/tools/configure.ac @@ -166,6 +166,6 @@ AC_CHECK_LIB([iconv], [libiconv_open], [libiconv="y"], [libiconv="n"]) AC_SUBST(libiconv) # Checks for header files. -AC_CHECK_HEADERS([yajl/yajl_version.h]) +AC_CHECK_HEADERS([yajl/yajl_version.h sys/eventfd.h]) AC_OUTPUT() |