M gnot/mmu.c => gnot/mmu.c +7 -0
@@ 143,7 143,9 @@ KMap*
kmap(Page *pg)
{
KMap *k;
+ int s;
+ s = splhi();
lock(&kmapalloc);
k = kmapalloc.free;
if(k == 0){
@@ 152,6 154,7 @@ kmap(Page *pg)
}
kmapalloc.free = k->next;
unlock(&kmapalloc);
+ splx(s);
k->pa = pg->pa;
putkmmu(k->va, PPN(k->pa) | PTEVALID | PTEKERNEL);
@@ 161,13 164,17 @@ kmap(Page *pg)
void
kunmap(KMap *k)
{
+ int s;
+
k->pa = 0;
putkmmu(k->va, INVALIDPTE);
+ s = splhi();
lock(&kmapalloc);
k->next = kmapalloc.free;
kmapalloc.free = k;
unlock(&kmapalloc);
+ splx(s);
}
void
M pc/fns.h => pc/fns.h +1 -1
@@ 1,6 1,6 @@
#include "../port/portfns.h"
-void a20enable(void);
+void meminit(void);
#define clearmmucache() /* 386 doesn't have one */
void clock(Ureg*);
void clockinit(void);
M pc/main.c => pc/main.c +8 -8
@@ 13,12 13,12 @@ extern long edata;
void
main(void)
{
- a20enable();
+ meminit();
machinit();
confinit();
screeninit();
printinit();
- print("%lud K bytes of physical memory\n", 1024 + conf.npage1*BY2PG/1024);
+ print("%ludK bytes of physical memory\n", (conf.base1 + conf.npage1*BY2PG)/1024);
mmuinit();
trapinit();
kbdinit();
@@ 174,14 174,14 @@ confinit(void)
break;
x += 0x3141526;
}
- conf.npage1 = (i-2)*1024/4;
- conf.base1 = 1024*1024;
+ conf.base1 = 0x100000;
+ conf.npage1 = ((i-1)*1024*1024 - conf.base1)/BY2PG;
conf.npage = conf.npage0 + conf.npage1;
conf.maxialloc = 2*1024*1024;
mul = 1;
- conf.nproc = 20 + 20*mul;
+ conf.nproc = 10 + 10*mul;
conf.npgrp = conf.nproc/2;
conf.nseg = conf.nproc*3;
conf.npagetab = (conf.nseg*14)/10;
@@ 198,7 198,7 @@ confinit(void)
conf.nmntbuf = conf.nmntdev+3;
conf.nmnthdr = 2*conf.nmntdev;
conf.nsrv = 16*mul; /* was 32 */
- conf.nbitmap = 512*mul;
+ conf.nbitmap = 256*mul;
conf.nbitbyte = conf.nbitmap*1024*screenbits();
conf.nfont = 10*mul;
conf.nnoifc = 1;
@@ 296,9 296,9 @@ enum
* enable address bit 20
*/
void
-a20enable(void)
+meminit(void)
{
- outb(Head, A20ena);
+ outb(Head, A20ena); /* enable memory address bit 20 */
}
/*
M pc/mmu.c => pc/mmu.c +1 -1
@@ 124,7 124,7 @@ mmuinit(void)
*/
/* allocate and fill low level page tables for kernel mem */
- npage = (1024*1024)/BY2PG + conf.npage1;
+ npage = conf.base1/BY2PG + conf.npage1;
nbytes = PGROUND(npage*BY2WD); /* words of page map */
nkpt = nbytes/BY2PG; /* pages of page map */
kpt = ialloc(nbytes, 1);
M pc/trap.c => pc/trap.c +1 -1
@@ 174,7 174,7 @@ trap(Ureg *ur)
v = ur->trap;
if(v>=256 || ivec[v] == 0){
- print("bad trap type %d %lux %lux %lux\n", v, ur->pc, int0mask, int1mask);
+ panic("bad trap type %d %lux %lux %lux\n", v, ur->pc, int0mask, int1mask);
return;
}