M pc/etherga620.c => pc/etherga620.c +6 -0
@@ 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;
M port/fault.c => port/fault.c +11 -13
@@ 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*