util: Add an unmap_m5_mem() function to the m5 util's m5_mmap.*.
authorGabe Black <gabeblack@google.com>
Sat, 11 Apr 2020 06:06:16 +0000 (23:06 -0700)
committerGabe Black <gabeblack@google.com>
Thu, 17 Sep 2020 02:30:26 +0000 (02:30 +0000)
This cleans up the mmap-ing. This is primarily used for testing since
the tests may end up mmap-ing the backing file many times, and we don't
want all those earlier mappings lying around.

This change also makes the original mmap-ing function close the file it
opens, since the man page for mmap explicitly says you can do that and
not lose the mapping. That means we don't have to keep track of the file
descriptor which corresponds to the mmap-ed file when we do the
unmapping, and it's slightly cleaner in general.

Change-Id: I90e3e755cebf3d03e2bf644adf8ef3e157236172
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/27750
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Reviewed-by: Pouya Fotouhi <pfotouhi@ucdavis.edu>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
util/m5/src/m5_mmap.c
util/m5/src/m5_mmap.h

index d3413031d4aa431b6f2a3431afca180458dab497..c088e264eb7343c395af2642674b01bf56b6aa60 100644 (file)
@@ -46,6 +46,7 @@
 #include <sys/mman.h>
 #include <sys/stat.h>
 #include <sys/types.h>
+#include <unistd.h>
 
 #include "m5_mmap.h"
 
@@ -63,6 +64,11 @@ map_m5_mem()
 {
     int fd;
 
+    if (m5_mem) {
+        fprintf(stderr, "m5 mem already mapped.\n");
+        exit(1);
+    }
+
     fd = open(m5_mmap_dev, O_RDWR | O_SYNC);
     if (fd == -1) {
         fprintf(stderr, "Can't open %s: %s\n", m5_mmap_dev, strerror(errno));
@@ -71,8 +77,19 @@ map_m5_mem()
 
     m5_mem = mmap(NULL, 0x10000, PROT_READ | PROT_WRITE, MAP_SHARED, fd,
                   m5op_addr);
+    close(fd);
+
     if (!m5_mem) {
         fprintf(stderr, "Can't map %s: %s\n", m5_mmap_dev, strerror(errno));
         exit(1);
     }
 }
+
+void
+unmap_m5_mem()
+{
+    if (m5_mem) {
+        munmap(m5_mem, 0x10000);
+        m5_mem = NULL;
+    }
+}
index 09cddb29c66384f2edd0fb93bb101b2891253bba..ce934f08a4d1a09216b179508d915c84eea9f6a2 100644 (file)
@@ -51,6 +51,7 @@ extern void *m5_mem;
 extern uint64_t m5op_addr;
 extern const char *m5_mmap_dev;
 void map_m5_mem();
+void unmap_m5_mem();
 
 #ifdef __cplusplus
 }