Loading cputlb.c +1 −1 Original line number Diff line number Diff line Loading @@ -162,7 +162,7 @@ static inline ram_addr_t qemu_ram_addr_from_host_nofail(void *ptr) { ram_addr_t ram_addr; if (qemu_ram_addr_from_host(ptr, &ram_addr)) { if (qemu_ram_addr_from_host(ptr, &ram_addr) == NULL) { fprintf(stderr, "Bad ram pointer %p\n", ptr); abort(); } Loading exec.c +22 −15 Original line number Diff line number Diff line Loading @@ -1288,15 +1288,7 @@ void qemu_ram_remap(ram_addr_t addr, ram_addr_t length) } #endif /* !_WIN32 */ /* Return a host pointer to ram allocated with qemu_ram_alloc. With the exception of the softmmu code in this file, this should only be used for local memory (e.g. video ram) that the device owns, and knows it isn't going to access beyond the end of the block. It should not be used for general purpose DMA. Use cpu_physical_memory_map/cpu_physical_memory_rw instead. */ void *qemu_get_ram_ptr(ram_addr_t addr) static RAMBlock *qemu_get_ram_block(ram_addr_t addr) { RAMBlock *block; Loading @@ -1316,6 +1308,21 @@ void *qemu_get_ram_ptr(ram_addr_t addr) found: ram_list.mru_block = block; return block; } /* Return a host pointer to ram allocated with qemu_ram_alloc. With the exception of the softmmu code in this file, this should only be used for local memory (e.g. video ram) that the device owns, and knows it isn't going to access beyond the end of the block. It should not be used for general purpose DMA. Use cpu_physical_memory_map/cpu_physical_memory_rw instead. */ void *qemu_get_ram_ptr(ram_addr_t addr) { RAMBlock *block = qemu_get_ram_block(addr); if (xen_enabled()) { /* We need to check if the requested address is in the RAM * because we don't want to map the entire memory in QEMU. Loading Loading @@ -1392,14 +1399,14 @@ static void *qemu_ram_ptr_length(ram_addr_t addr, ram_addr_t *size) /* Some of the softmmu routines need to translate from a host pointer (typically a TLB entry) back to a ram offset. */ int qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr) MemoryRegion *qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr) { RAMBlock *block; uint8_t *host = ptr; if (xen_enabled()) { *ram_addr = xen_ram_addr_from_mapcache(ptr); return 0; return qemu_get_ram_block(*ram_addr)->mr; } block = ram_list.mru_block; Loading @@ -1417,11 +1424,11 @@ int qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr) } } return -1; return NULL; found: *ram_addr = block->offset + (host - block->host); return 0; return block->mr; } static void notdirty_mem_write(void *opaque, hwaddr ram_addr, Loading Loading @@ -2111,8 +2118,8 @@ void address_space_unmap(AddressSpace *as, void *buffer, hwaddr len, if (buffer != bounce.buffer) { if (is_write) { ram_addr_t addr1; int rc = qemu_ram_addr_from_host(buffer, &addr1); assert(rc == 0); MemoryRegion *mr = qemu_ram_addr_from_host(buffer, &addr1); assert(mr != NULL); while (access_len) { unsigned l; l = TARGET_PAGE_SIZE; Loading include/exec/cpu-common.h +1 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ typedef uint32_t CPUReadMemoryFunc(void *opaque, hwaddr addr); void qemu_ram_remap(ram_addr_t addr, ram_addr_t length); /* This should not be used by devices. */ int qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr); MemoryRegion *qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr); void qemu_ram_set_idstr(ram_addr_t addr, const char *name, DeviceState *dev); void cpu_physical_memory_rw(hwaddr addr, uint8_t *buf, Loading target-i386/kvm.c +2 −2 Original line number Diff line number Diff line Loading @@ -318,7 +318,7 @@ int kvm_arch_on_sigbus_vcpu(CPUState *c, int code, void *addr) if ((env->mcg_cap & MCG_SER_P) && addr && (code == BUS_MCEERR_AR || code == BUS_MCEERR_AO)) { if (qemu_ram_addr_from_host(addr, &ram_addr) || if (qemu_ram_addr_from_host(addr, &ram_addr) == NULL || !kvm_physical_memory_addr_from_host(c->kvm_state, addr, &paddr)) { fprintf(stderr, "Hardware memory error for memory used by " "QEMU itself instead of guest system!\n"); Loading Loading @@ -350,7 +350,7 @@ int kvm_arch_on_sigbus(int code, void *addr) hwaddr paddr; /* Hope we are lucky for AO MCE */ if (qemu_ram_addr_from_host(addr, &ram_addr) || if (qemu_ram_addr_from_host(addr, &ram_addr) == NULL || !kvm_physical_memory_addr_from_host(CPU(first_cpu)->kvm_state, addr, &paddr)) { fprintf(stderr, "Hardware memory error for memory used by " Loading Loading
cputlb.c +1 −1 Original line number Diff line number Diff line Loading @@ -162,7 +162,7 @@ static inline ram_addr_t qemu_ram_addr_from_host_nofail(void *ptr) { ram_addr_t ram_addr; if (qemu_ram_addr_from_host(ptr, &ram_addr)) { if (qemu_ram_addr_from_host(ptr, &ram_addr) == NULL) { fprintf(stderr, "Bad ram pointer %p\n", ptr); abort(); } Loading
exec.c +22 −15 Original line number Diff line number Diff line Loading @@ -1288,15 +1288,7 @@ void qemu_ram_remap(ram_addr_t addr, ram_addr_t length) } #endif /* !_WIN32 */ /* Return a host pointer to ram allocated with qemu_ram_alloc. With the exception of the softmmu code in this file, this should only be used for local memory (e.g. video ram) that the device owns, and knows it isn't going to access beyond the end of the block. It should not be used for general purpose DMA. Use cpu_physical_memory_map/cpu_physical_memory_rw instead. */ void *qemu_get_ram_ptr(ram_addr_t addr) static RAMBlock *qemu_get_ram_block(ram_addr_t addr) { RAMBlock *block; Loading @@ -1316,6 +1308,21 @@ void *qemu_get_ram_ptr(ram_addr_t addr) found: ram_list.mru_block = block; return block; } /* Return a host pointer to ram allocated with qemu_ram_alloc. With the exception of the softmmu code in this file, this should only be used for local memory (e.g. video ram) that the device owns, and knows it isn't going to access beyond the end of the block. It should not be used for general purpose DMA. Use cpu_physical_memory_map/cpu_physical_memory_rw instead. */ void *qemu_get_ram_ptr(ram_addr_t addr) { RAMBlock *block = qemu_get_ram_block(addr); if (xen_enabled()) { /* We need to check if the requested address is in the RAM * because we don't want to map the entire memory in QEMU. Loading Loading @@ -1392,14 +1399,14 @@ static void *qemu_ram_ptr_length(ram_addr_t addr, ram_addr_t *size) /* Some of the softmmu routines need to translate from a host pointer (typically a TLB entry) back to a ram offset. */ int qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr) MemoryRegion *qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr) { RAMBlock *block; uint8_t *host = ptr; if (xen_enabled()) { *ram_addr = xen_ram_addr_from_mapcache(ptr); return 0; return qemu_get_ram_block(*ram_addr)->mr; } block = ram_list.mru_block; Loading @@ -1417,11 +1424,11 @@ int qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr) } } return -1; return NULL; found: *ram_addr = block->offset + (host - block->host); return 0; return block->mr; } static void notdirty_mem_write(void *opaque, hwaddr ram_addr, Loading Loading @@ -2111,8 +2118,8 @@ void address_space_unmap(AddressSpace *as, void *buffer, hwaddr len, if (buffer != bounce.buffer) { if (is_write) { ram_addr_t addr1; int rc = qemu_ram_addr_from_host(buffer, &addr1); assert(rc == 0); MemoryRegion *mr = qemu_ram_addr_from_host(buffer, &addr1); assert(mr != NULL); while (access_len) { unsigned l; l = TARGET_PAGE_SIZE; Loading
include/exec/cpu-common.h +1 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ typedef uint32_t CPUReadMemoryFunc(void *opaque, hwaddr addr); void qemu_ram_remap(ram_addr_t addr, ram_addr_t length); /* This should not be used by devices. */ int qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr); MemoryRegion *qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr); void qemu_ram_set_idstr(ram_addr_t addr, const char *name, DeviceState *dev); void cpu_physical_memory_rw(hwaddr addr, uint8_t *buf, Loading
target-i386/kvm.c +2 −2 Original line number Diff line number Diff line Loading @@ -318,7 +318,7 @@ int kvm_arch_on_sigbus_vcpu(CPUState *c, int code, void *addr) if ((env->mcg_cap & MCG_SER_P) && addr && (code == BUS_MCEERR_AR || code == BUS_MCEERR_AO)) { if (qemu_ram_addr_from_host(addr, &ram_addr) || if (qemu_ram_addr_from_host(addr, &ram_addr) == NULL || !kvm_physical_memory_addr_from_host(c->kvm_state, addr, &paddr)) { fprintf(stderr, "Hardware memory error for memory used by " "QEMU itself instead of guest system!\n"); Loading Loading @@ -350,7 +350,7 @@ int kvm_arch_on_sigbus(int code, void *addr) hwaddr paddr; /* Hope we are lucky for AO MCE */ if (qemu_ram_addr_from_host(addr, &ram_addr) || if (qemu_ram_addr_from_host(addr, &ram_addr) == NULL || !kvm_physical_memory_addr_from_host(CPU(first_cpu)->kvm_state, addr, &paddr)) { fprintf(stderr, "Hardware memory error for memory used by " Loading