From b8a76cf83f6d04e056de60d8ff67ef721d5365fe Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Fri, 2 Aug 2002 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2002-08-02 --- pc/etherga620.c | 6 ++++++ port/fault.c | 24 +++++++++++------------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/pc/etherga620.c b/pc/etherga620.c index 6e286cc17fb43cb5a53a3c84fef8c28e98aa1e11..72c7f6149f15d93585cd1deddada3ac3270fbfc3 100644 --- a/pc/etherga620.c +++ b/pc/etherga620.c @@ -377,11 +377,13 @@ ga620ctl(Ether* edev, void* buf, long n) control = ctlr->gib->srcb.control; control &= ~CoalUpdateOnly; ctlr->gib->srcb.control = control; + ctlr->coalupdateonly = 0; } else if(cistrcmp(cb->f[1], "on") == 0){ control = ctlr->gib->srcb.control; control |= CoalUpdateOnly; ctlr->gib->srcb.control = control; + ctlr->coalupdateonly = 1; } else r = -1; @@ -395,6 +397,8 @@ ga620ctl(Ether* edev, void* buf, long n) control = ctlr->gib->rsrcb.control; control &= ~(TcpUdpCksum|NoPseudoHdrCksum); ctlr->gib->rsrcb.control = control; + + ctlr->hardwarecksum = 0; } else if(cistrcmp(cb->f[1], "on") == 0){ control = ctlr->gib->srcb.control; @@ -404,6 +408,8 @@ ga620ctl(Ether* edev, void* buf, long n) control = ctlr->gib->rsrcb.control; control |= (TcpUdpCksum|NoPseudoHdrCksum); ctlr->gib->rsrcb.control = control; + + ctlr->hardwarecksum = 1; } else r = -1; diff --git a/port/fault.c b/port/fault.c index 61fbc134b61d79c865fc8e4dab2e0f0834c62059..b96c2f43a9abb019e9b67cc78c1d2b7dd1fc3644 100644 --- a/port/fault.c +++ b/port/fault.c @@ -338,26 +338,24 @@ void* vmemchr(void *s, int c, int n) { int m; - char *t; ulong a; + void *t; - loop: a = (ulong)s; - m = BY2PG - (a & (BY2PG-1)); - if(m < n){ - t = memchr(s, c, m); + while(PGROUND(a) != PGROUND(a+n-1)){ + /* spans pages; handle this page */ + m = BY2PG - (a & (BY2PG-1)); + t = memchr((void*)a, c, m); if(t) return t; - if((a & KZERO) != KZERO) - validaddr(a+m, 1, 0); - s = (void*)(a+m); + a += m; n -= m; - goto loop; + if((a & KZERO) != KZERO) + validaddr(a, 1, 0); } - /* - * All in one page - */ - return memchr(s, c, n); + + /* fits in one page */ + return memchr((void*)a, c, n); } Segment*