env_user_mem_free now frees procinfo/procdata pages
authorAndrew Waterman <waterman@parcad.millennium.berkeley.edu>
Thu, 21 Jan 2010 01:18:20 +0000 (17:18 -0800)
committerAndrew Waterman <waterman@parcad.millennium.berkeley.edu>
Thu, 21 Jan 2010 01:18:20 +0000 (17:18 -0800)
The trick is to free up to KERNBASE, not UTOP,
because the procinfo/procdata pages lie above UTOP.

kern/arch/i386/env.c
kern/arch/sparc/env.c

index aa5ce87..e706115 100644 (file)
@@ -91,8 +91,8 @@ env_user_mem_free(env_t* e)
        uint32_t pdeno, pteno;
        physaddr_t pa;
 
-       static_assert(UTOP % PTSIZE == 0);
-       for (pdeno = 0; pdeno < PDX(UTOP); pdeno++) {
+       static_assert(KERNBASE % PTSIZE == 0);
+       for (pdeno = 0; pdeno < PDX(KERNBASE); pdeno++) {
 
                // only look at mapped page tables
                if (!(e->env_pgdir[pdeno] & PTE_P))
index 845a04c..3432eda 100644 (file)
@@ -103,8 +103,8 @@ env_user_mem_free(env_t* e)
        l2_tables_per_page = PGSIZE/(sizeof(pte_t)*NL2ENTRIES);
        l3_tables_per_page = PGSIZE/(sizeof(pte_t)*NL3ENTRIES);
 
-       static_assert(L2X(UTOP) == 0 && L3X(UTOP) == 0);
-       for(l1x = 0; l1x < L1X(UTOP); l1x++)
+       static_assert(L2X(KERNBASE) == 0 && L3X(KERNBASE) == 0);
+       for(l1x = 0; l1x < L1X(KERNBASE); l1x++)
        {
                if(!(l1pt[l1x] & PTE_PTD))
                        continue;