1 #define _LOCK_EXTENSION
4 #include "../plan9/sys9.h"
10 Semperpg = Pagesize/(16*sizeof(unsigned int)),
11 Lockaddr = 0x60000000,
20 extern int C_3ktas(int*);
21 extern int C_4ktas(int*);
22 extern int C_fcr0(void);
30 return; /* allow multiple calls */
34 if(_SEGATTACH(0, "lock", (void*)Lockaddr, Pagesize) == (void*)-1) {
38 memset((void*)Lockaddr, 0, Pagesize);
64 while(C_3ktas(&lk->val))
71 if(C_4ktas(&lk->val) == 0)
76 /* Use low order lock bits to generate hash */
77 hash = ((int)lk/sizeof(int)) & (Semperpg-1);
78 hwsem = (int*)Lockaddr+hash;
81 if((*hwsem & 1) == 0) {
109 if(C_3ktas(&lk->val))
113 if(C_4ktas(&lk->val))
117 /* Use low order lock bits to generate hash */
118 hash = ((int)lk/sizeof(int)) & (Semperpg-1);
119 hwsem = (int*)Lockaddr+hash;
121 if((*hwsem & 1) == 0) {
132 return -1; /* not reached */
158 /* Use low order lock bits to generate hash */
159 hash = ((int)p/sizeof(int)) & (Semperpg-1);
160 hwsem = (int*)Lockaddr+hash;
162 if((*hwsem & 1) == 0) {
173 return -1; /* not reached */