svn commit: r253527 - in head/sys: compat/freebsd32 kern

Konstantin Belousov kib at FreeBSD.org
Sun Jul 21 19:33:49 UTC 2013


Author: kib
Date: Sun Jul 21 19:33:48 2013
New Revision: 253527
URL: http://svnweb.freebsd.org/changeset/base/253527

Log:
  Move the convert_sigevent32() utility function into freebsd32_misc.c
  for consumption outside the vfs_aio.c.
  
  For SIGEV_THREAD_ID and SIGEV_SIGNAL notification delivery methods,
  also copy in the sigev_value, since librt event pumping loop compares
  note generation number with the value passed through sigev_value.
  
  Tested by:	Petr Salinger <Petr.Salinger at seznam.cz>
  Sponsored by:	The FreeBSD Foundation
  MFC after:	1 week

Modified:
  head/sys/compat/freebsd32/freebsd32_misc.c
  head/sys/compat/freebsd32/freebsd32_signal.h
  head/sys/kern/vfs_aio.c

Modified: head/sys/compat/freebsd32/freebsd32_misc.c
==============================================================================
--- head/sys/compat/freebsd32/freebsd32_misc.c	Sun Jul 21 19:21:18 2013	(r253526)
+++ head/sys/compat/freebsd32/freebsd32_misc.c	Sun Jul 21 19:33:48 2013	(r253527)
@@ -2912,3 +2912,29 @@ freebsd32_posix_fadvise(struct thread *t
 	return (kern_posix_fadvise(td, uap->fd, PAIR32TO64(off_t, uap->offset),
 	    PAIR32TO64(off_t, uap->len), uap->advice));
 }
+
+int
+convert_sigevent32(struct sigevent32 *sig32, struct sigevent *sig)
+{
+
+	CP(*sig32, *sig, sigev_notify);
+	switch (sig->sigev_notify) {
+	case SIGEV_NONE:
+		break;
+	case SIGEV_THREAD_ID:
+		CP(*sig32, *sig, sigev_notify_thread_id);
+		/* FALLTHROUGH */
+	case SIGEV_SIGNAL:
+		CP(*sig32, *sig, sigev_signo);
+		PTRIN_CP(*sig32, *sig, sigev_value.sival_ptr);
+		break;
+	case SIGEV_KEVENT:
+		CP(*sig32, *sig, sigev_notify_kqueue);
+		CP(*sig32, *sig, sigev_notify_kevent_flags);
+		PTRIN_CP(*sig32, *sig, sigev_value.sival_ptr);
+		break;
+	default:
+		return (EINVAL);
+	}
+	return (0);
+}

Modified: head/sys/compat/freebsd32/freebsd32_signal.h
==============================================================================
--- head/sys/compat/freebsd32/freebsd32_signal.h	Sun Jul 21 19:21:18 2013	(r253526)
+++ head/sys/compat/freebsd32/freebsd32_signal.h	Sun Jul 21 19:33:48 2013	(r253527)
@@ -97,6 +97,8 @@ struct sigevent32 {
 	} _sigev_un;
 };
 
+struct sigevent;
+int convert_sigevent32(struct sigevent32 *sig32, struct sigevent *sig);
 void siginfo_to_siginfo32(const siginfo_t *src, struct siginfo32 *dst);
 
 #endif /* !_COMPAT_FREEBSD32_SIGNAL_H_ */

Modified: head/sys/kern/vfs_aio.c
==============================================================================
--- head/sys/kern/vfs_aio.c	Sun Jul 21 19:21:18 2013	(r253526)
+++ head/sys/kern/vfs_aio.c	Sun Jul 21 19:33:48 2013	(r253527)
@@ -2755,31 +2755,6 @@ aiocb32_copyin_old_sigevent(struct aiocb
 }
 
 static int
-convert_sigevent32(struct sigevent32 *sig32, struct sigevent *sig)
-{
-
-	CP(*sig32, *sig, sigev_notify);
-	switch (sig->sigev_notify) {
-	case SIGEV_NONE:
-		break;
-	case SIGEV_THREAD_ID:
-		CP(*sig32, *sig, sigev_notify_thread_id);
-		/* FALLTHROUGH */
-	case SIGEV_SIGNAL:
-		CP(*sig32, *sig, sigev_signo);
-		break;
-	case SIGEV_KEVENT:
-		CP(*sig32, *sig, sigev_notify_kqueue);
-		CP(*sig32, *sig, sigev_notify_kevent_flags);
-		PTRIN_CP(*sig32, *sig, sigev_value.sival_ptr);
-		break;
-	default:
-		return (EINVAL);
-	}
-	return (0);
-}
-
-static int
 aiocb32_copyin(struct aiocb *ujob, struct aiocb *kjob)
 {
 	struct aiocb32 job32;


More information about the svn-src-all mailing list