 6e48e8f9e0
			
		
	
	
		6e48e8f9e0
		
	
	
	
	
		
			
			address_space_destroy_dispatch is called from an RCU callback and hence outside the iothread mutex (BQL). However, after address_space_destroy no new accesses can hit the destroyed AddressSpace so it is not necessary to observe changes to the memory map. Move the memory_listener_unregister call earlier, to make it thread-safe again. Reported-by: Alex Williamson <alex.williamson@redhat.com> Fixes: 374f2981d1f10bc4307f250f24b2a7ddb9b14be0 Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
		
			
				
	
	
		
			36 lines
		
	
	
		
			915 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			915 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Declarations for obsolete exec.c functions
 | |
|  *
 | |
|  * Copyright 2011 Red Hat, Inc. and/or its affiliates
 | |
|  *
 | |
|  * Authors:
 | |
|  *  Avi Kivity <avi@redhat.com>
 | |
|  *
 | |
|  * This work is licensed under the terms of the GNU GPL, version 2 or
 | |
|  * later.  See the COPYING file in the top-level directory.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * This header is for use by exec.c and memory.c ONLY.  Do not include it.
 | |
|  * The functions declared here will be removed soon.
 | |
|  */
 | |
| 
 | |
| #ifndef MEMORY_INTERNAL_H
 | |
| #define MEMORY_INTERNAL_H
 | |
| 
 | |
| #ifndef CONFIG_USER_ONLY
 | |
| typedef struct AddressSpaceDispatch AddressSpaceDispatch;
 | |
| 
 | |
| void address_space_init_dispatch(AddressSpace *as);
 | |
| void address_space_unregister(AddressSpace *as);
 | |
| void address_space_destroy_dispatch(AddressSpace *as);
 | |
| 
 | |
| extern const MemoryRegionOps unassigned_mem_ops;
 | |
| 
 | |
| bool memory_region_access_valid(MemoryRegion *mr, hwaddr addr,
 | |
|                                 unsigned size, bool is_write);
 | |
| 
 | |
| #endif
 | |
| #endif
 |