memory: count number of active VGA logging clients
For a board that has multiple framebuffer devices, both of them might want to use DIRTY_MEMORY_VGA on the same memory region. The lack of reference counting in memory_region_set_log makes this very awkward to implement. Suggested-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
		
							parent
							
								
									fb43096959
								
							
						
					
					
						commit
						deb809edb8
					
				| 
						 | 
				
			
			@ -180,6 +180,7 @@ struct MemoryRegion {
 | 
			
		|||
    bool warning_printed; /* For reservations */
 | 
			
		||||
    bool flush_coalesced_mmio;
 | 
			
		||||
    bool global_locking;
 | 
			
		||||
    uint8_t vga_logging_count;
 | 
			
		||||
    MemoryRegion *alias;
 | 
			
		||||
    hwaddr alias_offset;
 | 
			
		||||
    int32_t priority;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										7
									
								
								memory.c
								
								
								
								
							
							
						
						
									
										7
									
								
								memory.c
								
								
								
								
							| 
						 | 
				
			
			@ -1433,8 +1433,15 @@ void memory_region_notify_iommu(MemoryRegion *mr,
 | 
			
		|||
void memory_region_set_log(MemoryRegion *mr, bool log, unsigned client)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t mask = 1 << client;
 | 
			
		||||
    uint8_t old_logging;
 | 
			
		||||
 | 
			
		||||
    assert(client == DIRTY_MEMORY_VGA);
 | 
			
		||||
    old_logging = mr->vga_logging_count;
 | 
			
		||||
    mr->vga_logging_count += log ? 1 : -1;
 | 
			
		||||
    if (!!old_logging == !!mr->vga_logging_count) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    memory_region_transaction_begin();
 | 
			
		||||
    mr->dirty_log_mask = (mr->dirty_log_mask & ~mask) | (log * mask);
 | 
			
		||||
    memory_region_update_pending |= mr->enabled;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue