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

Reply via email to