informative message about low memory on /dev/shm
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1388 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
74c161bd17
commit
6bae7ed8b9
27
osdep.c
27
osdep.c
@ -323,6 +323,7 @@ void qemu_vfree(void *ptr)
|
||||
|
||||
#elif defined(USE_KQEMU)
|
||||
|
||||
#include <sys/vfs.h>
|
||||
#include <sys/mman.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user