From 6bae7ed8b900bc0f1fb1df0f70ceed5e8cca0ca1 Mon Sep 17 00:00:00 2001 From: bellard Date: Sat, 23 Apr 2005 20:44:25 +0000 Subject: informative message about low memory on /dev/shm git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1388 c046a42c-6fe2-441c-8c8c-71466251a162 --- osdep.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'osdep.c') diff --git a/osdep.c b/osdep.c index eef1ecbecb..f2a69d9a71 100644 --- a/osdep.c +++ b/osdep.c @@ -323,6 +323,7 @@ void qemu_vfree(void *ptr) #elif defined(USE_KQEMU) +#include #include #include @@ -333,11 +334,37 @@ void *qemu_vmalloc(size_t size) const char *tmpdir; char phys_ram_file[1024]; void *ptr; + struct statfs stfs; if (phys_ram_fd < 0) { tmpdir = getenv("QEMU_TMPDIR"); if (!tmpdir) tmpdir = "/dev/shm"; + if (statfs(tmpdir, &stfs) == 0) { + int64_t free_space; + int ram_mb; + + extern int ram_size; + free_space = (int64_t)stfs.f_bavail * stfs.f_bsize; + if ((ram_size + 8192 * 1024) >= free_space) { + ram_mb = (ram_size / (1024 * 1024)); + fprintf(stderr, + "You do not have enough space in '%s' for the %d MB of QEMU virtual RAM.\n", + tmpdir, ram_mb); + if (strcmp(tmpdir, "/dev/shm") == 0) { + fprintf(stderr, "To have more space available provided you have enough RAM and swap, do as root:\n" + "umount /dev/shm\n" + "mount -t tmpfs -o size=%dm none /dev/shm\n", + ram_mb + 16); + } else { + fprintf(stderr, + "Use the '-m' option of QEMU to diminish the amount of virtual RAM or use the\n" + "QEMU_TMPDIR environment variable to set another directory where the QEMU\n" + "temporary RAM file will be opened.\n"); + } + exit(1); + } + } snprintf(phys_ram_file, sizeof(phys_ram_file), "%s/qemuXXXXXX", tmpdir); if (mkstemp(phys_ram_file) < 0) { -- cgit v1.2.3