X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=osdep.c;h=f2a69d9a7172c0e56c8598c8a37be119ef662a37;hb=b195775fef3c221ff04e3091005e16c5745bf3c8;hp=eef1ecbecbd8ae9ab88924a4352d9bdd32f43dfe;hpb=6e4255f6a65091fbe7d17bfda546e2aa1b72f9a6;p=qemu diff --git a/osdep.c b/osdep.c index eef1ecb..f2a69d9 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) {