exec: Reduce ifdeffery around -mem-path
Instead of spreading its ifdeffery everywhere, confine it to qemu_ram_alloc_from_ptr(). Everywhere else, simply test block->fd, which is non-negative exactly when block uses -mem-path. Signed-off-by: Markus Armbruster <armbru@redhat.com> Acked-by: Laszlo Ersek <lersek@redhat.com> Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Message-id: 1375276272-15988-4-git-send-email-armbru@redhat.com Signed-off-by: Anthony Liguori <anthony@codemonkey.ws>
This commit is contained in:
		
							parent
							
								
									0628c18267
								
							
						
					
					
						commit
						3435f39513
					
				
							
								
								
									
										23
									
								
								exec.c
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								exec.c
									
									
									
									
									
								
							@ -1099,6 +1099,7 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    size = TARGET_PAGE_ALIGN(size);
 | 
					    size = TARGET_PAGE_ALIGN(size);
 | 
				
			||||||
    new_block = g_malloc0(sizeof(*new_block));
 | 
					    new_block = g_malloc0(sizeof(*new_block));
 | 
				
			||||||
 | 
					    new_block->fd = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* This assumes the iothread lock is taken here too.  */
 | 
					    /* This assumes the iothread lock is taken here too.  */
 | 
				
			||||||
    qemu_mutex_lock_ramlist();
 | 
					    qemu_mutex_lock_ramlist();
 | 
				
			||||||
@ -1203,20 +1204,12 @@ void qemu_ram_free(ram_addr_t addr)
 | 
				
			|||||||
                ;
 | 
					                ;
 | 
				
			||||||
            } else if (xen_enabled()) {
 | 
					            } else if (xen_enabled()) {
 | 
				
			||||||
                xen_invalidate_map_cache_entry(block->host);
 | 
					                xen_invalidate_map_cache_entry(block->host);
 | 
				
			||||||
            } else if (mem_path) {
 | 
					            } else if (block->fd >= 0) {
 | 
				
			||||||
#if defined (__linux__) && !defined(TARGET_S390X)
 | 
					 | 
				
			||||||
                if (block->fd) {
 | 
					 | 
				
			||||||
                munmap(block->host, block->length);
 | 
					                munmap(block->host, block->length);
 | 
				
			||||||
                close(block->fd);
 | 
					                close(block->fd);
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                qemu_anon_ram_free(block->host, block->length);
 | 
					                qemu_anon_ram_free(block->host, block->length);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
                abort();
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                qemu_anon_ram_free(block->host, block->length);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            g_free(block);
 | 
					            g_free(block);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -1244,9 +1237,7 @@ void qemu_ram_remap(ram_addr_t addr, ram_addr_t length)
 | 
				
			|||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                flags = MAP_FIXED;
 | 
					                flags = MAP_FIXED;
 | 
				
			||||||
                munmap(vaddr, length);
 | 
					                munmap(vaddr, length);
 | 
				
			||||||
                if (mem_path) {
 | 
					                if (block->fd >= 0) {
 | 
				
			||||||
#if defined(__linux__) && !defined(TARGET_S390X)
 | 
					 | 
				
			||||||
                    if (block->fd) {
 | 
					 | 
				
			||||||
#ifdef MAP_POPULATE
 | 
					#ifdef MAP_POPULATE
 | 
				
			||||||
                    flags |= mem_prealloc ? MAP_POPULATE | MAP_SHARED :
 | 
					                    flags |= mem_prealloc ? MAP_POPULATE | MAP_SHARED :
 | 
				
			||||||
                        MAP_PRIVATE;
 | 
					                        MAP_PRIVATE;
 | 
				
			||||||
@ -1256,14 +1247,6 @@ void qemu_ram_remap(ram_addr_t addr, ram_addr_t length)
 | 
				
			|||||||
                    area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
 | 
					                    area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
 | 
				
			||||||
                                flags, block->fd, offset);
 | 
					                                flags, block->fd, offset);
 | 
				
			||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                        flags |= MAP_PRIVATE | MAP_ANONYMOUS;
 | 
					 | 
				
			||||||
                        area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
 | 
					 | 
				
			||||||
                                    flags, -1, 0);
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
                    abort();
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
                } else {
 | 
					 | 
				
			||||||
#if defined(TARGET_S390X) && defined(CONFIG_KVM)
 | 
					#if defined(TARGET_S390X) && defined(CONFIG_KVM)
 | 
				
			||||||
                    flags |= MAP_SHARED | MAP_ANONYMOUS;
 | 
					                    flags |= MAP_SHARED | MAP_ANONYMOUS;
 | 
				
			||||||
                    area = mmap(vaddr, length, PROT_EXEC|PROT_READ|PROT_WRITE,
 | 
					                    area = mmap(vaddr, length, PROT_EXEC|PROT_READ|PROT_WRITE,
 | 
				
			||||||
 | 
				
			|||||||
@ -453,9 +453,7 @@ typedef struct RAMBlock {
 | 
				
			|||||||
     * Writes must take both locks.
 | 
					     * Writes must take both locks.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    QTAILQ_ENTRY(RAMBlock) next;
 | 
					    QTAILQ_ENTRY(RAMBlock) next;
 | 
				
			||||||
#if defined(__linux__) && !defined(TARGET_S390X)
 | 
					 | 
				
			||||||
    int fd;
 | 
					    int fd;
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
} RAMBlock;
 | 
					} RAMBlock;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct RAMList {
 | 
					typedef struct RAMList {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user