Update mmap() tests.
authorBen Pfaff <blp@cs.stanford.edu>
Tue, 29 Mar 2005 07:41:20 +0000 (07:41 +0000)
committerBen Pfaff <blp@cs.stanford.edu>
Tue, 29 Mar 2005 07:41:20 +0000 (07:41 +0000)
Change MAPID_ERROR to MAP_FAILED to be closer to POSIX.

grading/vm/child-mm-wrt.c
grading/vm/mmap-close.c
grading/vm/mmap-overlap.c
grading/vm/mmap-read.c
grading/vm/mmap-shuffle.c
grading/vm/mmap-twice.c
grading/vm/mmap-unmap.c
grading/vm/mmap-write.c
grading/vm/posix-compat.c
src/lib/user/syscall.h

index 28a52c61825a216ca3b11b0f7fa372affc7d8969..b0794ec2690146706a720c9af17edc1549e5c6f8 100644 (file)
@@ -30,7 +30,7 @@ main (void)
       return 1;
     }
 
-  if (!mmap (fd, ACTUAL, strlen (sample)))
+  if (mmap (fd, ACTUAL) == MAP_FAILED)
     {
       printf ("(child-mm-wrt) mmap() failed\n");
       return 1;
index 901b34d26d09d11552e0881ecad91320932988f3..335f244d4a078767c35fa3d55e8374e5a3cc70a2 100644 (file)
@@ -14,6 +14,7 @@ int
 main (void) 
 {
   int fd;
+  mapid_t map;
 
   printf ("(mmap-close) begin\n");
 
@@ -24,7 +25,8 @@ main (void)
       return 1;
     }
 
-  if (!mmap (fd, ACTUAL, strlen (sample)))
+  map = mmap (fd, ACTUAL);
+  if (map == MAP_FAILED)
     {
       printf ("(mmap-close) mmap() failed\n");
       return 1;
@@ -38,7 +40,7 @@ main (void)
       return 1;
     }
 
-  munmap (ACTUAL, strlen (sample));
+  munmap (map);
 
   /* Done. */
   printf ("(mmap-close) end\n");
index 6153793911201b7342fe54c1639f14ff6b449d01..d2104b8b8139652bfd69325a9a518bc74174565a 100644 (file)
@@ -30,7 +30,7 @@ main (void)
           printf ("(mmap-overlap) open() failed\n");
           return 1;
         }
-      if (!mmap (fd[i], start, 8192))
+      if (mmap (fd[i], start) == MAP_FAILED)
         {
           if (i == 1) 
             return 0;
index b763dddb2374b1bb5ffa35640f5f11fddca3485b..cb25ba1457bb8879eb48d3734539bebd30f8f669 100644 (file)
@@ -13,6 +13,7 @@ int
 main (void) 
 {
   int fd;
+  mapid_t map;
 
   printf ("(mmap-read) begin\n");
 
@@ -23,7 +24,8 @@ main (void)
       return 1;
     }
 
-  if (!mmap (fd, ACTUAL, strlen (sample)))
+  map = mmap (fd, ACTUAL);
+  if (map == MAP_FAILED)
     {
       printf ("(mmap-read) mmap() failed\n");
       return 1;
@@ -35,7 +37,7 @@ main (void)
       return 1;
     }
 
-  if (!munmap (ACTUAL, strlen (sample)))
+  if (!munmap (map))
     {
       printf ("(mmap-read) munmap() failed\n");
       return 1;
index ae16f4a206fb565809f2d7012fa85bbaafb01153..15a37f438f26feb8ad5a047ef5f81a972624fb87 100644 (file)
@@ -72,7 +72,7 @@ main (void)
       return 1;
     }
 
-  if (!mmap (fd, buf, SIZE))
+  if (mmap (fd, buf) == MAP_FAILED)
     {
       printf ("(mmap-shuffle) mmap() failed\n");
       return 1;
index aba5ef2869b0f0335b93c39a553682252a610427..a2b5a10e35a6869649ea7aa090f17c22253f39b5 100644 (file)
@@ -24,7 +24,7 @@ main (void)
           printf ("(mmap-twice) open() #%zu failed\n", i);
           return 1;
         }
-      if (!mmap (fd[i], actual[i], 8192))
+      if (mmap (fd[i], actual[i]) == MAP_FAILED)
         {
           printf ("(mmap-twice) mmap() #%zu failed\n", i);
           return 1; 
index 2ab3eeab1cf6d7ec757e74596a9db3a9cf65d230..327158b62f56cf502eb45f9d462d37d04825b00c 100644 (file)
@@ -13,6 +13,7 @@ int
 main (void) 
 {
   int fd;
+  mapid_t map;
 
   printf ("(mmap-unmap) begin\n");
 
@@ -23,13 +24,14 @@ main (void)
       return 1;
     }
 
-  if (!mmap (fd, ACTUAL, strlen (sample)))
+  map = mmap (fd, ACTUAL);
+  if (map == MAP_FAILED)
     {
       printf ("(mmap-unmap) mmap() failed\n");
       return 1;
     }
 
-  munmap (ACTUAL, strlen (sample));
+  munmap (map);
 
   printf ("(mmap-unmap) FAIL: unmapped memory is readable (%d)\n",
           *(int *) ACTUAL);
index 183c822a12f073313842fcdc864e6cbd3d2269a9..2a9cda49ff1d9e51fada7854fb2718b5603d5488 100644 (file)
@@ -13,6 +13,7 @@ int
 main (void) 
 {
   int fd;
+  mapid_t map;
   char buf[1024];
 
   printf ("(mmap-write) begin\n");
@@ -31,13 +32,14 @@ main (void)
       return 1;
     }
 
-  if (!mmap (fd, ACTUAL, strlen (sample)))
+  map = mmap (fd, ACTUAL);
+  if (map == MAP_FAILED)
     {
       printf ("(mmap-write) mmap() failed\n");
       return 1;
     }
   memcpy (ACTUAL, sample, strlen (sample));
-  munmap (ACTUAL, strlen (sample));
+  munmap (map);
 
   /* Read back via read(). */
   read (fd, buf, strlen (sample));
index dc5b5ab668798ce05c01c0b7000950cb8acb0286..a4aae6ba5e8171119261922ac6af238eab0a658f 100644 (file)
@@ -1,4 +1,5 @@
 #include <dirent.h>
+#include <round.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -100,10 +101,9 @@ pintos_open (const char *file)
 int
 pintos_filesize (int fd) 
 {
-  off_t old = lseek (fd, 0, SEEK_CUR);
-  off_t size = lseek (fd, 0, SEEK_END);
-  lseek (fd, old, SEEK_SET);
-  return size;
+  struct stat s;
+  fstat (fd, &s);
+  return s.st_size;
 }
 
 int
@@ -137,17 +137,24 @@ pintos_close (int fd)
   close (fd);
 }
 
-bool
-pintos_mmap (int fd, void *addr, unsigned length
+mapid_t
+pintos_mmap (int fd, void *addr) 
 {
-  return mmap (addr, length, PROT_READ | PROT_WRITE,
-               MAP_SHARED | MAP_FIXED, fd, 0) == addr;
+  size_t page_size = getpagesize ();
+  int length = pintos_filesize (fd);
+  uintptr_t ptr = (uintptr_t) mmap (addr, length, PROT_READ | PROT_WRITE,
+                                    MAP_SHARED | MAP_FIXED, fd, 0);
+  return ptr | DIV_ROUND_UP (size, page_size);
 }
 
 bool
 pintos_munmap (void *addr, unsigned length) 
 {
-  return munmap (addr, length) == 0;
+  size_t page_size = getpagesize ();
+  uintptr_t page_mask = page_size - 1;
+  void *base = (void *) ((uintptr_t) addr & ~page_mask);
+  size_t length = ((uintptr_t) addr & page_mask) * page_size;
+  return munmap (base, length);
 }
 
 bool
index f6294667428490acd3debb417c7c369981ca7a17..147252531bb0db74ae12bd74d378a25ea02bbebf 100644 (file)
@@ -8,7 +8,7 @@ typedef int pid_t;
 #define PID_ERROR ((pid_t) -1)
 
 typedef int mapid_t;
-#define MAPID_ERROR ((mapid_t) -1)
+#define MAP_FAILED ((mapid_t) -1)
 
 void halt (void) NO_RETURN;
 void exit (int status) NO_RETURN;