Commit 6bae7ed8b900bc0f1fb1df0f70ceed5e8cca0ca1
1 parent
74c161bd
informative message about low memory on /dev/shm
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1388 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
27 additions
and
0 deletions
osdep.c
... | ... | @@ -323,6 +323,7 @@ void qemu_vfree(void *ptr) |
323 | 323 | |
324 | 324 | #elif defined(USE_KQEMU) |
325 | 325 | |
326 | +#include <sys/vfs.h> | |
326 | 327 | #include <sys/mman.h> |
327 | 328 | #include <fcntl.h> |
328 | 329 | |
... | ... | @@ -333,11 +334,37 @@ void *qemu_vmalloc(size_t size) |
333 | 334 | const char *tmpdir; |
334 | 335 | char phys_ram_file[1024]; |
335 | 336 | void *ptr; |
337 | + struct statfs stfs; | |
336 | 338 | |
337 | 339 | if (phys_ram_fd < 0) { |
338 | 340 | tmpdir = getenv("QEMU_TMPDIR"); |
339 | 341 | if (!tmpdir) |
340 | 342 | tmpdir = "/dev/shm"; |
343 | + if (statfs(tmpdir, &stfs) == 0) { | |
344 | + int64_t free_space; | |
345 | + int ram_mb; | |
346 | + | |
347 | + extern int ram_size; | |
348 | + free_space = (int64_t)stfs.f_bavail * stfs.f_bsize; | |
349 | + if ((ram_size + 8192 * 1024) >= free_space) { | |
350 | + ram_mb = (ram_size / (1024 * 1024)); | |
351 | + fprintf(stderr, | |
352 | + "You do not have enough space in '%s' for the %d MB of QEMU virtual RAM.\n", | |
353 | + tmpdir, ram_mb); | |
354 | + if (strcmp(tmpdir, "/dev/shm") == 0) { | |
355 | + fprintf(stderr, "To have more space available provided you have enough RAM and swap, do as root:\n" | |
356 | + "umount /dev/shm\n" | |
357 | + "mount -t tmpfs -o size=%dm none /dev/shm\n", | |
358 | + ram_mb + 16); | |
359 | + } else { | |
360 | + fprintf(stderr, | |
361 | + "Use the '-m' option of QEMU to diminish the amount of virtual RAM or use the\n" | |
362 | + "QEMU_TMPDIR environment variable to set another directory where the QEMU\n" | |
363 | + "temporary RAM file will be opened.\n"); | |
364 | + } | |
365 | + exit(1); | |
366 | + } | |
367 | + } | |
341 | 368 | snprintf(phys_ram_file, sizeof(phys_ram_file), "%s/qemuXXXXXX", |
342 | 369 | tmpdir); |
343 | 370 | if (mkstemp(phys_ram_file) < 0) { | ... | ... |