On Fri, 2009-06-12 at 18:51 +0530, Subrata Modak wrote: > >On Thu, 2009-06-11 at 19:50 -0700, Davide Libenzi wrote: > >On Fri, 12 Jun 2009, Subrata Modak wrote: > > > > > Hi Davide, > > > > > > Your had introduced an improvement to support for semaphore-like > > > behavior in eventfd for linux-2.6.30. And also have a small test program > > > envisaged through: > > > http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=bcd0b235bf3808dec5115c381cd55568f63b85f0, > > > http://www.xmailserver.org/eventfd-sem.c, > > > > > > Would you be willing to share this test program for inclusion in Linux > > > Test Project (http://ltp.sourceforge.net/) under GPLv2 ? If affirmative, > > > can you confirm by replying to this mail with your consent/Sign-off. > > > > Sure, it's all yours ;)
Thanks David. Regards-- Subrata > > So, here it goes. The following patch integrates this to LTP. > > Signed-off-by: Subrata Modak <[email protected]> > Original-author-and-copyright-holder: Davide Libenzi <[email protected]> > To: Davide Libenzi <[email protected]> > Cc: Michael Kerrisk <[email protected]> > Cc: Ulrich Drepper <[email protected]> > Cc: ltp-list <[email protected]> > --- > > --- ltp-full-20090531.orig/runtest/syscalls 2009-06-12 17:03:15.000000000 > +0530 > +++ ltp-full-20090531/runtest/syscalls 2009-06-12 18:13:49.000000000 > +0530 > @@ -126,6 +126,7 @@ eventfd01 eventfd01 > > eventfd2_01 eventfd2_01 > eventfd2_02 eventfd2_02 > +eventfd2_03 eventfd2_03 > > execl01 execl01 > execle01 execle01 > --- ltp-full-20090531.orig/testcases/kernel/syscalls/eventfd2/eventfd2_03.c > 1970-01-01 05:30:00.000000000 +0530 > +++ ltp-full-20090531/testcases/kernel/syscalls/eventfd2/eventfd2_03.c > 2009-06-12 18:17:49.000000000 +0530 > @@ -0,0 +1,135 @@ > +/* > + * eventfd-sem by Davide Libenzi (Simple test for eventfd sempahore) > + * Copyright (C) 2009 Davide Libenzi > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License, or > + * (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA > + * > + * Davide Libenzi <[email protected]> > + * Reference: > http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=bcd0b235bf3808dec5115c381cd55568f63b85f0 > + * Reference: http://www.xmailserver.org/eventfd-sem.c > + * eventfd: testing improved support for semaphore-like behavior in > linux-2.6.30 > + * > + */ > + > +#include <sys/types.h> > +#include <sys/syscall.h> > +#include <sys/stat.h> > +#include <fcntl.h> > +#include <stdlib.h> > +#include <stdio.h> > +#include <string.h> > +#include <unistd.h> > +#include <errno.h> > + > +char *TCID = "eventfd2_02"; /* test program identifier*/ > + > +#ifndef EFD_SEMLIKE > +#define EFD_SEMLIKE (1 << 0) > +#endif > + > +#ifndef __NR_eventfd2 > +#if defined(__x86_64__) > +#define __NR_eventfd2 290 > +#elif defined(__i386__) > +#define __NR_eventfd2 328 > +#else > +#error Cannot detect your architecture! > +#endif > +#endif > + > + > +static int eventfd2(int count, int flags) { > + return syscall(__NR_eventfd2, count, flags); > +} > + > +static void xsem_wait(int fd) { > + u_int64_t cntr; > + > + if (read(fd, &cntr, sizeof(cntr)) != sizeof(cntr)) { > + perror("reading eventfd"); > + exit(1); > + } > + fprintf(stdout, "[%u] wait completed on %d: count=%llu\n", > + getpid(), fd, cntr); > +} > + > +static void xsem_post(int fd, int count) { > + u_int64_t cntr = count; > + > + if (write(fd, &cntr, sizeof(cntr)) != sizeof(cntr)) { > + perror("writing eventfd"); > + exit(1); > + } > +} > + > +static void sem_player(int fd1, int fd2) { > + fprintf(stdout, "[%u] posting 1 on %d\n", getpid(), fd1); > + xsem_post(fd1, 1); > + > + fprintf(stdout, "[%u] waiting on %d\n", getpid(), fd2); > + xsem_wait(fd2); > + > + fprintf(stdout, "[%u] posting 1 on %d\n", getpid(), fd1); > + xsem_post(fd1, 1); > + > + fprintf(stdout, "[%u] waiting on %d\n", getpid(), fd2); > + xsem_wait(fd2); > + > + fprintf(stdout, "[%u] posting 5 on %d\n", getpid(), fd1); > + xsem_post(fd1, 5); > + > + fprintf(stdout, "[%u] waiting 5 times on %d\n", getpid(), fd2); > + xsem_wait(fd2); > + xsem_wait(fd2); > + xsem_wait(fd2); > + xsem_wait(fd2); > + xsem_wait(fd2); > +} > + > +static void usage(char const *prg) { > + fprintf(stderr, "use: %s [-h]\n", prg); > +} > + > +int main (int argc, char **argv) { > + int c, fd1, fd2, status; > + pid_t cpid_poster, cpid_waiter; > + > + while ((c = getopt(argc, argv, "h")) != -1) { > + switch (c) { > + default: > + usage(argv[0]); > + return 1; > + } > + } > + if ((fd1 = eventfd2(0, EFD_SEMLIKE)) == -1 || > + (fd2 = eventfd2(0, EFD_SEMLIKE)) == -1) { > + perror("eventfd2"); > + return 1; > + } > + if ((cpid_poster = fork()) == 0) { > + sem_player(fd1, fd2); > + exit(0); > + } > + if ((cpid_waiter = fork()) == 0) { > + sem_player(fd2, fd1); > + exit(0); > + } > + waitpid(cpid_poster, &status, 0); > + waitpid(cpid_waiter, &status, 0); > + > + return 0; > +} > + > + > > --- > Regards-- > Subrata > > > > > - Davide > > > > ------------------------------------------------------------------------------ Crystal Reports - New Free Runtime and 30 Day Trial Check out the new simplified licensing option that enables unlimited royalty-free distribution of the report engine for externally facing server and web deployment. http://p.sf.net/sfu/businessobjects _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
