Makefile of eventfd test case uses cond.mk.  I introduce
ltp-eventfd.m4 instead of cond.mk.

To pass a library name to Makefile, I introduced config.mk.in. The
purpose of config.mk.in is very similar to config.h.in; config.h.in is
for C source code and config.mk.in is for Makefile.



In addition I changed following points:

 1. Some "Note..." messages in Makefile are removed.
 2. don't use the kernel version in headers to detect
    whether the system call is available or not.
 3. Use flags passed to ltp own eventfd wrapper.


Before my change ltp own eventfd wrapper calls eventfd
system call like this:

 static int
 myeventfd(unsigned int initval, int flags)
 {
        return syscall(__NR_eventfd, initval);
 }

As you can see, FLAGS argument is not used. I guess 
this is a bug. So I changed like:

 static int
 myeventfd(unsigned int initval, int flags)
 {
        return syscall(__NR_eventfd, initval, flags);
 }

If I should provide a separated patch for this FLAGS
issue from autoconf/configure related modification, tell me.



Signed-off-by: Masatake YAMATO <yam...@redhat.com>



diff --git a/config.mk.in b/config.mk.in
new file mode 100644
index 0000000..22bad68
--- /dev/null
+++ b/config.mk.in
@@ -0,0 +1 @@
+AIO_LIBS = @AIO_LIBS@
diff --git a/configure.ac b/configure.ac
index 05df57d..bc710b3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,7 @@
 AC_PREREQ([2.61])
 AC_INIT([ltp], [cvs], [ltp-resu...@lists.sourceforge.net])
 AC_CONFIG_HEADERS([include/config.h])
+AC_CONFIG_FILES([config.mk])
 
 
 m4_include([m4/ltp-signalfd.m4])
@@ -9,5 +10,8 @@ LTP_CHECK_SYSCALL_SIGNALFD
 m4_include([m4/ltp-modify_ldt.m4])
 LTP_CHECK_SYSCALL_MODIFY_LDT
 
+m4_include([m4/ltp-eventfd.m4])
+LTP_CHECK_SYSCALL_EVENTFD
+
 
 AC_OUTPUT
diff --git a/m4/ltp-eventfd.m4 b/m4/ltp-eventfd.m4
new file mode 100644
index 0000000..07dbd9b
--- /dev/null
+++ b/m4/ltp-eventfd.m4
@@ -0,0 +1,40 @@
+dnl
+dnl Copyright (c) Red Hat Inc., 2008
+dnl
+dnl This program is free software;  you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY;  without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+dnl the GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program;  if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+dnl
+dnl Author: Masatake YAMATO <yam...@redhat.com>
+dnl
+
+dnl
+dnl LTP_CHECK_SYSCALL_EVENTFD
+dnl ----------------------------
+dnl
+AC_DEFUN([LTP_CHECK_SYSCALL_EVENTFD],
+[dnl
+AC_CHECK_HEADERS(sys/eventfd.h)
+
+AC_CHECK_HEADERS(libaio.h)
+
+AC_CHECK_LIB(aio,io_setup)
+for x in $LIBS; do
+    if test "$x" = -laio; then
+      AIO_LIBS="$AIO_LIBS -laio"
+    fi
+done
+AC_SUBST(AIO_LIBS)
+
+AC_CHECK_FUNCS(io_set_eventfd)
+])dnl
diff --git a/testcases/kernel/syscalls/eventfd/Makefile 
b/testcases/kernel/syscalls/eventfd/Makefile
index fc31597..e533fec 100644
--- a/testcases/kernel/syscalls/eventfd/Makefile
+++ b/testcases/kernel/syscalls/eventfd/Makefile
@@ -16,42 +16,17 @@
 #  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
-include ../utils/cond.mk
+
+include ../../../../config.mk
 
 
 CFLAGS += -I../../../../include -Wall
 LDLIBS += -L../../../../lib -lltp
 
-check_aio_eventfd = $(shell \
-       if printf \
-       "\#include <libaio.h>\n\
-       int main() \
-       { \
-       io_set_eventfd(NULL, 0); \
-       return 0; \
-       }" | $(CC) -xc -laio - > /dev/null 2>&1 ; \
-       then echo yes ; \
-       else echo no ; fi)
-
-HAS_LIBAIO = $(call check_header,libaio.h)
-HAS_LIBAIO_EVENTFD = $(call check_aio_eventfd)
-
-ifeq ($(HAS_LIBAIO_EVENTFD),yes)
-CFLAGS += -DHAS_AIO_EVENTFD
-LDLIBS += -laio
-endif
-
 SRCS    = $(wildcard *.c)
 TARGETS = $(patsubst %.c, %, $(wildcard *.c))
 
 all: $(TARGETS)
-ifeq ($(HAS_LIBAIO),no)
-       @echo "Note: Libaio is required for eventfd overflow testing.";
-else
-ifeq ($(HAS_LIBAIO_EVENTFD),no)
-       @echo "Note: Eventfd support is required in libaio for overflow 
testing.";
-endif
-endif
 
 install:
        @set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done
diff --git a/testcases/kernel/syscalls/eventfd/eventfd01.c 
b/testcases/kernel/syscalls/eventfd/eventfd01.c
index 4cf0bc4..863023d 100644
--- a/testcases/kernel/syscalls/eventfd/eventfd01.c
+++ b/testcases/kernel/syscalls/eventfd/eventfd01.c
@@ -44,6 +44,8 @@
  *     None
  */
 
+#include "config.h"
+
 #include <sys/select.h>
 #include <sys/signal.h>
 #include <sys/types.h>
@@ -59,21 +61,32 @@
 #include <usctest.h>
 #include <linux_syscall_numbers.h>
 
-#ifdef HAS_AIO_EVENTFD
+#ifdef HAVE_SYS_EVENTFD_H
+#include <sys/eventfd.h>
+#endif
+
+#ifdef HAVE_LIBAIO_H
 #include <libaio.h>
 #endif
 
 static void setup(void);
 static void cleanup(void);
 
-char *TCID = "eventfd01";
+TCID_DEFINE(eventfd01);
 int TST_TOTAL = 15;
 extern int Tst_count;
 
 static int
 myeventfd(unsigned int initval, int flags)
 {
-       return syscall(__NR_eventfd, initval);
+#if   defined HAVE_SYS_EVENTFD_H
+    return eventfd(initval, flags);
+#elif defined (__NR_eventfd)
+    return syscall(__NR_eventfd, initval, flags);
+#else
+    errno = ENOSYS;
+    return -1;
+#endif
 }
 
 /*
@@ -512,7 +525,7 @@ child_inherit_test(int fd)
        }
 }
 
-#ifdef HAS_AIO_EVENTFD
+#ifdef HAVE_IO_SET_EVENTFD
 /*
  * Test whether counter overflow is detected and handled correctly. 
  *
@@ -776,9 +789,6 @@ setup(void)
        /* capture signals */
        tst_sig(FORK, DEF_HANDLER, cleanup);
 
-       if (tst_kvercmp(2, 6, 22) < 0)
-               tst_brkm(TCONF, cleanup, "2.6.22 or greater kernel required");
-
        /* Pause if that option was specified
         * TEST_PAUSE contains the code to fork the test with the -c option.
         */

------------------------------------------------------------------------------
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to