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 */