allow some inspection of the kevent structs.
Index: kern/kern_event.c
===================================================================
RCS file: /cvs/src/sys/kern/kern_event.c,v
retrieving revision 1.67
diff -u -p -r1.67 kern_event.c
--- kern/kern_event.c 5 Dec 2015 10:11:53 -0000 1.67
+++ kern/kern_event.c 8 Dec 2015 17:41:29 -0000
@@ -508,6 +508,10 @@ sys_kevent(struct proc *p, void *v, regi
goto done;
for (i = 0; i < n; i++) {
kevp = &kq->kq_kev[i];
+#ifdef KTRACE
+ if (KTRPOINT(p, KTR_STRUCT))
+ ktrevent(p, kevp);
+#endif
kevp->flags &= ~EV_SYSFLAGS;
error = kqueue_register(kq, kevp, p);
if (error) {
@@ -793,6 +797,13 @@ start:
count--;
if (nkev == KQ_NEVENTS) {
splx(s);
+#ifdef KTRACE
+ if (KTRPOINT(p, KTR_STRUCT)) {
+ int i;
+ for (i = 0; i < nkev; i++)
+ ktrevent(p, &kq->kq_kev[i]);
+ }
+#endif
error = copyout(&kq->kq_kev, ulistp,
sizeof(struct kevent) * nkev);
ulistp += nkev;
@@ -806,9 +817,17 @@ start:
TAILQ_REMOVE(&kq->kq_head, &marker, kn_tqe);
splx(s);
done:
- if (nkev != 0)
+ if (nkev != 0) {
+#ifdef KTRACE
+ if (KTRPOINT(p, KTR_STRUCT)) {
+ int i;
+ for (i = 0; i < nkev; i++)
+ ktrevent(p, &kq->kq_kev[i]);
+ }
+#endif
error = copyout(&kq->kq_kev, ulistp,
sizeof(struct kevent) * nkev);
+ }
*retval = maxevents - count;
return (error);
}
Index: sys/ktrace.h
===================================================================
RCS file: /cvs/src/sys/sys/ktrace.h,v
retrieving revision 1.26
diff -u -p -r1.26 ktrace.h
--- sys/ktrace.h 25 Oct 2015 20:39:54 -0000 1.26
+++ sys/ktrace.h 8 Dec 2015 17:41:06 -0000
@@ -251,5 +251,7 @@ void ktrstruct(struct proc *, const c
ktrstruct(p, "iovec", s, (count) * sizeof(struct iovec))
#define ktrcmsghdr(p, c, len) \
ktrstruct(p, "cmsghdr", c, len)
+#define ktrevent(p, kev) \
+ ktrstruct(p, "kevent", kev, sizeof(struct kevent))
#endif /* !_KERNEL */