In function kqueue_scan(), variables count and nkev follow relation count + nkev == maxevents. The code becomes a bit simpler if count is removed.
OK? Index: kern/kern_event.c =================================================================== RCS file: src/sys/kern/kern_event.c,v retrieving revision 1.147 diff -u -p -r1.147 kern_event.c --- kern/kern_event.c 9 Dec 2020 18:58:19 -0000 1.147 +++ kern/kern_event.c 14 Dec 2020 15:32:57 -0000 @@ -950,13 +950,11 @@ kqueue_scan(struct kqueue_scan_state *sc { struct kqueue *kq = scan->kqs_kq; struct knote *kn; - int s, count, nkev = 0, error = 0; + int s, error = 0, nkev = 0; - count = maxevents; - if (count == 0) + if (maxevents == 0) goto done; retry: - KASSERT(count == maxevents); KASSERT(nkev == 0); if (kq->kq_state & KQ_DYING) { @@ -1005,7 +1003,7 @@ retry: } TAILQ_INSERT_HEAD(&kq->kq_head, &scan->kqs_start, kn_tqe); - while (count) { + while (nkev < maxevents) { kn = TAILQ_NEXT(&scan->kqs_start, kn_tqe); if (kn->kn_filter == EVFILT_MARKER) { if (kn == &scan->kqs_end) @@ -1042,7 +1040,6 @@ retry: *kevp = kn->kn_kevent; kevp++; nkev++; - count--; scan->kqs_nevent++; /*