]> git.lizzy.rs Git - plan9front.git/commitdiff
pc: modify cpu0 page tables in patwc() instead of current cpu ones
authorcinap_lenrek <cinap_lenrek@felloff.net>
Sat, 17 Dec 2016 18:47:35 +0000 (19:47 +0100)
committercinap_lenrek <cinap_lenrek@felloff.net>
Sat, 17 Dec 2016 18:47:35 +0000 (19:47 +0100)
on 386 kernel, each processor has its own pdb where the primary
pdb for kernel mappings is on cpu0 and other cpu's lazily pull
pdb entries from cpu0 when they fault in vmapsync().

so we have to edit the table tables in the pdb of cpu0 and not
the current processor.

sys/src/9/pc/mmu.c

index 3c79f90a3b91921555c4a8a2cbe609cf983c61f6..c0f7b7718c6fb6de8201d546582607b7f59eb96d 100644 (file)
@@ -1097,12 +1097,12 @@ patwc(void *a, int n)
 
        /* set the bits for all pages in range */
        for(va = (ulong)a; n > 0; n -= z, va += z){
-               pte = mmuwalk(m->pdb, va, 1, 0);
+               pte = mmuwalk(MACHP(0)->pdb, va, 1, 0);
                if(pte && (*pte & (PTEVALID|PTESIZE)) == (PTEVALID|PTESIZE)){
                        z = 4*MB - (va & (4*MB-1));
                        mask = 3<<3 | 1<<12;
                } else {
-                       pte = mmuwalk(m->pdb, va, 2, 0);
+                       pte = mmuwalk(MACHP(0)->pdb, va, 2, 0);
                        if(pte == 0 || (*pte & PTEVALID) == 0)
                                panic("patwc: va=%#p", va);
                        z = BY2PG - (va & (BY2PG-1));