]>
 
 
pilppa.org Git - linux-2.6-omap-h63xx.git/commit 
 
 
 
 
 
 
flag parameters: eventfd 
 
This patch adds the new eventfd2 syscall.  It extends the old eventfd 
syscall by one parameter which is meant to hold a flag value.  In this 
patch the only flag support is EFD_CLOEXEC which causes the close-on-exec 
flag for the returned file descriptor to be set. 
 
A new name EFD_CLOEXEC is introduced which in this implementation must 
have the same value as O_CLOEXEC. 
 
The following test must be adjusted for architectures other than x86 and 
x86-64 and in case the syscall numbers changed. 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
#include <fcntl.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <sys/syscall.h> 
 
#ifndef __NR_eventfd2 
# ifdef __x86_64__ 
#  define __NR_eventfd2 290 
# elif defined __i386__ 
#  define __NR_eventfd2 328 
# else 
#  error "need __NR_eventfd2" 
# endif 
#endif 
 
#define EFD_CLOEXEC O_CLOEXEC 
 
int 
main (void) 
{ 
  int fd = syscall (__NR_eventfd2, 1, 0); 
  if (fd == -1) 
    { 
      puts ("eventfd2(0) failed"); 
      return 1; 
    } 
  int coe = fcntl (fd, F_GETFD); 
  if (coe == -1) 
    { 
      puts ("fcntl failed"); 
      return 1; 
    } 
  if (coe & FD_CLOEXEC) 
    { 
      puts ("eventfd2(0) sets close-on-exec flag"); 
      return 1; 
    } 
  close (fd); 
 
  fd = syscall (__NR_eventfd2, 1, EFD_CLOEXEC); 
  if (fd == -1) 
    { 
      puts ("eventfd2(EFD_CLOEXEC) failed"); 
      return 1; 
    } 
  coe = fcntl (fd, F_GETFD); 
  if (coe == -1) 
    { 
      puts ("fcntl failed"); 
      return 1; 
    } 
  if ((coe & FD_CLOEXEC) == 0) 
    { 
      puts ("eventfd2(EFD_CLOEXEC) does not set close-on-exec flag"); 
      return 1; 
    } 
  close (fd); 
 
  puts ("OK"); 
 
  return 0; 
} 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
 
[akpm@linux-foundation.org: add sys_ni stub] 
Signed-off-by: Ulrich Drepper <drepper@redhat.com>  
Acked-by: Davide Libenzi <davidel@xmailserver.org>  
Cc: Michael Kerrisk <mtk.manpages@googlemail.com>  
Cc: <linux-arch@vger.kernel.org>  
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>  
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>