From fd2f71bd9f41a7984b92d8300f1f2254c207cbee Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Thu, 2 Jun 1994 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1994-06-02 --- pc/fns.h | 19 +++++++++++++++++++ pc/l.s | 33 +++++++++++++++++++++++++++++++++ port/segment.c | 4 ++-- 3 files changed, 54 insertions(+), 2 deletions(-) diff --git a/pc/fns.h b/pc/fns.h index e1d6920b62fd722017cdddedf5965d3fa145233e..1a7e474ab462bd753b538384d61b2e05c409b7ce 100644 --- a/pc/fns.h +++ b/pc/fns.h @@ -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*); diff --git a/pc/l.s b/pc/l.s index 220332ad188207f99fb8146e0a63e4d750424321..2aa201ddc8c7d8e917368b7c8fd533edceae4f08 100644 --- a/pc/l.s +++ b/pc/l.s @@ -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 diff --git a/port/segment.c b/port/segment.c index 5b3c46e5c6187004266e097813797c76c433d357..84d47e91ef2506b06be1a7fd1b6a5b663b6c1708 100644 --- a/port/segment.c +++ b/port/segment.c @@ -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); }