M carrera/l.s => carrera/l.s +2 -3
@@ 344,7 344,6 @@ utlbcom:
TLBWR
ERET
utlindex:
- MOVW R0,(R0)
TLBWI
ERET
@@ 443,7 442,7 @@ TEXT saveregs(SB), $-4
MOVW R2, 0x98(SP)
/* save R5, R6 as 64 bits */
ADDU $(UREGSIZE-16), SP, R1
- MOVW $~7, R2 /* don't let him use R28 */
+ MOVW $~7, R2 /* don't let him use R28 */
AND R2, R1
STD (5, 0,(1))
STD (6, 8,(1))
@@ 536,7 535,7 @@ TEXT restregs(SB), $-4
MOVW R1, HI
/* restore 64-bit R5, R6 */
ADDU $(UREGSIZE-16), SP, R1
- MOVW $~7, R2 /* don't let him use R28 */
+ MOVW $~7, R2 /* don't let him use R28 */
AND R2, R1
LD (0,(1), 5)
LD (8,(1), 6)
M pc/devhard.c => pc/devhard.c +3 -0
@@ 1036,6 1036,9 @@ hardintr(Ureg *ur, void *arg)
break;
case Cinitparam:
case Csetbuf:
+ case Cidle:
+ case Cstandby:
+ case Cpowerdown:
cp->lastcmd = cp->cmd;
cp->cmd = 0;
wakeup(&cp->r);
M pc/main.c => pc/main.c +25 -4
@@ 286,9 286,10 @@ getconf(char *name)
void
confinit(void)
{
- long x, i, j, n;
+ long x, y, i, j, n;
int pcnt;
ulong ktop;
+ long *lp;
char *cp;
char *line[MAXCONF];
@@ 345,10 346,30 @@ confinit(void)
mmap[i] = 'x';
/*
* zero memory to set ECC but skip over the kernel
+ * do a quick memory test also
*/
- if(i != 1)
- for(j = 0; j < MB/BY2PG; j += BY2PG)
- memset(mapaddr(KZERO|(i*MB+j)), 0, BY2PG);
+ if(i != 1){
+ for(j = 0; j < MB/BY2PG; j += BY2PG){
+ lp = mapaddr(KZERO|(i*MB+j));
+ for(n = 0; n < BY2PG/BY2WD; n++)
+ lp[n] = x + n;
+ }
+ for(j = 0; j < MB/BY2PG; j += BY2PG){
+ lp = mapaddr(KZERO|(i*MB+j));
+ for(n = 0; n < BY2PG/(2*BY2WD); n++){
+ y = lp[n];
+ lp[n] = ~lp[n^((BY2PG/BY2WD)-1)];
+ lp[n^((BY2PG/BY2WD)-1)] = ~y;
+ }
+ }
+ for(j = 0; j < MB/BY2PG; j += BY2PG){
+ lp = mapaddr(KZERO|(i*MB+j));
+ for(n = 0; n < BY2PG/BY2WD; n++)
+ if(lp[n] != ~(x + (n^((BY2PG/BY2WD)-1))))
+ mmap[i] = ' ';
+ memset(lp, 0, BY2PG);
+ }
+ }
}
x += 0x3141526;
}
M port/qio.c => port/qio.c +3 -3
@@ 80,12 80,12 @@ iallocb(int size)
size = sizeof(Block) + size + (BY2V-1);
if(ialloc.bytes > conf.ialloc){
-iprint("whoops %d/%d\n", ialloc.bytes, conf.ialloc);
+ iprint("ialloc limit exceeded %d/%d\n", ialloc.bytes, conf.ialloc);
return 0;
}
b = mallocz(size, 0);
if(b == 0){
-iprint("malloc %d/%d\n", ialloc.bytes, conf.ialloc);
+ iprint("iallocb: no memory %d/%d\n", ialloc.bytes, conf.ialloc);
return 0;
}
memset(b, 0, sizeof(Block));
@@ 108,7 108,7 @@ iprint("malloc %d/%d\n", ialloc.bytes, conf.ialloc);
void
freeb(Block *b)
{
- if(b->intr){
+ if(b->intr) {
ilock(&ialloc);
ialloc.bytes -= b->lim - b->base;
iunlock(&ialloc);