Module Name:    src
Committed By:   pooka
Date:           Wed Jan 14 18:51:56 UTC 2015

Modified Files:
        src/sys/rump/librump/rumpkern: intr.c

Log Message:
Execute softints in the order in which they are scheduled (per level).


To generate a diff of this commit:
cvs rdiff -u -r1.47 -r1.48 src/sys/rump/librump/rumpkern/intr.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/rump/librump/rumpkern/intr.c
diff -u src/sys/rump/librump/rumpkern/intr.c:1.47 src/sys/rump/librump/rumpkern/intr.c:1.48
--- src/sys/rump/librump/rumpkern/intr.c:1.47	Wed Jan 14 18:46:38 2015
+++ src/sys/rump/librump/rumpkern/intr.c	Wed Jan 14 18:51:56 2015
@@ -1,7 +1,7 @@
-/*	$NetBSD: intr.c,v 1.47 2015/01/14 18:46:38 pooka Exp $	*/
+/*	$NetBSD: intr.c,v 1.48 2015/01/14 18:51:56 pooka Exp $	*/
 
 /*
- * Copyright (c) 2008-2010 Antti Kantee.  All Rights Reserved.
+ * Copyright (c) 2008-2010, 2015 Antti Kantee.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.47 2015/01/14 18:46:38 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.48 2015/01/14 18:51:56 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -64,13 +64,13 @@ struct softint_percpu {
 	bool sip_onlist;
 	bool sip_onlist_cpu;
 
-	LIST_ENTRY(softint_percpu) sip_entries;		/* scheduled */
+	TAILQ_ENTRY(softint_percpu) sip_entries;	/* scheduled */
 	TAILQ_ENTRY(softint_percpu) sip_entries_cpu;	/* to be scheduled */
 };
 
 struct softint_lev {
 	struct rumpuser_cv *si_cv;
-	LIST_HEAD(, softint_percpu) si_pending;
+	TAILQ_HEAD(, softint_percpu) si_pending;
 };
 
 static TAILQ_HEAD(, softint_percpu) sicpupending \
@@ -161,8 +161,8 @@ sithread(void *arg)
 	si_lvl = &si_lvlp[mylevel];
 
 	for (;;) {
-		if (!LIST_EMPTY(&si_lvl->si_pending)) {
-			sip = LIST_FIRST(&si_lvl->si_pending);
+		if (!TAILQ_EMPTY(&si_lvl->si_pending)) {
+			sip = TAILQ_FIRST(&si_lvl->si_pending);
 			si = sip->sip_parent;
 
 			func = si->si_func;
@@ -170,7 +170,7 @@ sithread(void *arg)
 			mpsafe = si->si_flags & SI_MPSAFE;
 
 			sip->sip_onlist = false;
-			LIST_REMOVE(sip, sip_entries);
+			TAILQ_REMOVE(&si_lvl->si_pending, sip, sip_entries);
 			if (si->si_flags & SI_KILLME) {
 				softint_disestablish(si);
 				continue;
@@ -297,7 +297,7 @@ softint_init(struct cpu_info *ci)
 	slev = kmem_alloc(sizeof(struct softint_lev) * SOFTINT_COUNT, KM_SLEEP);
 	for (i = 0; i < SOFTINT_COUNT; i++) {
 		rumpuser_cv_init(&slev[i].si_cv);
-		LIST_INIT(&slev[i].si_pending);
+		TAILQ_INIT(&slev[i].si_pending);
 	}
 	cd->cpu_softcpu = slev;
 
@@ -384,7 +384,7 @@ softint_schedule(void *arg)
 		si->si_func(si->si_arg);
 	} else {
 		if (!sip->sip_onlist) {
-			LIST_INSERT_HEAD(&si_lvl[si->si_level].si_pending,
+			TAILQ_INSERT_TAIL(&si_lvl[si->si_level].si_pending,
 			    sip, sip_entries);
 			sip->sip_onlist = true;
 		}
@@ -464,7 +464,7 @@ rump_softint_run(struct cpu_info *ci)
 		return;
 
 	for (i = 0; i < SOFTINT_COUNT; i++) {
-		if (!LIST_EMPTY(&si_lvl[i].si_pending))
+		if (!TAILQ_EMPTY(&si_lvl[i].si_pending))
 			rumpuser_cv_signal(si_lvl[i].si_cv);
 	}
 }

Reply via email to