Removed KSTACKTOP
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 8 Jun 2011 19:29:21 +0000 (12:29 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:36:04 +0000 (17:36 -0700)
This was the virtual mapping of core0's kernel stack (aka, bootstack)
into space below KERNBASE.  We actually haven't even used the virtual
mapping for about 8 months - since kthreadding back in d6177dffd9735.

kern/arch/i686/pmap.c
kern/arch/i686/trap.c
kern/include/ros/memlayout.h

index 0e4814e..fcada6c 100644 (file)
@@ -324,21 +324,6 @@ vm_init(void)
        pgdir[PDX(UVPT)] = PADDR(pgdir) | PTE_U | PTE_P | PTE_G;
 
        //////////////////////////////////////////////////////////////////////
        pgdir[PDX(UVPT)] = PADDR(pgdir) | PTE_U | PTE_P | PTE_G;
 
        //////////////////////////////////////////////////////////////////////
-       // Map the kernel stack (symbol name "bootstack").  The complete VA
-       // range of the stack, [KSTACKTOP-PTSIZE, KSTACKTOP), breaks into two
-       // pieces:
-       //     * [KSTACKTOP-KSTKSIZE, KSTACKTOP) -- backed by physical memory
-       //     * [KSTACKTOP-PTSIZE, KSTACKTOP-KSTKSIZE) -- not backed => faults
-       //     Permissions: kernel RW, user NONE
-       // Your code goes here:
-
-       // remember that the space for the kernel stack is allocated in the binary.
-       // bootstack and bootstacktop point to symbols in the data section, which 
-       // at this point are like 0xc010b000.  KSTACKTOP is the desired loc in VM
-       boot_map_segment(pgdir, (uintptr_t)KSTACKTOP - KSTKSIZE, 
-                        KSTKSIZE, PADDR(bootstack), PTE_W | PTE_G);
-
-       //////////////////////////////////////////////////////////////////////
        // Map all of physical memory at KERNBASE. 
        // Ie.  the VA range [KERNBASE, 2^32) should map to
        //      the PA range [0, 2^32 - KERNBASE)
        // Map all of physical memory at KERNBASE. 
        // Ie.  the VA range [KERNBASE, 2^32) should map to
        //      the PA range [0, 2^32 - KERNBASE)
@@ -458,16 +443,11 @@ check_boot_pgdir(bool pse)
                for (i = 0; i < maxaddrpa; i += PGSIZE)
                        assert(check_va2pa(pgdir, KERNBASE + i) == i);
 
                for (i = 0; i < maxaddrpa; i += PGSIZE)
                        assert(check_va2pa(pgdir, KERNBASE + i) == i);
 
-       // check kernel stack
-       for (i = 0; i < KSTKSIZE; i += PGSIZE)
-               assert(check_va2pa(pgdir, KSTACKTOP - KSTKSIZE + i) == PADDR(bootstack) + i);
-
        // check for zero/non-zero in PDEs
        for (i = 0; i < NPDENTRIES; i++) {
                switch (i) {
                case PDX(VPT):
                case PDX(UVPT):
        // check for zero/non-zero in PDEs
        for (i = 0; i < NPDENTRIES; i++) {
                switch (i) {
                case PDX(VPT):
                case PDX(UVPT):
-               case PDX(KSTACKTOP-1):
                case PDX(LAPIC_BASE): // LAPIC mapping.  TODO: remove when MTRRs are up
                        assert(pgdir[i]);
                        break;
                case PDX(LAPIC_BASE): // LAPIC mapping.  TODO: remove when MTRRs are up
                        assert(pgdir[i]);
                        break;
index d5f567c..0413dd5 100644 (file)
@@ -163,16 +163,12 @@ void idt_init(void)
        idt[T_SYSCALL].gd_type = SINIT(STS_TG32);
        idt[T_BRKPT].gd_dpl = SINIT(3);
 
        idt[T_SYSCALL].gd_type = SINIT(STS_TG32);
        idt[T_BRKPT].gd_dpl = SINIT(3);
 
-       /* Setup a TSS so that we get the right stack when we trap to the kernel.
-        * We need to use the KVA for stacktop, and not the memlayout virtual
-        * address, so we can free it later (and check for other bugs). */
-       pte_t *pte = pgdir_walk(boot_pgdir, (void*)KSTACKTOP - PGSIZE, 0);
-       uintptr_t stacktop_kva = (uintptr_t)ppn2kva(PTE2PPN(*pte)) + PGSIZE;
-       ts.ts_esp0 = stacktop_kva;
+       /* Setup a TSS so that we get the right stack when we trap to the kernel. */
+       ts.ts_esp0 = (uintptr_t)bootstacktop;
        ts.ts_ss0 = SINIT(GD_KD);
 #ifdef __CONFIG_KTHREAD_POISON__
        /* TODO: KTHR-STACK */
        ts.ts_ss0 = SINIT(GD_KD);
 #ifdef __CONFIG_KTHREAD_POISON__
        /* TODO: KTHR-STACK */
-       uintptr_t *poison = (uintptr_t*)ROUNDDOWN(stacktop_kva - 1, PGSIZE);
+       uintptr_t *poison = (uintptr_t*)ROUNDDOWN(bootstacktop - 1, PGSIZE);
        *poison = 0xdeadbeef;
 #endif /* __CONFIG_KTHREAD_POISON__ */
 
        *poison = 0xdeadbeef;
 #endif /* __CONFIG_KTHREAD_POISON__ */
 
index 47a1b7a..051bf5e 100644 (file)
@@ -12,6 +12,7 @@
  * which are relevant to both the kernel and user-mode software.
  */
 
  * which are relevant to both the kernel and user-mode software.
  */
 
+/* Note: this map is out of date, esp for the 64 bit layout */
 /*
  * Virtual memory map:                                Permissions
  *                                                    kernel/user
 /*
  * Virtual memory map:                                Permissions
  *                                                    kernel/user
@@ -28,9 +29,9 @@
  *                     |                              | RW/--
  *    KERNBASE ----->  +------------------------------+ 0xc0000000
  *                     |  Cur. Page Table (Kern. RW)  | RW/--  PTSIZE
  *                     |                              | RW/--
  *    KERNBASE ----->  +------------------------------+ 0xc0000000
  *                     |  Cur. Page Table (Kern. RW)  | RW/--  PTSIZE
- *    VPT,KSTACKTOP--> +------------------------------+ 0xbfc00000      --+
- *                     |         Kernel Stack         | RW/--  KSTKSIZE   |
- *                     | - - - - - - - - - - - - - - -|                 PTSIZE
+ *    VPT          --> +------------------------------+ 0xbfc00000      --+
+ *                     |                              |                   |
+ *                     |                              |                 PTSIZE
  *                     |      Invalid Memory (*)      | --/--             |
  *    ULIM      ---->  +------------------------------+ 0xbf800000      --+
  *                     |  Cur. Page Table (User R-)   | R-/R-  PTSIZE
  *                     |      Invalid Memory (*)      | --/--             |
  *    ULIM      ---->  +------------------------------+ 0xbf800000      --+
  *                     |  Cur. Page Table (User R-)   | R-/R-  PTSIZE
@@ -93,7 +94,6 @@
 // which maps all the PTEs containing the page mappings for the entire
 // virtual address space into that 4 Meg region starting at VPT.
 #define VPT            (KERNBASE - PTSIZE)
 // which maps all the PTEs containing the page mappings for the entire
 // virtual address space into that 4 Meg region starting at VPT.
 #define VPT            (KERNBASE - PTSIZE)
-#define KSTACKTOP      VPT
 #define KSTKSHIFT      (PGSHIFT+3)             // KSTKSIZE == 8*PGSIZE
 #define KSTKSIZE       (1 << KSTKSHIFT)        // size of a kernel stack
 
 #define KSTKSHIFT      (PGSHIFT+3)             // KSTKSIZE == 8*PGSIZE
 #define KSTKSIZE       (1 << KSTKSHIFT)        // size of a kernel stack