|
@@ -2024,7 +2024,7 @@ void *qemu_map_ram_ptr(RAMBlock *ram_block, ram_addr_t addr)
|
|
|
* Called within RCU critical section.
|
|
|
*/
|
|
|
static void *qemu_ram_ptr_length(RAMBlock *ram_block, ram_addr_t addr,
|
|
|
- hwaddr *size)
|
|
|
+ hwaddr *size, bool lock)
|
|
|
{
|
|
|
RAMBlock *block = ram_block;
|
|
|
if (*size == 0) {
|
|
@@ -2043,10 +2043,10 @@ static void *qemu_ram_ptr_length(RAMBlock *ram_block, ram_addr_t addr,
|
|
|
* In that case just map the requested area.
|
|
|
*/
|
|
|
if (block->offset == 0) {
|
|
|
- return xen_map_cache(addr, *size, 1, true);
|
|
|
+ return xen_map_cache(addr, *size, lock, lock);
|
|
|
}
|
|
|
|
|
|
- block->host = xen_map_cache(block->offset, block->max_length, 1, true);
|
|
|
+ block->host = xen_map_cache(block->offset, block->max_length, 1, lock);
|
|
|
}
|
|
|
|
|
|
return ramblock_ptr(block, addr);
|
|
@@ -2765,7 +2765,7 @@ static MemTxResult address_space_write_continue(AddressSpace *as, hwaddr addr,
|
|
|
}
|
|
|
} else {
|
|
|
/* RAM case */
|
|
|
- ptr = qemu_ram_ptr_length(mr->ram_block, addr1, &l);
|
|
|
+ ptr = qemu_ram_ptr_length(mr->ram_block, addr1, &l, false);
|
|
|
memcpy(ptr, buf, l);
|
|
|
invalidate_and_set_dirty(mr, addr1, l);
|
|
|
}
|
|
@@ -2856,7 +2856,7 @@ MemTxResult address_space_read_continue(AddressSpace *as, hwaddr addr,
|
|
|
}
|
|
|
} else {
|
|
|
/* RAM case */
|
|
|
- ptr = qemu_ram_ptr_length(mr->ram_block, addr1, &l);
|
|
|
+ ptr = qemu_ram_ptr_length(mr->ram_block, addr1, &l, false);
|
|
|
memcpy(buf, ptr, l);
|
|
|
}
|
|
|
|
|
@@ -3167,7 +3167,7 @@ void *address_space_map(AddressSpace *as,
|
|
|
|
|
|
memory_region_ref(mr);
|
|
|
*plen = address_space_extend_translation(as, addr, len, mr, xlat, l, is_write);
|
|
|
- ptr = qemu_ram_ptr_length(mr->ram_block, xlat, plen);
|
|
|
+ ptr = qemu_ram_ptr_length(mr->ram_block, xlat, plen, true);
|
|
|
rcu_read_unlock();
|
|
|
|
|
|
return ptr;
|