M alphapc/clock.c => alphapc/clock.c +6 -3
@@ 44,6 44,7 @@ uvlong
cycletimer(void)
{
ulong pcc;
+ vlong delta;
pcc = rpcc(nil) & 0xFFFFFFFF;
if(m->cpuhz == 0){
@@ 60,10 61,11 @@ cycletimer(void)
m->cpuhz = hwrpb->cfreq;
m->pcclast = pcc;
}
- if(pcc < m->pcclast)
- m->fastclock += 0x100000000LL;
- m->fastclock += pcc;
+ delta = pcc - m->pcclast;
+ if(delta < 0)
+ delta += 0x100000000LL;
m->pcclast = pcc;
+ m->fastclock += delta;
return MACHP(0)->fastclock;
}
@@ 106,6 108,7 @@ clock(Ureg *ur)
Clock0link *lp;
static int count;
+ cycletimer();
/* HZ == 100, timer == 1024Hz. error < 1ms */
count += 100;
if (count < 1024)
M ip/il.c => ip/il.c +4 -3
@@ 350,7 350,7 @@ ilkick(Conv *c, int l)
ic->rttlen = dlen + IL_IPSIZE + IL_HDRSIZE;
}
- if(later(msec, ic->timeout, "ilkick"))
+ if(later(msec, ic->timeout, nil))
ilsettimeout(ic);
ipoput(f, bp, 0, c->ttl);
}
@@ 1035,12 1035,13 @@ later(ulong t1, ulong t2, char *x)
dt = t1 - t2;
if(dt > 0) {
- if(dt > Tfuture)
+ if(x != nil && dt > Tfuture)
print("%s: way future %d\n", x, dt);
return 1;
}
if(dt < -Tfuture) {
- print("%s: way past %d\n", x, -dt);
+ if(x != nil)
+ print("%s: way past %d\n", x, -dt);
return 1;
}
return 0;
M pc/devlml.c => pc/devlml.c +5 -3
@@ 405,8 405,8 @@ vwrite(Chan *, void *va, long count, vlong pos) {
memmove((char*)&frameHeader + hdrPos, buf, hdrLeft);
// Make sure we have a standard LML33 header
if (frameHeader.mrkSOI == MRK_SOI
- && frameHeader.mrkAPP3==MRK_APP3
- && strcmp(frameHeader.nm,APP_NAME) == 0) {
+ && frameHeader.mrkAPP3 == MRK_APP3
+ && strcmp(frameHeader.nm, APP_NAME) == 0) {
//print("Starting new buffer len=0x%x frame=%d\n", frameHeader.frameSize, frameHeader.frameSeqNo);
// Obtain values we need for playback process from the header
currentBufferLength = frameHeader.frameSize;
@@ 609,16 609,18 @@ vidread(Chan *c, void *va, long n, vlong off) {
}
return 1;
case Qreg:
- if (off < 0 || off + n > 0x200 || (off & 0x3))
+ if (off < 0 || off + n > 0x400)
return 0;
switch(n) {
case 1:
*buf = readb(pciBaseAddr + off);
break;
case 2:
+ if (off & (n-1)) return 0;
*(short *)buf = readw(pciBaseAddr + off);
break;
case 4:
+ if (off & (n-1)) return 0;
*(long *)buf = readl(pciBaseAddr + off);
break;
default: