[PATCH 1/1] Add eventfd support.

Carmelo AMOROSO carmelo.amoroso at st.com
Mon Oct 31 06:03:04 UTC 2011


On 24/10/2011 19.07, jc at eclis.ch wrote:
> From: Jean-Christian de Rivaz <jc at eclis.ch>
> 
> Hello,
> 
> I whould like to share this simple patch that add the eventfd call to
> uClibc. Please review so it can be accepted to be merged.
> 
> Jean-Christian
> 
> Signed-off-by: Jean-Christian de Rivaz <jc at eclis.ch>
> ---
>  libc/sysdeps/linux/common/Makefile.in   |    3 +-
>  libc/sysdeps/linux/common/eventfd.c     |   18 +++++++++++
>  libc/sysdeps/linux/common/sys/eventfd.h |   48 +++++++++++++++++++++++++++++++
>  3 files changed, 68 insertions(+), 1 deletions(-)
>  create mode 100644 libc/sysdeps/linux/common/eventfd.c
>  create mode 100644 libc/sysdeps/linux/common/sys/eventfd.h
> 
> diff --git a/libc/sysdeps/linux/common/Makefile.in b/libc/sysdeps/linux/common/Makefile.in
> index 8f936ff..63f3f6f 100644
> --- a/libc/sysdeps/linux/common/Makefile.in
> +++ b/libc/sysdeps/linux/common/Makefile.in
> @@ -24,7 +24,8 @@ CSRC-$(UCLIBC_LINUX_SPECIFIC) += capget.c capset.c inotify.c ioperm.c iopl.c \
>  	remap_file_pages.c sched_getaffinity.c sched_setaffinity.c \
>  	sendfile64.c sendfile.c setfsgid.c setfsuid.c setresuid.c \
>  	splice.c vmsplice.c tee.c signalfd.c swapoff.c swapon.c \
> -	sync_file_range.c sysctl.c sysinfo.c timerfd.c uselib.c vhangup.c
> +	sync_file_range.c sysctl.c sysinfo.c eventfd.c timerfd.c uselib.c \
> +	vhangup.c
>  # NPTL needs these internally: madvise.c
>  CSRC-$(findstring y,$(UCLIBC_LINUX_SPECIFIC)$(UCLIBC_HAS_THREADS_NATIVE)) += madvise.c
>  ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y)
> diff --git a/libc/sysdeps/linux/common/eventfd.c b/libc/sysdeps/linux/common/eventfd.c
> new file mode 100644
> index 0000000..cc3f3f0
> --- /dev/null
> +++ b/libc/sysdeps/linux/common/eventfd.c
> @@ -0,0 +1,18 @@
> +/* vi: set sw=4 ts=4: */
> +/*
> + * eventfd() for uClibc
> + *
> + * Copyright (C) 2011 Jean-Christian de Rivaz <jc at eclis.ch>
> + *
> + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
> + */
> +
> +#include <sys/syscall.h>
> +#include <sys/eventfd.h>
> +
> +/*
> + * eventfd()
> + */
> +#ifdef __NR_eventfd
> +_syscall2(int, eventfd, int, count, int, flags)
> +#endif
> diff --git a/libc/sysdeps/linux/common/sys/eventfd.h b/libc/sysdeps/linux/common/sys/eventfd.h
> new file mode 100644
> index 0000000..311f803
> --- /dev/null
> +++ b/libc/sysdeps/linux/common/sys/eventfd.h
> @@ -0,0 +1,48 @@
> +/* Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library 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
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, write to the Free
> +   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
> +   02111-1307 USA.  */
> +
> +#ifndef	_SYS_EVENTFD_H
> +#define	_SYS_EVENTFD_H	1
> +
> +#include <stdint.h>
> +
> +
> +/* Type for event counter.  */
> +typedef uint64_t eventfd_t;
> +
> +/* Flags for signalfd.  */
> +enum
> +  {
> +    EFD_SEMAPHORE = 1,
> +#define EFD_SEMAPHORE EFD_SEMAPHORE
> +    EFD_CLOEXEC = 02000000,
> +#define EFD_CLOEXEC EFD_CLOEXEC
> +    EFD_NONBLOCK = 04000
> +#define EFD_NONBLOCK EFD_NONBLOCK
> +  };
> +
> +
> +__BEGIN_DECLS
> +
> +/* Return file descriptor for generic event channel.  Set initial
> +   value to COUNT.  */
> +extern int eventfd (int __count, int __flags) __THROW;
> +
> +__END_DECLS
> +
> +#endif /* sys/eventfd.h */

Looks fine, even if it could take into account the availability of
eventfd2 syscall to implement the wrapper.

Applied, thanks.

Carmelo



More information about the uClibc mailing list