| plan 9 kernel history: overview | file list | diff list |
1993/0528/port/taslock.c (diff list | history)
| 1992/0222/sys/src/9/port/taslock.c:1,5 – 1992/0321/sys/src/9/port/taslock.c:1,5 (short | long) | ||
|
Move lib.h to ../port.
rsc Fri Mar 4 12:44:25 2005 | ||
| 1992/0222 | #include "u.h" | |
| 1992/0321 | #include "../port/lib.h" | |
| 1992/0222 | #include "mem.h" #include "dat.h" #include "fns.h" | |
| 1992/0321/sys/src/9/port/taslock.c:13,19 – 1992/0428/sys/src/9/port/taslock.c:13,22 (short | long) | ||
| 1992/0222 | ulong pc; pc = getcallerpc(((uchar*)&l) - sizeof(l)); | |
| 1992/0428 | if(l == 0){ print("pc= %lux", pc); for(;;); } | |
| 1992/0222 | for(i = 0; i < 1000000; i++){ if (tas(&ll->key) == 0){ if(u) | |
| 1992/0428/sys/src/9/port/taslock.c:5,10 – 1992/0602/sys/src/9/port/taslock.c:5,13 (short | long) | ||
| 1992/0222 | #include "fns.h" #include "../port/error.h" | |
| 1992/0602 | ulong spinner; ulong spinpc; | |
| 1992/0222 | void lock(Lock *l) { | |
| 1992/0428/sys/src/9/port/taslock.c:13,22 – 1992/0602/sys/src/9/port/taslock.c:16,27 | ||
| 1992/0222 | ulong pc; pc = getcallerpc(((uchar*)&l) - sizeof(l)); | |
| 1992/0428 |
| |
| 1992/0602 | if (tas(&ll->key) == 0){ if(u) u->p->hasspin = 1; ll->pc = pc; return; } | |
| 1992/0222 | for(i = 0; i < 1000000; i++){ if (tas(&ll->key) == 0){ if(u) | |
| 1992/0428/sys/src/9/port/taslock.c:24,31 – 1992/0602/sys/src/9/port/taslock.c:29,36 | ||
| 1992/0222 | ll->pc = pc; return; } | |
| 1992/0602 | spinner++; spinpc = pc; | |
| 1992/0222 | } i = l->key; l->key = 0; | |
| 1992/0602/sys/src/9/port/taslock.c:5,13 – 1992/0905/sys/src/9/port/taslock.c:5,10 (short | long) | ||
| 1992/0222 | #include "fns.h" #include "../port/error.h" | |
| 1992/0602 |
| |
| 1992/0222 | void lock(Lock *l) { | |
| 1992/0602/sys/src/9/port/taslock.c:16,28 – 1992/0905/sys/src/9/port/taslock.c:13,19 | ||
| 1992/0222 | ulong pc; pc = getcallerpc(((uchar*)&l) - sizeof(l)); | |
| 1992/0602 |
| |
| 1992/0222 |
| |
| 1992/0905 | for(i = 0; i < 10000000; i++){ | |
| 1992/0222 | if (tas(&ll->key) == 0){ if(u) u->p->hasspin = 1; | |
| 1992/0602/sys/src/9/port/taslock.c:29,36 – 1992/0905/sys/src/9/port/taslock.c:20,25 | ||
| 1992/0222 | ll->pc = pc; return; } | |
| 1992/0602 |
| |
| 1992/0222 | } i = l->key; l->key = 0; | |
| 1992/0905/sys/src/9/port/taslock.c:13,19 – 1992/0912/sys/src/9/port/taslock.c:13,19 (short | long) | ||
| 1992/0222 | ulong pc; pc = getcallerpc(((uchar*)&l) - sizeof(l)); | |
| 1992/0905 |
| |
| 1992/0912 | for(i = 0; i < 100000000; i++){ | |
| 1992/0222 | if (tas(&ll->key) == 0){ if(u) u->p->hasspin = 1; | |
| 1992/0912/sys/src/9/port/taslock.c:42,47 – 1992/0913/sys/src/9/port/taslock.c:42,49 (short | long) | ||
| 1992/0222 | void unlock(Lock *l) { | |
| 1992/0913 | int s; | |
| 1992/0222 | l->pc = 0; l->key = 0; if(u && u->p) | |
| 1992/0913/sys/src/9/port/taslock.c:8,31 – 1992/0914/sys/src/9/port/taslock.c:8,29 (short | long) | ||
| 1992/0222 | void lock(Lock *l) { | |
| 1992/0912 |
| |
| 1992/0222 |
| |
| 1992/0914 | for(i = 0; i < 10000000; i++){ if (tas(&l->key) == 0){ | |
| 1992/0222 | if(u) u->p->hasspin = 1; | |
| 1992/0914 | l->pc = pc; | |
| 1992/0222 | return; } } | |
| 1992/0914 | panic("lock loop 0x%lux key 0x%lux pc 0x%lux held by pc 0x%lux\n", l->key, i, pc, l->pc); | |
| 1992/0222 | } int | |
| 1992/0913/sys/src/9/port/taslock.c:42,49 – 1992/0914/sys/src/9/port/taslock.c:40,45 | ||
| 1992/0222 | void unlock(Lock *l) { | |
| 1992/0913 |
| |
| 1992/0222 | l->pc = 0; l->key = 0; if(u && u->p) | |
| 1992/0914/sys/src/9/port/taslock.c:15,22 – 1993/0501/sys/src/9/port/taslock.c:15,20 (short | long) | ||
| 1992/0914 | for(i = 0; i < 10000000; i++){ if (tas(&l->key) == 0){ | |
| 1992/0222 |
| |
| 1992/0914 | l->pc = pc; | |
| 1992/0222 | return; } | |
| 1992/0914/sys/src/9/port/taslock.c:32,39 – 1993/0501/sys/src/9/port/taslock.c:30,35 | ||
| 1992/0222 | if(tas(&l->key)) return 0; l->pc = getcallerpc(((uchar*)&l) - sizeof(l)); | |
| 1992/0914/sys/src/9/port/taslock.c:42,47 – 1993/0501/sys/src/9/port/taslock.c:38,41 | ||
| 1992/0222 | { l->pc = 0; l->key = 0; | |
| 1993/0501/sys/src/9/port/taslock.c:19,27 – 1993/0525/sys/src/9/port/taslock.c:19,26 (short | long) | ||
| 1992/0222 | return; } } | |
| 1992/0914 | panic("lock loop 0x%lux key 0x%lux pc 0x%lux held by pc 0x%lux\n", | |
| 1993/0525 | i, l->key, pc, l->pc); | |
| 1992/0222 | } int | |
| 1993/0525/sys/src/9/port/taslock.c:13,19 – 1993/0528/sys/src/9/port/taslock.c:13,19 (short | long) | ||
| 1992/0222 | pc = getcallerpc(((uchar*)&l) - sizeof(l)); | |
| 1992/0914 |
| |
| 1993/0528 | for(i = 0; i < 20000000; i++){ | |
| 1992/0914 | if (tas(&l->key) == 0){ l->pc = pc; | |
| 1992/0222 | return; | |
| 1993/0528/sys/src/9/port/taslock.c:8,26 – 1993/0830/sys/src/9/port/taslock.c:8,19 (short | long) | ||
| 1992/0222 | void lock(Lock *l) { | |
| 1992/0914 | ||
| 1993/0528 |
| |
| 1992/0914 |
| |
| 1993/0830 | for(;;){ while(l->key) ; if(tas(&l->key) == 0) | |
| 1992/0222 | return; | |
| 1992/0914 |
| |
| 1993/0525 |
| |
| 1992/0222 | } int | |
| 1993/0830/sys/src/9/port/taslock.c:8,13 – 1993/1204/sys/src/9/port/taslock.c:8,15 (short | long) | ||
| 1992/0222 | void lock(Lock *l) { | |
| 1993/1204 | if(tas(&l->key) == 0) return; | |
| 1993/0830 | for(;;){ while(l->key) ; | |
| 1993/1204/sys/src/9/port/taslock.c:10,15 – 1994/0322/sys/src/9/port/taslock.c:10,16 (short | long) | ||
| 1992/0222 | { | |
| 1993/1204 | if(tas(&l->key) == 0) return; | |
| 1994/0322 | ||
| 1993/0830 | for(;;){ while(l->key) ; | |
| 1993/1204/sys/src/9/port/taslock.c:18,29 – 1994/0322/sys/src/9/port/taslock.c:19,45 | ||
| 1992/0222 | } } | |
| 1994/0322 | void ilock(Lock *l) { l->sr = splhi(); if(tas(&l->key) == 0) return; for(;;){ while(l->key) ; if(tas(&l->key) == 0) return; } } | |
| 1992/0222 | int canlock(Lock *l) { if(tas(&l->key)) return 0; | |
| 1994/0322 | ||
| 1992/0222 | return 1; } | |
| 1993/1204/sys/src/9/port/taslock.c:30,35 – 1994/0322/sys/src/9/port/taslock.c:46,60 | ||
| 1992/0222 | void unlock(Lock *l) { | |
| 1994/0322 | } void iunlock(Lock *l) { ulong sr; sr = l->sr; l->key = 0; splx(sr); | |
| 1992/0222 | } | |
| 1994/0322/sys/src/9/port/taslock.c:22,36 – 1994/0323/sys/src/9/port/taslock.c:22,42 (short | long) | ||
| 1994/0322 | void ilock(Lock *l) { | |
| 1994/0323 | ulong x; x = splhi(); if(tas(&l->key) == 0){ l->sr = x; | |
| 1994/0322 | return; | |
| 1994/0323 | } | |
| 1994/0322 | for(;;){ while(l->key) ; | |
| 1994/0323 | if(tas(&l->key) == 0){ l->sr = x; | |
| 1994/0322 | return; | |
| 1994/0323 | } | |
| 1994/0322 | } } | |
| 1994/0323/sys/src/9/port/taslock.c:29,35 – 1994/0507/sys/src/9/port/taslock.c:29,35 (short | long) | ||
| 1994/0323 | l->sr = x; | |
| 1994/0322 | return; | |
| 1994/0323 | } | |
| 1994/0322 | ||
| 1994/0507 | /* print("ilock loop %lux\n", getcallerpc(0)); */ | |
| 1994/0322 | for(;;){ while(l->key) ; | |
| 1994/0507/sys/src/9/port/taslock.c:29,35 – 1994/0516/sys/src/9/port/taslock.c:29,35 (short | long) | ||
| 1994/0323 | l->sr = x; | |
| 1994/0322 | return; | |
| 1994/0323 | } | |
| 1994/0507 |
| |
| 1994/0516 | print("ilock loop %lux\n", getcallerpc(0)); | |
| 1994/0322 | for(;;){ while(l->key) ; | |
| 1994/0516/sys/src/9/port/taslock.c:29,35 – 1994/0525/sys/src/9/port/taslock.c:29,35 (short | long) | ||
| 1994/0323 | l->sr = x; | |
| 1994/0322 | return; | |
| 1994/0323 | } | |
| 1994/0516 |
| |
| 1994/0525 | ||
| 1994/0322 | for(;;){ while(l->key) ; | |
| 1994/0525/sys/src/9/port/taslock.c:8,19 – 1994/0805/sys/src/9/port/taslock.c:8,26 (short | long) | ||
| 1992/0222 | void lock(Lock *l) { | |
| 1994/0805 | int loop; | |
| 1993/1204 | if(tas(&l->key) == 0) return; | |
| 1994/0322 | ||
| 1994/0805 | loop = 50000000; | |
| 1993/0830 | for(;;){ | |
| 1994/0805 | while(l->key) { if(loop-- <= 0) { dumpstack(); panic("lock loop: lock %lux\n", l); } } | |
| 1993/0830 | if(tas(&l->key) == 0) | |
| 1992/0222 | return; } | |
| 1994/0805/sys/src/9/port/taslock.c:8,26 – 1994/0808/sys/src/9/port/taslock.c:8,19 (short | long) | ||
| 1992/0222 | void lock(Lock *l) { | |
| 1994/0805 |
| |
| 1993/1204 | if(tas(&l->key) == 0) return; | |
| 1994/0322 | ||
| 1994/0805 |
| |
| 1993/0830 | for(;;){ | |
| 1994/0805 |
| |
| 1994/0808 | while(l->key) ; | |
| 1993/0830 | if(tas(&l->key) == 0) | |
| 1992/0222 | return; } | |
| 1994/0808/sys/src/9/port/taslock.c:8,16 – 1995/0108/sys/src/9/port/taslock.c:8,35 (short | long) | ||
| 1992/0222 | void lock(Lock *l) { | |
| 1995/0108 | int n; if(up) { n = up->inlock+2; up->inlock = n; if(tas(&l->key) == 0) return; for(;;){ while(l->key) if(conf.nproc == 1) { up->yield = 1; sched(); } up->inlock = n; if(tas(&l->key) == 0) return; } } | |
| 1993/1204 | if(tas(&l->key) == 0) return; | |
| 1994/0322 | ||
| 1993/0830 | for(;;){ | |
| 1994/0808 | while(l->key) ; | |
| 1994/0808/sys/src/9/port/taslock.c:52,58 – 1995/0108/sys/src/9/port/taslock.c:71,85 | ||
| 1992/0222 | void unlock(Lock *l) { | |
| 1995/0108 | int n; | |
| 1992/0222 | l->key = 0; | |
| 1995/0108 | if(up) { n = up->inlock-2; if(n < 0) n = 0; up->inlock = n; } | |
| 1994/0322 | } void | |
| 1995/0108/sys/src/9/port/taslock.c:38,70 – 1995/0109/sys/src/9/port/taslock.c:38,60 (short | long) | ||
| 1992/0222 | } } | |
| 1994/0322 |
| |
| 1995/0109 | int canlock(Lock *l) | |
| 1994/0322 | { | |
| 1994/0323 |
| |
| 1995/0109 | int n; | |
| 1994/0323 |
| |
| 1994/0322 |
| |
| 1994/0323 |
| |
| 1994/0525 | ||
| 1994/0322 |
| |
| 1994/0323 |
| |
| 1994/0322 |
| |
| 1995/0109 | if(up) { n = up->inlock; up->inlock = n+2; if(tas(&l->key)) { up->inlock = n; return 0; | |
| 1994/0323 | } | |
| 1995/0109 | return 1; | |
| 1994/0322 | } | |
| 1992/0222 |
| |
| 1994/0322 | ||
| 1992/0222 | return 1; } | |
| 1995/0108/sys/src/9/port/taslock.c:73,79 – 1995/0109/sys/src/9/port/taslock.c:63,68 | ||
| 1992/0222 | { | |
| 1995/0108 | int n; | |
| 1992/0222 |
| |
| 1995/0108 | if(up) { n = up->inlock-2; if(n < 0) | |
| 1995/0108/sys/src/9/port/taslock.c:80,93 – 1995/0109/sys/src/9/port/taslock.c:69,93 | ||
| 1995/0108 | n = 0; up->inlock = n; } | |
| 1995/0109 | l->key = 0; | |
| 1994/0322 | } void | |
| 1995/0109 | ilock(Lock *l) { ulong sr; sr = splhi(); lock(l); l->sr = sr; } void | |
| 1994/0322 | iunlock(Lock *l) { ulong sr; sr = l->sr; | |
| 1995/0109 | unlock(l); | |
| 1994/0322 | splx(sr); | |
| 1992/0222 | } | |
| 1995/0109/sys/src/9/port/taslock.c:8,40 – 1995/0110/sys/src/9/port/taslock.c:8,42 (short | long) | ||
| 1992/0222 | void lock(Lock *l) { | |
| 1995/0108 |
| |
| 1995/0110 | if(tas(&l->key) == 0) return; | |
| 1995/0108 |
| |
| 1995/0110 | for(;;){ while(l->key) ; | |
| 1995/0108 | if(tas(&l->key) == 0) return; | |
| 1995/0110 | } | |
| 1995/0108 | ||
| 1993/1204 |
| |
| 1995/0110 | void ilock(Lock *l) { ulong x; x = splhi(); if(tas(&l->key) == 0){ l->sr = x; | |
| 1993/1204 | return; | |
| 1995/0110 | } | |
| 1993/0830 | for(;;){ | |
| 1994/0808 | while(l->key) ; | |
| 1993/0830 |
| |
| 1995/0110 | if(tas(&l->key) == 0){ l->sr = x; | |
| 1992/0222 | return; | |
| 1995/0110 | } | |
| 1992/0222 | } } | |
| 1995/0109/sys/src/9/port/taslock.c:41,60 – 1995/0110/sys/src/9/port/taslock.c:43,51 | ||
| 1995/0109 | int canlock(Lock *l) | |
| 1994/0322 | { | |
| 1995/0109 |
| |
| 1994/0323 | ||
| 1995/0109 |
| |
| 1994/0323 |
| |
| 1995/0109 |
| |
| 1994/0322 |
| |
| 1992/0222 | if(tas(&l->key)) return 0; | |
| 1995/0110 | ||
| 1992/0222 | return 1; } | |
| 1995/0109/sys/src/9/port/taslock.c:61,93 – 1995/0110/sys/src/9/port/taslock.c:52,66 | ||
| 1992/0222 | void unlock(Lock *l) { | |
| 1995/0108 |
| |
| 1995/0109 | l->key = 0; | |
| 1994/0322 | } void | |
| 1995/0109 |
| |
| 1994/0322 | iunlock(Lock *l) { ulong sr; sr = l->sr; | |
| 1995/0109 |
| |
| 1995/0110 | l->key = 0; | |
| 1994/0322 | splx(sr); | |
| 1992/0222 | } | |
| 1995/0110/sys/src/9/port/taslock.c:8,21 – 1995/1009/sys/src/9/port/taslock.c:8,33 (short | long) | ||
| 1992/0222 | void lock(Lock *l) { | |
| 1995/0110 |
| |
| 1995/1009 | int i; ulong pc; pc = getcallerpc(l); if(tas(&l->key) == 0){ l->pc = pc; | |
| 1995/0110 | return; | |
| 1995/1009 | } | |
| 1995/0108 | ||
| 1995/0110 | for(;;){ | |
| 1995/1009 | i = 0; | |
| 1995/0110 | while(l->key) | |
| 1995/0108 |
| |
| 1995/1009 | if(i++ > 10000000) panic("lock loop key 0x%lux pc 0x%lux held by pc 0x%lux\n", l->key, getcallerpc(l), l->pc); if(tas(&l->key) == 0){ l->pc = pc; | |
| 1995/0108 | return; | |
| 1995/1009 | } | |
| 1995/0108 | } | |
| 1995/0110 | } | |
| 1995/0108 | ||
| 1995/0110/sys/src/9/port/taslock.c:23,32 – 1995/1009/sys/src/9/port/taslock.c:35,48 | ||
| 1995/0110 | ilock(Lock *l) { ulong x; | |
| 1995/1009 | ulong pc; | |
| 1995/0110 | ||
| 1995/1009 | pc = getcallerpc(l); | |
| 1995/0110 | x = splhi(); if(tas(&l->key) == 0){ l->sr = x; | |
| 1995/1009 | l->pc = pc; | |
| 1993/1204 | return; | |
| 1995/0110 | } | |
| 1995/0110/sys/src/9/port/taslock.c:35,40 – 1995/1009/sys/src/9/port/taslock.c:51,57 | ||
| 1994/0808 | ; | |
| 1995/0110 | if(tas(&l->key) == 0){ l->sr = x; | |
| 1995/1009 | l->pc = pc; | |
| 1992/0222 | return; | |
| 1995/0110 | } | |
| 1992/0222 | } | |
| 1995/0110/sys/src/9/port/taslock.c:46,51 – 1995/1009/sys/src/9/port/taslock.c:63,69 | ||
| 1992/0222 | if(tas(&l->key)) return 0; | |
| 1995/0110 | ||
| 1995/1009 | l->pc = getcallerpc(l); | |
| 1992/0222 | return 1; } | |
| 1995/1009/sys/src/9/port/taslock.c:21,29 – 1995/1014/sys/src/9/port/taslock.c:21,29 (short | long) | ||
| 1995/0110 | for(;;){ | |
| 1995/1009 | i = 0; | |
| 1995/0110 | while(l->key) | |
| 1995/1009 |
| |
| 1995/1014 | if(i++ > 100000000) panic("lock loop key 0x%lux pc 0x%lux held by pc 0x%lux pl 0x%lux\n", l->key, pc, l->pc, splhi()); | |
| 1995/1009 | if(tas(&l->key) == 0){ l->pc = pc; | |
| 1995/0108 | return; | |
| 1995/1009/sys/src/9/port/taslock.c:71,76 – 1995/1014/sys/src/9/port/taslock.c:71,77 | ||
| 1992/0222 | unlock(Lock *l) { | |
| 1995/0109 | l->key = 0; | |
| 1995/1014 | l->pc = 0; | |
| 1994/0322 | } void | |
| 1995/1009/sys/src/9/port/taslock.c:80,84 – 1995/1014/sys/src/9/port/taslock.c:81,86 | ||
| 1994/0322 | sr = l->sr; | |
| 1995/0110 | l->key = 0; | |
| 1995/1014 | l->pc = 0; | |
| 1994/0322 | splx(sr); | |
| 1992/0222 | } | |
| 1995/1014/sys/src/9/port/taslock.c:6,20 – 1995/1030/sys/src/9/port/taslock.c:6,30 (short | long) | ||
| 1992/0222 | #include "../port/error.h" void | |
| 1995/1030 | lockloop(Lock *l, ulong pc) { print("lock loop key 0x%lux pc 0x%lux held by pc 0x%lux proc %d\n", l->key, pc, l->pc, l->pid); dumpaproc(up); } void | |
| 1992/0222 | lock(Lock *l) { | |
| 1995/1009 | int i; | |
| 1995/1030 | ulong pc, pid; | |
| 1995/1009 | pc = getcallerpc(l); | |
| 1995/1030 | pid = up ? up->pid : 0; | |
| 1995/1009 | if(tas(&l->key) == 0){ l->pc = pc; | |
| 1995/1030 | l->pid = pid; | |
| 1995/0110 | return; | |
| 1995/1009 | } | |
| 1995/0108 | ||
| 1995/1014/sys/src/9/port/taslock.c:21,31 – 1995/1030/sys/src/9/port/taslock.c:31,43 | ||
| 1995/0110 | for(;;){ | |
| 1995/1009 | i = 0; | |
| 1995/0110 | while(l->key) | |
| 1995/1014 |
| |
| 1995/1030 | if(i++ > 100000000){ i = 0; lockloop(l, pc); } | |
| 1995/1009 | if(tas(&l->key) == 0){ l->pc = pc; | |
| 1995/1030 | l->pid = pid; | |
| 1995/0108 | return; | |
| 1995/1009 | } | |
| 1995/0108 | } | |
| 1995/1014/sys/src/9/port/taslock.c:35,48 – 1995/1030/sys/src/9/port/taslock.c:47,62 | ||
| 1995/0110 | ilock(Lock *l) { ulong x; | |
| 1995/1009 |
| |
| 1995/1030 | ulong pc, pid; | |
| 1995/0110 | ||
| 1995/1009 | pc = getcallerpc(l); | |
| 1995/1030 | pid = up ? up->pid : 0; | |
| 1995/1009 | ||
| 1995/0110 | x = splhi(); if(tas(&l->key) == 0){ l->sr = x; | |
| 1995/1009 | l->pc = pc; | |
| 1995/1030 | l->pid = pid; | |
| 1993/1204 | return; | |
| 1995/0110 | } | |
| 1995/1014/sys/src/9/port/taslock.c:52,57 – 1995/1030/sys/src/9/port/taslock.c:66,72 | ||
| 1995/0110 | if(tas(&l->key) == 0){ l->sr = x; | |
| 1995/1009 | l->pc = pc; | |
| 1995/1030 | l->pid = pid; | |
| 1992/0222 | return; | |
| 1995/0110 | } | |
| 1992/0222 | } | |
| 1995/1014/sys/src/9/port/taslock.c:64,69 – 1995/1030/sys/src/9/port/taslock.c:79,85 | ||
| 1992/0222 | return 0; | |
| 1995/0110 | ||
| 1995/1009 | l->pc = getcallerpc(l); | |
| 1995/1030 | l->pid = up ? up->pid : 0; | |
| 1992/0222 | return 1; } | |
| Too many diffs (26 > 25). Stopping. | ||