shithub: riscv

Download patch

ref: f81e1bc88a4ef4de06d1d6e8ed054373b0576009
parent: 6fe8799424af4870223a85fac8f120022670cd57
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sun Feb 9 07:17:34 EST 2025

kernel: remove rwstats, cleanup checks, don't print in qunlock() while holding QLock.use.

cleanup the entry checks for qlock/eqlock():
q->use.key == 0x55555555, p->eql.

remove the qlock stats (rwstats), not particularily
usefull.

unlock q->use before printin error in qunlock()
when lock was not held.

--- a/sys/src/9/port/qlock.c
+++ b/sys/src/9/port/qlock.c
@@ -6,15 +6,6 @@
 
 #include	"../port/error.h"
 
-struct {
-	ulong rlock;
-	ulong rlockq;
-	ulong wlock;
-	ulong wlockq;
-	ulong qlock;
-	ulong qlockq;
-} rwstats;
-
 void
 eqlock(QLock *q)
 {
@@ -27,13 +18,8 @@
 		print("eqlock: %#p: ilockdepth %d\n", pc, m->ilockdepth);
 	if(up != nil && up->nlocks)
 		print("eqlock: %#p: nlocks %d\n", pc, up->nlocks);
-	if(up != nil && up->eql != nil)
-		print("eqlock: %#p: eql %p\n", pc, up->eql);
-	if(q->use.key == 0x55555555)
-		panic("eqlock: %#p: q %#p, key 5*", pc, q);
 
 	lock(&q->use);
-	rwstats.qlock++;
 	if(!q->locked) {
 		q->pc = pc;
 		q->locked = 1;
@@ -47,7 +33,6 @@
 		unlock(&q->use);
 		interrupted();
 	}
-	rwstats.qlockq++;
 	p = q->tail;
 	if(p == nil)
 		q->head = up;
@@ -79,12 +64,8 @@
 		print("qlock: %#p: ilockdepth %d\n", pc, m->ilockdepth);
 	if(up != nil && up->nlocks)
 		print("qlock: %#p: nlocks %d\n", pc, up->nlocks);
-	if(up != nil && up->eql != nil)
-		print("qlock: %#p: eql %p\n", pc, up->eql);
-	if(q->use.key == 0x55555555)
-		panic("qlock: %#p: q %#p, key 5*", pc, q);
+
 	lock(&q->use);
-	rwstats.qlock++;
 	if(!q->locked) {
 		q->pc = pc;
 		q->locked = 1;
@@ -93,7 +74,6 @@
 	}
 	if(up == nil)
 		panic("qlock");
-	rwstats.qlockq++;
 	p = q->tail;
 	if(p == nil)
 		q->head = up;
@@ -129,9 +109,12 @@
 	Proc *p;
 
 	lock(&q->use);
-	if (q->locked == 0)
+	if(!q->locked){
+		unlock(&q->use);
 		print("qunlock called with qlock not held, from %#p\n",
 			getcallerpc(&q));
+		return;
+	}
 	p = q->head;
 	if(p != nil){
 		if(p->state != Queueing)
@@ -159,7 +142,6 @@
 		print("rlock: %#p: nlocks %d\n", getcallerpc(&q), up->nlocks);
 
 	lock(&q->use);
-	rwstats.rlock++;
 	if(q->writer == 0 && q->head == nil){
 		/* no writer, go for it */
 		q->readers++;
@@ -166,8 +148,6 @@
 		unlock(&q->use);
 		return;
 	}
-
-	rwstats.rlockq++;
 	p = q->tail;
 	if(up == nil)
 		panic("rlock");
@@ -220,7 +200,6 @@
 		print("wlock: %#p: nlocks %d\n", pc, up->nlocks);
 
 	lock(&q->use);
-	rwstats.wlock++;
 	if(q->readers == 0 && q->writer == 0){
 		/* noone waiting, go for it */
 		q->wpc = pc;
@@ -230,7 +209,6 @@
 	}
 
 	/* wait */
-	rwstats.wlockq++;
 	p = q->tail;
 	if(up == nil)
 		panic("wlock");
@@ -290,7 +268,6 @@
 canrlock(RWlock *q)
 {
 	lock(&q->use);
-	rwstats.rlock++;
 	if(q->writer == 0 && q->head == nil){
 		/* no writer, go for it */
 		q->readers++;
--- a/sys/src/9/port/taslock.c
+++ b/sys/src/9/port/taslock.c
@@ -16,7 +16,7 @@
 uintptr ilockpcs[0x100] = { [0xff] = 1 };
 #endif
 
-void
+static void
 lockloop(Lock *l, uintptr pc)
 {
 	Proc *p;
--