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>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
+#include <unistd.h>
#include "m5_mmap.h"
{
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));
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;
+ }
+}
extern uint64_t m5op_addr;
extern const char *m5_mmap_dev;
void map_m5_mem();
+void unmap_m5_mem();
#ifdef __cplusplus
}