Module Name:    src
Committed By:   jdolecek
Date:           Sun Dec 27 12:45:33 UTC 2020

Modified Files:
        src/sys/kern: kern_event.c

Log Message:
reduce indentation for the main processing loop in kqueue_scan(), this also
makes the code more similar to FreeBSD; NFCI

part of PR kern/50094


To generate a diff of this commit:
cvs rdiff -u -r1.109 -r1.110 src/sys/kern/kern_event.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/kern_event.c
diff -u src/sys/kern/kern_event.c:1.109 src/sys/kern/kern_event.c:1.110
--- src/sys/kern/kern_event.c:1.109	Fri Dec 11 03:00:09 2020
+++ src/sys/kern/kern_event.c	Sun Dec 27 12:45:33 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_event.c,v 1.109 2020/12/11 03:00:09 thorpej Exp $	*/
+/*	$NetBSD: kern_event.c,v 1.110 2020/12/27 12:45:33 jdolecek Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -59,7 +59,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_event.c,v 1.109 2020/12/11 03:00:09 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_event.c,v 1.110 2020/12/27 12:45:33 jdolecek Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1445,139 +1445,142 @@ kqueue_scan(file_t *fp, size_t maxevents
 			}
 		}
 		mutex_spin_exit(&kq->kq_lock);
-	} else {
-		/* mark end of knote list */
-		TAILQ_INSERT_TAIL(&kq->kq_head, marker, kn_tqe);
+		goto done;
+	}
 
-		/*
-		 * Acquire the fdp->fd_lock interlock to avoid races with
-		 * file creation/destruction from other threads.
-		 */
-		mutex_spin_exit(&kq->kq_lock);
-		mutex_enter(&fdp->fd_lock);
-		mutex_spin_enter(&kq->kq_lock);
+	/* mark end of knote list */
+	TAILQ_INSERT_TAIL(&kq->kq_head, marker, kn_tqe);
 
-		while (count != 0) {
-			kn = TAILQ_FIRST(&kq->kq_head);	/* get next knote */
-			while ((kn->kn_status & KN_MARKER) != 0) {
-				if (kn == marker) {
-					/* it's our marker, stop */
-					TAILQ_REMOVE(&kq->kq_head, kn, kn_tqe);
-					if (count < maxevents || (tsp != NULL &&
-					    (timeout = gettimeleft(&ats,
-					    &sleepts)) <= 0))
-						goto done;
-					mutex_exit(&fdp->fd_lock);
-					goto retry;
-				}
-				/* someone else's marker. */
-				kn = TAILQ_NEXT(kn, kn_tqe);
+	/*
+	 * Acquire the fdp->fd_lock interlock to avoid races with
+	 * file creation/destruction from other threads.
+	 */
+	mutex_spin_exit(&kq->kq_lock);
+	mutex_enter(&fdp->fd_lock);
+	mutex_spin_enter(&kq->kq_lock);
+
+	while (count != 0) {
+		kn = TAILQ_FIRST(&kq->kq_head);	/* get next knote */
+		while ((kn->kn_status & KN_MARKER) != 0) {
+			if (kn == marker) {
+				/* it's our marker, stop */
+				TAILQ_REMOVE(&kq->kq_head, kn, kn_tqe);
+				if (count < maxevents || (tsp != NULL &&
+				    (timeout = gettimeleft(&ats,
+				    &sleepts)) <= 0))
+					goto queue_processed;
+				mutex_exit(&fdp->fd_lock);
+				goto retry;
 			}
-			kq_check(kq);
-			kq->kq_count--;
-			TAILQ_REMOVE(&kq->kq_head, kn, kn_tqe);
-			kn->kn_status &= ~KN_QUEUED;
-			kn->kn_status |= KN_BUSY;
-			kq_check(kq);
-			if (kn->kn_status & KN_DISABLED) {
+			/* someone else's marker. */
+			kn = TAILQ_NEXT(kn, kn_tqe);
+		}
+		kq_check(kq);
+		kq->kq_count--;
+		TAILQ_REMOVE(&kq->kq_head, kn, kn_tqe);
+		kn->kn_status &= ~KN_QUEUED;
+		kn->kn_status |= KN_BUSY;
+		kq_check(kq);
+		if (kn->kn_status & KN_DISABLED) {
+			kn->kn_status &= ~KN_BUSY;
+			/* don't want disabled events */
+			continue;
+		}
+		if ((kn->kn_flags & EV_ONESHOT) == 0) {
+			mutex_spin_exit(&kq->kq_lock);
+			KASSERT(kn->kn_fop != NULL);
+			KASSERT(kn->kn_fop->f_event != NULL);
+			KERNEL_LOCK(1, NULL);		/* XXXSMP */
+			KASSERT(mutex_owned(&fdp->fd_lock));
+			rv = (*kn->kn_fop->f_event)(kn, 0);
+			KERNEL_UNLOCK_ONE(NULL);	/* XXXSMP */
+			mutex_spin_enter(&kq->kq_lock);
+			/* Re-poll if note was re-enqueued. */
+			if ((kn->kn_status & KN_QUEUED) != 0) {
 				kn->kn_status &= ~KN_BUSY;
-				/* don't want disabled events */
 				continue;
 			}
-			if ((kn->kn_flags & EV_ONESHOT) == 0) {
-				mutex_spin_exit(&kq->kq_lock);
-				KASSERT(kn->kn_fop != NULL);
-				KASSERT(kn->kn_fop->f_event != NULL);
-				KERNEL_LOCK(1, NULL);		/* XXXSMP */
-				KASSERT(mutex_owned(&fdp->fd_lock));
-				rv = (*kn->kn_fop->f_event)(kn, 0);
-				KERNEL_UNLOCK_ONE(NULL);	/* XXXSMP */
-				mutex_spin_enter(&kq->kq_lock);
-				/* Re-poll if note was re-enqueued. */
-				if ((kn->kn_status & KN_QUEUED) != 0) {
-					kn->kn_status &= ~KN_BUSY;
-					continue;
-				}
-				if (rv == 0) {
-					/*
-					 * non-ONESHOT event that hasn't
-					 * triggered again, so de-queue.
-					 */
-					kn->kn_status &= ~(KN_ACTIVE|KN_BUSY);
-					continue;
-				}
-			}
-			KASSERT(kn->kn_fop != NULL);
-			touch = (!kn->kn_fop->f_isfd &&
-					kn->kn_fop->f_touch != NULL);
-			/* XXXAD should be got from f_event if !oneshot. */
-			if (touch) {
-				mutex_spin_exit(&kq->kq_lock);
-				KERNEL_LOCK(1, NULL);		/* XXXSMP */
-				(*kn->kn_fop->f_touch)(kn, kevp, EVENT_PROCESS);
-				KERNEL_UNLOCK_ONE(NULL);	/* XXXSMP */
-				mutex_spin_enter(&kq->kq_lock);
-			} else {
-				*kevp = kn->kn_kevent;
-			}
-			kevp++;
-			nkev++;
-			if (kn->kn_flags & EV_ONESHOT) {
-				/* delete ONESHOT events after retrieval */
-				kn->kn_status &= ~KN_BUSY;
-				mutex_spin_exit(&kq->kq_lock);
-				knote_detach(kn, fdp, true);
-				mutex_enter(&fdp->fd_lock);
-				mutex_spin_enter(&kq->kq_lock);
-			} else if (kn->kn_flags & EV_CLEAR) {
-				/* clear state after retrieval */
-				kn->kn_data = 0;
-				kn->kn_fflags = 0;
+			if (rv == 0) {
 				/*
-				 * Manually clear knotes who weren't
-				 * 'touch'ed.
+				 * non-ONESHOT event that hasn't
+				 * triggered again, so de-queue.
 				 */
-				if (touch == 0) {
-					kn->kn_data = 0;
-					kn->kn_fflags = 0;
-				}
-				kn->kn_status &= ~(KN_QUEUED|KN_ACTIVE|KN_BUSY);
-			} else if (kn->kn_flags & EV_DISPATCH) {
-				kn->kn_status |= KN_DISABLED;
-				kn->kn_status &= ~(KN_QUEUED|KN_ACTIVE|KN_BUSY);
-			} else {
-				/* add event back on list */
-				kq_check(kq);
-				kn->kn_status |= KN_QUEUED;
-				kn->kn_status &= ~KN_BUSY;
-				TAILQ_INSERT_TAIL(&kq->kq_head, kn, kn_tqe);
-				kq->kq_count++;
-				kq_check(kq);
-			}
-			if (nkev == kevcnt) {
-				/* do copyouts in kevcnt chunks */
-				mutex_spin_exit(&kq->kq_lock);
-				mutex_exit(&fdp->fd_lock);
-				error = (*keops->keo_put_events)
-				    (keops->keo_private,
-				    kevbuf, ulistp, nevents, nkev);
-				mutex_enter(&fdp->fd_lock);
-				mutex_spin_enter(&kq->kq_lock);
-				nevents += nkev;
-				nkev = 0;
-				kevp = kevbuf;
+				kn->kn_status &= ~(KN_ACTIVE|KN_BUSY);
+				continue;
 			}
-			count--;
-			if (error != 0 || count == 0) {
-				/* remove marker */
-				TAILQ_REMOVE(&kq->kq_head, marker, kn_tqe);
-				break;
+		}
+		KASSERT(kn->kn_fop != NULL);
+		touch = (!kn->kn_fop->f_isfd &&
+				kn->kn_fop->f_touch != NULL);
+		/* XXXAD should be got from f_event if !oneshot. */
+		if (touch) {
+			mutex_spin_exit(&kq->kq_lock);
+			KERNEL_LOCK(1, NULL);		/* XXXSMP */
+			(*kn->kn_fop->f_touch)(kn, kevp, EVENT_PROCESS);
+			KERNEL_UNLOCK_ONE(NULL);	/* XXXSMP */
+			mutex_spin_enter(&kq->kq_lock);
+		} else {
+			*kevp = kn->kn_kevent;
+		}
+		kevp++;
+		nkev++;
+		if (kn->kn_flags & EV_ONESHOT) {
+			/* delete ONESHOT events after retrieval */
+			kn->kn_status &= ~KN_BUSY;
+			mutex_spin_exit(&kq->kq_lock);
+			knote_detach(kn, fdp, true);
+			mutex_enter(&fdp->fd_lock);
+			mutex_spin_enter(&kq->kq_lock);
+		} else if (kn->kn_flags & EV_CLEAR) {
+			/* clear state after retrieval */
+			kn->kn_data = 0;
+			kn->kn_fflags = 0;
+			/*
+			 * Manually clear knotes who weren't
+			 * 'touch'ed.
+			 */
+			if (touch == 0) {
+				kn->kn_data = 0;
+				kn->kn_fflags = 0;
 			}
+			kn->kn_status &= ~(KN_QUEUED|KN_ACTIVE|KN_BUSY);
+		} else if (kn->kn_flags & EV_DISPATCH) {
+			kn->kn_status |= KN_DISABLED;
+			kn->kn_status &= ~(KN_QUEUED|KN_ACTIVE|KN_BUSY);
+		} else {
+			/* add event back on list */
+			kq_check(kq);
+			kn->kn_status |= KN_QUEUED;
+			kn->kn_status &= ~KN_BUSY;
+			TAILQ_INSERT_TAIL(&kq->kq_head, kn, kn_tqe);
+			kq->kq_count++;
+			kq_check(kq);
+		}
+		if (nkev == kevcnt) {
+			/* do copyouts in kevcnt chunks */
+			mutex_spin_exit(&kq->kq_lock);
+			mutex_exit(&fdp->fd_lock);
+			error = (*keops->keo_put_events)
+			    (keops->keo_private,
+			    kevbuf, ulistp, nevents, nkev);
+			mutex_enter(&fdp->fd_lock);
+			mutex_spin_enter(&kq->kq_lock);
+			nevents += nkev;
+			nkev = 0;
+			kevp = kevbuf;
+		}
+		count--;
+		if (error != 0 || count == 0) {
+			/* remove marker */
+			TAILQ_REMOVE(&kq->kq_head, marker, kn_tqe);
+			break;
 		}
- done:
-		mutex_spin_exit(&kq->kq_lock);
-		mutex_exit(&fdp->fd_lock);
 	}
+queue_processed:
+	mutex_spin_exit(&kq->kq_lock);
+	mutex_exit(&fdp->fd_lock);
+
+done:
 	if (nkev != 0) {
 		/* copyout remaining events */
 		error = (*keops->keo_put_events)(keops->keo_private,

Reply via email to