ref: 1b51d46717d733d369e71237cb12b393fc5a073a
parent: f815f7273a71ddfcf12289250af21fe4403f6f97
parent: 91614f582fb1504ae3be2d57c079f24b60d71613
author: cinap_lenrek <[email protected]>
date: Thu Jun 5 17:56:01 EDT 2014
merge
--- a/sys/src/9/port/allocb.c
+++ b/sys/src/9/port/allocb.c
@@ -65,7 +65,7 @@
if(up == nil)
panic("allocb without up: %#p", getcallerpc(&size));
while((b = _allocb(size)) == nil){
- if(up->nlocks.ref || m->ilockdepth || !islo()){
+ if(up->nlocks || m->ilockdepth || !islo()){
xsummary();
mallocsummary();
panic("allocb: no memory for %d bytes", size);
--- a/sys/src/9/port/fault.c
+++ b/sys/src/9/port/fault.c
@@ -14,10 +14,10 @@
if(up == nil)
panic("fault: nil up");
- if(up->nlocks.ref){
+ if(up->nlocks){
Lock *l = up->lastlock;
- print("fault: nlocks %ld, proc %lud %s, addr %#p, lock %#p, lpc %#p\n",
- up->nlocks.ref, up->pid, up->text, addr, l, l ? l->pc : 0);
+ print("fault: nlocks %d, proc %lud %s, addr %#p, lock %#p, lpc %#p\n",
+ up->nlocks, up->pid, up->text, addr, l, l ? l->pc : 0);
}
pnd = up->notepending;
--- a/sys/src/9/port/portdat.h
+++ b/sys/src/9/port/portdat.h
@@ -718,7 +718,7 @@
Mach *wired;
Mach *mp; /* machine this process last ran on */
- Ref nlocks; /* number of locks held by proc */
+ int nlocks; /* number of locks held by proc */
ulong delaysched;
ulong priority; /* priority level */
ulong basepri; /* base priority level */
--- a/sys/src/9/port/proc.c
+++ b/sys/src/9/port/proc.c
@@ -137,7 +137,7 @@
* in the middle of taslock when a process holds a lock
* but Lock.p has not yet been initialized.
*/
- if(up->nlocks.ref)
+ if(up->nlocks)
if(up->state != Moribund)
if(up->delaysched < 20
|| palloc.Lock.p == up
@@ -632,7 +632,7 @@
p->syserrstr = p->errbuf1;
p->errbuf0[0] = '\0';
p->errbuf1[0] = '\0';
- p->nlocks.ref = 0;
+ p->nlocks = 0;
p->delaysched = 0;
p->trace = 0;
kstrdup(&p->user, "*nouser");
@@ -742,9 +742,9 @@
s = splhi();
- if(up->nlocks.ref)
- print("process %lud sleeps with %lud locks held, last lock %#p locked at pc %#p, sleep called from %#p\n",
- up->pid, up->nlocks.ref, up->lastlock, up->lastlock->pc, getcallerpc(&r));
+ if(up->nlocks)
+ print("process %lud sleeps with %d locks held, last lock %#p locked at pc %#p, sleep called from %#p\n",
+ up->pid, up->nlocks, up->lastlock, up->lastlock->pc, getcallerpc(&r));
lock(r);
lock(&up->rlock);
if(r->p){
@@ -1289,9 +1289,9 @@
s = p->psstate;
if(s == 0)
s = statename[p->state];
- print("%3lud:%10s pc %#p dbgpc %#p %8s (%s) ut %ld st %ld bss %lux qpc %#p nl %lud nd %lud lpc %#p pri %lud\n",
+ print("%3lud:%10s pc %#p dbgpc %#p %8s (%s) ut %ld st %ld bss %lux qpc %#p nl %d nd %lud lpc %#p pri %lud\n",
p->pid, p->text, p->pc, dbgpc(p), s, statename[p->state],
- p->time[0], p->time[1], bss, p->qpc, p->nlocks.ref, p->delaysched,
+ p->time[0], p->time[1], bss, p->qpc, p->nlocks, p->delaysched,
p->lastlock ? p->lastlock->pc : 0, p->priority);
}
--- a/sys/src/9/port/qlock.c
+++ b/sys/src/9/port/qlock.c
@@ -22,8 +22,8 @@
if(m->ilockdepth != 0)
print("eqlock: %#p: ilockdepth %d\n", getcallerpc(&q), m->ilockdepth);
- if(up != nil && up->nlocks.ref)
- print("eqlock: %#p: nlocks %lud\n", getcallerpc(&q), up->nlocks.ref);
+ if(up != nil && up->nlocks)
+ print("eqlock: %#p: nlocks %d\n", getcallerpc(&q), up->nlocks);
if(up != nil && up->eql)
print("eqlock: %#p: eql %p\n", getcallerpc(&q), up->eql);
if(q->use.key == 0x55555555)
@@ -70,8 +70,8 @@
if(m->ilockdepth != 0)
print("qlock: %#p: ilockdepth %d\n", getcallerpc(&q), m->ilockdepth);
- if(up != nil && up->nlocks.ref)
- print("qlock: %#p: nlocks %lud\n", getcallerpc(&q), up->nlocks.ref);
+ if(up != nil && up->nlocks)
+ print("qlock: %#p: nlocks %d\n", getcallerpc(&q), up->nlocks);
if(up != nil && up->eql)
print("qlock: %#p: eql %p\n", getcallerpc(&q), up->eql);
if(q->use.key == 0x55555555)
--- a/sys/src/9/port/taslock.c
+++ b/sys/src/9/port/taslock.c
@@ -10,8 +10,8 @@
long maxilockcycles;
long cumlockcycles;
long cumilockcycles;
-ulong maxlockpc;
-ulong maxilockpc;
+uintptr maxlockpc;
+uintptr maxilockpc;
struct
{
@@ -21,23 +21,6 @@
} lockstats;
static void
-inccnt(Ref *r)
-{
- _xinc(&r->ref);
-}
-
-static int
-deccnt(Ref *r)
-{
- int x;
-
- x = _xdec(&r->ref);
- if(x < 0)
- panic("deccnt pc=%#p", getcallerpc(&r));
- return x;
-}
-
-static void
dumplockmem(char *tag, Lock *l)
{
uchar *cp;
@@ -73,12 +56,13 @@
lockstats.locks++;
if(up)
- inccnt(&up->nlocks); /* prevent being scheded */
+ up->nlocks++; /* prevent being scheded */
if(tas(&l->key) == 0){
if(up)
up->lastlock = l;
l->pc = pc;
l->p = up;
+ l->m = MACHP(m->machno);
l->isilock = 0;
#ifdef LOCKCYCLES
l->lockcycles = -lcycles();
@@ -86,7 +70,7 @@
return 0;
}
if(up)
- deccnt(&up->nlocks);
+ up->nlocks--;
lockstats.glare++;
for(;;){
@@ -108,12 +92,13 @@
}
}
if(up)
- inccnt(&up->nlocks);
+ up->nlocks++;
if(tas(&l->key) == 0){
if(up)
up->lastlock = l;
l->pc = pc;
l->p = up;
+ l->m = MACHP(m->machno);
l->isilock = 0;
#ifdef LOCKCYCLES
l->lockcycles = -lcycles();
@@ -121,7 +106,7 @@
return 1;
}
if(up)
- deccnt(&up->nlocks);
+ up->nlocks--;
}
}
@@ -159,8 +144,8 @@
l->sr = x;
l->pc = pc;
l->p = up;
- l->isilock = 1;
l->m = MACHP(m->machno);
+ l->isilock = 1;
#ifdef LOCKCYCLES
l->lockcycles = -lcycles();
#endif
@@ -170,10 +155,10 @@
canlock(Lock *l)
{
if(up)
- inccnt(&up->nlocks);
+ up->nlocks++;
if(tas(&l->key)){
if(up)
- deccnt(&up->nlocks);
+ up->nlocks--;
return 0;
}
@@ -210,7 +195,7 @@
l->key = 0;
coherence();
- if(up && deccnt(&up->nlocks) == 0 && up->delaysched && islo()){
+ if(up && --up->nlocks == 0 && up->delaysched && islo()){
/*
* Call sched if the need arose while locks were held
* But, don't do it from interrupt routines, hence the islo() test
@@ -219,7 +204,7 @@
}
}
-ulong ilockpcs[0x100] = { [0xff] = 1 };
+uintptr ilockpcs[0x100] = { [0xff] = 1 };
static int n;
void