8 getbuf(Device *d, Off addr, int flag)
15 fprint(2, "getbuf %Z(%lld) f=%x\n", d, (Wideoff)addr, flag);
16 h = addr + (Off)(uintptr)d*1009;
26 * look for it in the active list
30 if(p->addr == addr && p->dev == d) {
32 p->back->fore = p->fore;
33 p->fore->back = p->back;
42 if(p->addr != addr || p->dev != d || iobufmap(p) == 0) {
60 * take oldest unlocked entry in this queue
67 fprint(2, "iobuf all locked\n");
75 * its dangerous to flush the pseudo
76 * devices since they recursively call
77 * getbuf/putbuf. deadlock!
83 fprint(2, "iobuf all reserved\n");
92 if(!devwrite(p->dev, p->addr, p->iobuf))
93 p->flags &= ~(Bimm|Bmod);
106 if(!devread(p->dev, p->addr, p->iobuf))
112 fprint(2, "iobuf cant map buffer %Z(%lld)\n", p->dev, (Wideoff)p->addr);
121 * syncblock tries to put out a block per hashline
122 * returns 0 all done,
123 * returns 1 if it missed something
134 for(h=0; h<nhiob; h++) {
140 if(p->flags & Bmod) {
142 flag = 1; /* more than 1 mod/line */
152 flag = 1; /* missed -- was locked */
155 if(!(q->flags & Bmod)) {
160 if(!devwrite(q->dev, q->addr, q->iobuf))
161 q->flags &= ~(Bmod|Bimm);
177 fprint(2, "sync: %s\n", reason);
178 for(i=10*nhiob; i>0; i--)
188 fprint(2, "buffer not locked %Z(%lld)\n", p->dev, (Wideoff)p->addr);
189 if(p->flags & Bimm) {
190 if(!(p->flags & Bmod))
191 fprint(2, "imm and no mod %Z(%lld)\n",
192 p->dev, (Wideoff)p->addr);
193 if(!devwrite(p->dev, p->addr, p->iobuf))
194 p->flags &= ~(Bmod|Bimm);
201 checktag(Iobuf *p, int tag, Off qpath)
206 t = (Tag*)(p->iobuf+BUFSIZE);
207 if(tag != t->tag || qpath != QPNONE && qpath != t->path){
208 pc = getcallerpc(&p);
211 fprint(2, "checktag pc=%p %Z(%llux) tag/path=%G/%llud; expected %G\n",
212 pc, p->dev, (Wideoff)p->addr, t->tag, (Wideoff)t->path, tag);
214 fprint(2, "checktag pc=%p %Z(%llux) tag/path=%G/%llud; expected %G/%llud\n",
215 pc, p->dev, (Wideoff)p->addr, t->tag, (Wideoff)t->path, tag, (Wideoff)qpath);
223 settag(Iobuf *p, int tag, Off qpath)
227 t = (Tag*)(p->iobuf+BUFSIZE);
235 qlmatch(QLock *q1, QLock *q2)
248 for(h=0; h<nhiob; h++) {