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);
63 while(C_3ktas(&lk->val))
70 if(C_4ktas(&lk->val) == 0)
75 /* Use low order lock bits to generate hash */
76 hash = ((int)lk/sizeof(int)) & (Semperpg-1);
77 hwsem = (int*)Lockaddr+hash;
80 if((*hwsem & 1) == 0) {
108 if(C_3ktas(&lk->val))
112 if(C_4ktas(&lk->val))
116 /* Use low order lock bits to generate hash */
117 hash = ((int)lk/sizeof(int)) & (Semperpg-1);
118 hwsem = (int*)Lockaddr+hash;
120 if((*hwsem & 1) == 0) {
131 return -1; /* not reached */
157 /* Use low order lock bits to generate hash */
158 hash = ((int)p/sizeof(int)) & (Semperpg-1);
159 hwsem = (int*)Lockaddr+hash;
161 if((*hwsem & 1) == 0) {
172 return -1; /* not reached */