mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-04-17 23:51:41 +00:00
memory: Drop MemoryRegion.ram_addr
All references to mr->ram_addr are replaced by memory_region_get_ram_addr(mr) (except for a few assertions that are replaced with mr->ram_block). Backports commit 8e41fb63c5bf29ecabe0cee1239bf6230f19978a from qemu
This commit is contained in:
parent
2c1a72635d
commit
fa7d3e6cdb
|
@ -255,8 +255,8 @@ void tlb_set_page_with_attrs(CPUState *cpu, target_ulong vaddr,
|
|||
/* Write access calls the I/O callback. */
|
||||
te->addr_write = address | TLB_MMIO;
|
||||
} else if (memory_region_is_ram(section->mr)
|
||||
&& cpu_physical_memory_is_clean(cpu->uc, (ram_addr_t)(section->mr->ram_addr
|
||||
+ xlat))) {
|
||||
&& cpu_physical_memory_is_clean(cpu->uc,
|
||||
memory_region_get_ram_addr(section->mr) + xlat)) {
|
||||
te->addr_write = address | TLB_NOTDIRTY;
|
||||
} else {
|
||||
te->addr_write = address;
|
||||
|
|
|
@ -2023,7 +2023,8 @@ MemTxResult address_space_read_continue(AddressSpace *as, hwaddr addr,
|
|||
}
|
||||
} else {
|
||||
/* RAM case */
|
||||
ptr = qemu_get_ram_ptr(mr->uc, mr->ram_block, mr->ram_addr + addr1);
|
||||
ptr = qemu_get_ram_ptr(mr->uc, mr->ram_block,
|
||||
memory_region_get_ram_addr(mr) + addr1);
|
||||
memcpy(buf, ptr, l);
|
||||
}
|
||||
|
||||
|
|
|
@ -159,7 +159,6 @@ struct MemoryRegion {
|
|||
bool flush_coalesced_mmio;
|
||||
bool global_locking;
|
||||
uint8_t dirty_log_mask;
|
||||
ram_addr_t ram_addr;
|
||||
RAMBlock *ram_block;
|
||||
const MemoryRegionIOMMUOps *iommu_ops;
|
||||
Object *owner;
|
||||
|
|
|
@ -39,9 +39,10 @@ MemoryRegion *memory_map(struct uc_struct *uc, hwaddr begin, size_t size, uint32
|
|||
MemoryRegion *ram = g_new(MemoryRegion, 1);
|
||||
|
||||
memory_region_init_ram(uc, ram, NULL, "pc.ram", size, perms, &error_abort);
|
||||
if (ram->ram_addr == -1)
|
||||
if (ram->ram_block == NULL) {
|
||||
// out of memory
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memory_region_add_subregion(get_system_memory(uc), begin, ram);
|
||||
|
||||
|
@ -57,9 +58,10 @@ MemoryRegion *memory_map_ptr(struct uc_struct *uc, hwaddr begin, size_t size, ui
|
|||
|
||||
memory_region_init_ram_ptr(uc, ram, NULL, "pc.ram", size, ptr);
|
||||
ram->perms = perms;
|
||||
if (ram->ram_addr == -1)
|
||||
if (ram->ram_block == NULL) {
|
||||
// out of memory
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memory_region_add_subregion(get_system_memory(uc), begin, ram);
|
||||
|
||||
|
@ -814,7 +816,7 @@ static void memory_region_destructor_none(MemoryRegion *mr)
|
|||
|
||||
static void memory_region_destructor_ram(MemoryRegion *mr)
|
||||
{
|
||||
qemu_ram_free(mr->uc, mr->ram_addr);
|
||||
qemu_ram_free(mr->uc, memory_region_get_ram_addr(mr));
|
||||
}
|
||||
|
||||
static void memory_region_destructor_alias(MemoryRegion *mr)
|
||||
|
@ -958,7 +960,6 @@ static void memory_region_initfn(struct uc_struct *uc, Object *obj, void *opaque
|
|||
ObjectProperty *op;
|
||||
|
||||
mr->ops = &unassigned_mem_ops;
|
||||
mr->ram_addr = RAM_ADDR_INVALID;
|
||||
mr->enabled = true;
|
||||
mr->romd_mode = true;
|
||||
mr->global_locking = true;
|
||||
|
@ -1163,8 +1164,6 @@ void memory_region_init_ram(struct uc_struct *uc, MemoryRegion *mr,
|
|||
uint32_t perms,
|
||||
Error **errp)
|
||||
{
|
||||
RAMBlock *ram_block;
|
||||
|
||||
memory_region_init(uc, mr, owner, name, size);
|
||||
mr->ram = true;
|
||||
if (!(perms & UC_PROT_WRITE)) {
|
||||
|
@ -1173,9 +1172,7 @@ void memory_region_init_ram(struct uc_struct *uc, MemoryRegion *mr,
|
|||
mr->perms = perms;
|
||||
mr->terminates = true;
|
||||
mr->destructor = memory_region_destructor_ram;
|
||||
ram_block = qemu_ram_alloc(size, mr, errp);
|
||||
mr->ram_block = ram_block;
|
||||
mr->ram_addr = ram_block->offset;
|
||||
mr->ram_block = qemu_ram_alloc(size, mr, errp);
|
||||
mr->dirty_log_mask = tcg_enabled(uc) ? (1 << DIRTY_MEMORY_CODE) : 0;
|
||||
}
|
||||
|
||||
|
@ -1185,7 +1182,6 @@ void memory_region_init_ram_ptr(struct uc_struct *uc, MemoryRegion *mr,
|
|||
uint64_t size,
|
||||
void *ptr)
|
||||
{
|
||||
RAMBlock *ram_block;
|
||||
memory_region_init(uc, mr, owner, name, size);
|
||||
mr->ram = true;
|
||||
mr->terminates = true;
|
||||
|
@ -1194,9 +1190,7 @@ void memory_region_init_ram_ptr(struct uc_struct *uc, MemoryRegion *mr,
|
|||
|
||||
/* qemu_ram_alloc_from_ptr cannot fail with ptr != NULL. */
|
||||
assert(ptr != NULL);
|
||||
ram_block = qemu_ram_alloc_from_ptr(size, ptr, mr, &error_abort);
|
||||
mr->ram_block = ram_block;
|
||||
mr->ram_addr = ram_block->offset;
|
||||
mr->ram_block = qemu_ram_alloc_from_ptr(size, ptr, mr, &error_abort);
|
||||
}
|
||||
|
||||
void memory_region_init_resizeable_ram(struct uc_struct *uc,
|
||||
|
@ -1210,15 +1204,12 @@ void memory_region_init_resizeable_ram(struct uc_struct *uc,
|
|||
void *host),
|
||||
Error **errp)
|
||||
{
|
||||
RAMBlock *ram_block;
|
||||
|
||||
memory_region_init(uc, mr, owner, name, size);
|
||||
mr->ram = true;
|
||||
mr->terminates = true;
|
||||
mr->destructor = memory_region_destructor_ram;
|
||||
ram_block = qemu_ram_alloc_resizeable(size, max_size, resized, mr, errp);
|
||||
mr->ram_block = ram_block;
|
||||
mr->ram_addr = ram_block->offset;
|
||||
mr->ram_block = qemu_ram_alloc_resizeable(size, max_size, resized,
|
||||
mr, errp);
|
||||
mr->dirty_log_mask = tcg_enabled(uc) ? (1 << DIRTY_MEMORY_CODE) : 0;
|
||||
}
|
||||
|
||||
|
@ -1371,9 +1362,9 @@ int memory_region_get_fd(MemoryRegion *mr)
|
|||
return memory_region_get_fd(mr->alias);
|
||||
}
|
||||
|
||||
assert(mr->ram_addr != RAM_ADDR_INVALID);
|
||||
assert(mr->ram_block);
|
||||
|
||||
return qemu_get_ram_fd(mr->uc, mr->ram_addr & TARGET_PAGE_MASK);
|
||||
return qemu_get_ram_fd(mr->uc, memory_region_get_ram_addr(mr) & TARGET_PAGE_MASK);
|
||||
}
|
||||
|
||||
void *memory_region_get_ram_ptr(MemoryRegion *mr)
|
||||
|
@ -1388,8 +1379,9 @@ void *memory_region_get_ram_ptr(MemoryRegion *mr)
|
|||
mr = mr->alias;
|
||||
}
|
||||
|
||||
assert(mr->ram_addr != RAM_ADDR_INVALID);
|
||||
ptr = qemu_get_ram_ptr(mr->uc, mr->ram_block, mr->ram_addr & TARGET_PAGE_MASK);
|
||||
assert(mr->ram_block);
|
||||
ptr = qemu_get_ram_ptr(mr->uc, mr->ram_block,
|
||||
memory_region_get_ram_addr(mr) & TARGET_PAGE_MASK);
|
||||
// Unicorn: commented out
|
||||
//rcu_read_unlock();
|
||||
|
||||
|
@ -1404,9 +1396,9 @@ ram_addr_t memory_region_get_ram_addr(MemoryRegion *mr)
|
|||
bool memory_region_test_and_clear_dirty(MemoryRegion *mr, hwaddr addr,
|
||||
hwaddr size, unsigned client)
|
||||
{
|
||||
assert(mr->ram_addr != RAM_ADDR_INVALID);
|
||||
return cpu_physical_memory_test_and_clear_dirty(mr->uc, mr->ram_addr + addr,
|
||||
size, client);
|
||||
assert(mr->ram_block);
|
||||
return cpu_physical_memory_test_and_clear_dirty(mr->uc,
|
||||
memory_region_get_ram_addr(mr) + addr, size, client);
|
||||
}
|
||||
|
||||
static void memory_region_update_container_subregions(MemoryRegion *subregion)
|
||||
|
|
Loading…
Reference in a new issue