Export qemu_ram_addr_from_host
To be used by next patches. Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
		
							parent
							
								
									e7701825e1
								
							
						
					
					
						commit
						e890261f67
					
				| 
						 | 
				
			
			@ -47,7 +47,8 @@ void qemu_ram_free(ram_addr_t addr);
 | 
			
		|||
/* This should only be used for ram local to a device.  */
 | 
			
		||||
void *qemu_get_ram_ptr(ram_addr_t addr);
 | 
			
		||||
/* This should not be used by devices.  */
 | 
			
		||||
ram_addr_t qemu_ram_addr_from_host(void *ptr);
 | 
			
		||||
int qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr);
 | 
			
		||||
ram_addr_t qemu_ram_addr_from_host_nofail(void *ptr);
 | 
			
		||||
 | 
			
		||||
int cpu_register_io_memory(CPUReadMemoryFunc * const *mem_read,
 | 
			
		||||
                           CPUWriteMemoryFunc * const *mem_write,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -334,7 +334,7 @@ static inline tb_page_addr_t get_page_addr_code(CPUState *env1, target_ulong add
 | 
			
		|||
    }
 | 
			
		||||
    p = (void *)(unsigned long)addr
 | 
			
		||||
        + env1->tlb_table[mmu_idx][page_index].addend;
 | 
			
		||||
    return qemu_ram_addr_from_host(p);
 | 
			
		||||
    return qemu_ram_addr_from_host_nofail(p);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										26
									
								
								exec.c
								
								
								
								
							
							
						
						
									
										26
									
								
								exec.c
								
								
								
								
							| 
						 | 
				
			
			@ -2085,7 +2085,7 @@ static inline void tlb_update_dirty(CPUTLBEntry *tlb_entry)
 | 
			
		|||
    if ((tlb_entry->addr_write & ~TARGET_PAGE_MASK) == IO_MEM_RAM) {
 | 
			
		||||
        p = (void *)(unsigned long)((tlb_entry->addr_write & TARGET_PAGE_MASK)
 | 
			
		||||
            + tlb_entry->addend);
 | 
			
		||||
        ram_addr = qemu_ram_addr_from_host(p);
 | 
			
		||||
        ram_addr = qemu_ram_addr_from_host_nofail(p);
 | 
			
		||||
        if (!cpu_physical_memory_is_dirty(ram_addr)) {
 | 
			
		||||
            tlb_entry->addr_write |= TLB_NOTDIRTY;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -2938,23 +2938,31 @@ void *qemu_get_ram_ptr(ram_addr_t addr)
 | 
			
		|||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Some of the softmmu routines need to translate from a host pointer
 | 
			
		||||
   (typically a TLB entry) back to a ram offset.  */
 | 
			
		||||
ram_addr_t qemu_ram_addr_from_host(void *ptr)
 | 
			
		||||
int qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr)
 | 
			
		||||
{
 | 
			
		||||
    RAMBlock *block;
 | 
			
		||||
    uint8_t *host = ptr;
 | 
			
		||||
 | 
			
		||||
    QLIST_FOREACH(block, &ram_list.blocks, next) {
 | 
			
		||||
        if (host - block->host < block->length) {
 | 
			
		||||
            return block->offset + (host - block->host);
 | 
			
		||||
            *ram_addr = block->offset + (host - block->host);
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
    fprintf(stderr, "Bad ram pointer %p\n", ptr);
 | 
			
		||||
    abort();
 | 
			
		||||
/* Some of the softmmu routines need to translate from a host pointer
 | 
			
		||||
   (typically a TLB entry) back to a ram offset.  */
 | 
			
		||||
ram_addr_t qemu_ram_addr_from_host_nofail(void *ptr)
 | 
			
		||||
{
 | 
			
		||||
    ram_addr_t ram_addr;
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
    if (qemu_ram_addr_from_host(ptr, &ram_addr)) {
 | 
			
		||||
        fprintf(stderr, "Bad ram pointer %p\n", ptr);
 | 
			
		||||
        abort();
 | 
			
		||||
    }
 | 
			
		||||
    return ram_addr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static uint32_t unassigned_mem_readb(void *opaque, target_phys_addr_t addr)
 | 
			
		||||
| 
						 | 
				
			
			@ -3703,7 +3711,7 @@ void cpu_physical_memory_unmap(void *buffer, target_phys_addr_t len,
 | 
			
		|||
{
 | 
			
		||||
    if (buffer != bounce.buffer) {
 | 
			
		||||
        if (is_write) {
 | 
			
		||||
            ram_addr_t addr1 = qemu_ram_addr_from_host(buffer);
 | 
			
		||||
            ram_addr_t addr1 = qemu_ram_addr_from_host_nofail(buffer);
 | 
			
		||||
            while (access_len) {
 | 
			
		||||
                unsigned l;
 | 
			
		||||
                l = TARGET_PAGE_SIZE;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue