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-head
mailing list