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)
 | 
					#elif defined(USE_KQEMU)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <sys/vfs.h>
 | 
				
			||||||
#include <sys/mman.h>
 | 
					#include <sys/mman.h>
 | 
				
			||||||
#include <fcntl.h>
 | 
					#include <fcntl.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -333,11 +334,37 @@ void *qemu_vmalloc(size_t size)
 | 
				
			|||||||
    const char *tmpdir;
 | 
					    const char *tmpdir;
 | 
				
			||||||
    char phys_ram_file[1024];
 | 
					    char phys_ram_file[1024];
 | 
				
			||||||
    void *ptr;
 | 
					    void *ptr;
 | 
				
			||||||
 | 
					    struct statfs stfs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (phys_ram_fd < 0) {
 | 
					    if (phys_ram_fd < 0) {
 | 
				
			||||||
        tmpdir = getenv("QEMU_TMPDIR");
 | 
					        tmpdir = getenv("QEMU_TMPDIR");
 | 
				
			||||||
        if (!tmpdir)
 | 
					        if (!tmpdir)
 | 
				
			||||||
            tmpdir = "/dev/shm";
 | 
					            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", 
 | 
					        snprintf(phys_ram_file, sizeof(phys_ram_file), "%s/qemuXXXXXX", 
 | 
				
			||||||
                 tmpdir);
 | 
					                 tmpdir);
 | 
				
			||||||
        if (mkstemp(phys_ram_file) < 0) {
 | 
					        if (mkstemp(phys_ram_file) < 0) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user