M pc/fns.h => pc/fns.h +19 -0
@@ 96,3 96,22 @@ int x86(void);
void NS16552special(int, int, Queue**, Queue**, int (*)(Queue*, int));
int NS16552m3mouse(Queue*, int);
int NS16552mouse(Queue*, int);
+
+void hnputl(void*, ulong v);
+void hnputs(void*, ushort v);
+ulong nhgetl(void*);
+ushort nhgets(void*);
+
+void ifwrite(void*, Block*, int);
+void* ifinit(int);
+ulong ifaddr(void*);
+void filiput(Block*);
+void fiberint(Ureg*, void*);
+ulong fwblock(ulong, void*, ulong);
+ulong frblock(ulong, void*, ulong);
+void ifree(void*);
+void ifflush(void*);
+Block* iallocb(int);
+void* ifroute(ulong);
+ulong ifunroute(ulong);
+void parseip(char*, char*);
M pc/l.s => pc/l.s +33 -0
@@ 747,3 747,36 @@ bybyte:
MOVL BX, CX
REP; MOVSB
RET
+
+/*
+ * Fiber block copy routines
+ */
+TEXT fwblock(SB),$0
+ MOVL p+0(FP),DX
+ MOVL a+4(FP),SI
+ MOVL $128,CX
+ CLD; REP; OUTSL
+
+ MOVL p+0(FP),DX
+ MOVL $128,CX
+ MOVL csum+8(FP), AX
+wcsum:
+ XORL 0(DX), AX
+ ADDL $4,DX
+ LOOP rcsum
+ RET
+
+TEXT frblock(SB),$0
+ MOVL p+0(FP),DX
+ MOVL a+4(FP),SI
+ MOVL $128,CX
+ CLD; REP; INSL
+
+ MOVL p+0(FP),DX
+ MOVL $128,CX
+ MOVL csum+8(FP), AX
+rcsum:
+ XORL 0(DX), AX
+ ADDL $4,DX
+ LOOP rcsum
+ RET
M port/segment.c => port/segment.c +2 -2
@@ 273,8 273,8 @@ imagereclaim(void)
lock(&palloc);
for(p = palloc.head; p; p = p->next) {
- if(p->image && p->ref == 0 && p->image != &swapimage && canlock(p)) {
- if(p->ref == 0)
+ if(p->ref == 0 && p->image && canlock(p)) {
+ if(p->ref == 0 && p->image != &swapimage)
uncachepage(p);
unlock(p);
}