git: 9front

Download patch

ref: 2bca65c495d86de07d72b64266089815b8a77901
parent: 6f8c1d7f79efb396a76a98833eb2cc31f0236c03
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Fri Feb 20 13:43:32 EST 2015

pc, pc64: simplify intrdisable()

--- a/sys/src/9/pc/trap.c
+++ b/sys/src/9/pc/trap.c
@@ -96,7 +96,7 @@
 		vno = arch->intrvecno(irq);
 	}
 	ilock(&vctllock);
-	for(; vno <= MaxVectorAPIC; vno++){
+	do {
 		for(pv = &vctl[vno]; (v = *pv) != nil; pv = &v->next){
 			if(v->isintr && (v->irq == irq || irq == -1)
 			&& v->tbdf == tbdf && v->f == f && v->a == a
@@ -107,14 +107,11 @@
 			*pv = v->next;
 			xfree(v);
 
-			if(irq == -1)
-				break;
-			if(vctl[vno] == nil && arch->intrdisable != nil)
+			if(irq != -1 && vctl[vno] == nil && arch->intrdisable != nil)
 				arch->intrdisable(irq);
-		}
-		if(irq != -1)
 			break;
-	}
+		}
+	} while(irq == -1 && ++vno <= MaxVectorAPIC);
 	iunlock(&vctllock);
 }
 
--- a/sys/src/9/pc64/trap.c
+++ b/sys/src/9/pc64/trap.c
@@ -96,7 +96,7 @@
 		vno = arch->intrvecno(irq);
 	}
 	ilock(&vctllock);
-	for(; vno <= MaxVectorAPIC; vno++){
+	do {
 		for(pv = &vctl[vno]; (v = *pv) != nil; pv = &v->next){
 			if(v->isintr && (v->irq == irq || irq == -1)
 			&& v->tbdf == tbdf && v->f == f && v->a == a
@@ -107,14 +107,11 @@
 			*pv = v->next;
 			xfree(v);
 
-			if(irq == -1)
-				break;
-			if(vctl[vno] == nil && arch->intrdisable != nil)
+			if(irq != -1 && vctl[vno] == nil && arch->intrdisable != nil)
 				arch->intrdisable(irq);
-		}
-		if(irq != -1)
 			break;
-	}
+		}
+	} while(irq == -1 && ++vno <= MaxVectorAPIC);
 	iunlock(&vctllock);
 }
 
--