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;
--
⑨