UTOP -> UWLIM
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 8 Jun 2011 20:49:41 +0000 (13:49 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:36:04 +0000 (17:36 -0700)
Clarifies (and fixes) the confusing usage of UTOP as the upper limit to
user-writable VAs.  ULIM is the max accessible, and UWLIM is the max
writeable.

This touches the kernel headers, but the values haven't changed so you
shouldn't need to rebuild glibc or anything.

kern/arch/i686/env.c
kern/arch/i686/pmap.c
kern/include/ros/memlayout.h
kern/include/umem.h
kern/src/env.c

index 16ac1ec..10aad41 100644 (file)
@@ -18,10 +18,10 @@ void env_pop_tf(trapframe_t *tf)
 {
        /* Bug with this whole idea (TODO: (TLSV))*/
        /* Load the LDT for this process.  Slightly ghetto doing it here. */
-       /* copy-in and check the LDT location.  the segmentation hardware write the
+       /* copy-in and check the LDT location.  the segmentation hardware writes the
         * accessed bit, so we want the memory to be in the user-writeable area. */
        segdesc_t *ldt = current->procdata->ldt;
-       ldt = (segdesc_t*)MIN((uintptr_t)ldt, UTOP - LDT_SIZE);
+       ldt = (segdesc_t*)MIN((uintptr_t)ldt, UWLIM - LDT_SIZE);
        /* Only set up the ldt if a pointer to the ldt actually exists */
        if(ldt != NULL) {
                segdesc_t *my_gdt = per_cpu_info[core_id()].gdt;
index fcada6c..1b78d2e 100644 (file)
@@ -253,10 +253,10 @@ void setup_default_mtrrs(barrier_t* smp_barrier)
 // (i.e., the segment base addrs are set to zero).
 // 
 // This function only sets up the kernel part of the address space
-// (ie. addresses >= UTOP).  The user part of the address space
+// (ie. addresses >= ULIM).  The user part of the address space
 // will be setup later.
 //
-// From UTOP to ULIM, the user is allowed to read but not write.
+// From UWLIM to ULIM, the user is allowed to read but not write.
 // Above ULIM the user cannot read (or write). 
 void
 vm_init(void)
@@ -473,7 +473,7 @@ check_boot_pgdir(bool pse)
         * having a U on the entry doesn't make sense.  Thus we check for a jumbo
         * page, and special case it.  This will happen at 0xbf701000.  Why is this
         * magical?  Get your eagle glasses and figure it out. */
-       for (i = UTOP; i < ULIM; i+=PGSIZE) {
+       for (i = UWLIM; i < ULIM; i+=PGSIZE) {
                pte = get_va_perms(pgdir, (void*SAFE)TC(i));
                if (pte & PTE_P) {
                        if (i == UVPT+(VPT >> 10))
index 18d426e..eeba100 100644 (file)
@@ -39,7 +39,7 @@
  *                     | Unmapped (expandable region) |                   |
  *                     |                              | R-/R-            PTSIZE
  *                     |     Per-Process R/O Info     |                   |
- * UTOP, UINFO  ---->  +------------------------------+ 0xbf000000      --+
+ * UWLIM, UINFO ---->  +------------------------------+ 0xbf000000      --+
  *                     | Unmapped (expandable region) |                   |
  *                     |                              | RW/RW            PTSIZE
  *                     |     Per-Process R/W Data     |                   |
@@ -98,7 +98,7 @@
 #define KSTKSIZE       (1 << KSTKSHIFT)        /* size of a static kernel stack */
 
 /*
- * User read-only mappings! Anything below here til UTOP are readonly to user.
+ * User read-only mappings! Anything below here til UWLIM are readonly to user.
  * They are global pages mapped in at env allocation time.
  */
 
 #define UVPT           (ULIM - PTSIZE)
 
 /*
- * Top of user VM. User can manipulate VA from UTOP-1 and down!
+ * Top of user VM. User can manipulate VA from UWLIM-1 and down!
  */
 
 // Top of user-accessible VM
-#define UTOP           (UVPT - PTSIZE)
+#define UWLIM          (UVPT - PTSIZE)
 // Read-only, per-process shared info structures
-#define UINFO          UTOP
+#define UINFO          UWLIM
 
 // Read-write, per-process shared page for sending asynchronous 
 // syscalls to the kernel
-#define UDATA    (UTOP - PTSIZE)
+#define UDATA    (UWLIM - PTSIZE)
 
 // Read-write, global page.  Shared by all processes.  Can't be trusted.
 #define UGDATA   (UDATA - PGSIZE)
index 9bdb37c..f5296f1 100644 (file)
@@ -45,8 +45,8 @@ void *kmalloc_errno(int len);
 bool uva_is_kva(struct proc *p, void *uva, void *kva);
 uintptr_t uva2kva(struct proc *p, void *uva);
 
-/* UTOP is defined as virtual address below which a process can write */
+/* UWLIM is defined as virtual address below which a process can write */
 static inline bool is_user_rwaddr(void *addr)
 {
-       return ((uintptr_t)addr < UTOP) ? TRUE : FALSE;
+       return ((uintptr_t)addr < UWLIM) ? TRUE : FALSE;
 }
index 17abc26..181fc3e 100644 (file)
@@ -63,7 +63,7 @@ WRITES(e->env_pgdir, e->env_cr3, e->procinfo, e->procdata)
 
        // Map in the kernel to the top of every address space
        // should be able to do this so long as boot_pgdir never has
-       // anything put below UTOP
+       // anything put below ULIM
        // TODO check on this!  had a nasty bug because of it
        // this is a bit wonky, since if it's not PGSIZE, lots of other things are
        // screwed up...