[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 29/29] memory: strengthen assertions on mr->term
From: |
Fam Zheng |
Subject: |
Re: [Qemu-devel] [PATCH 29/29] memory: strengthen assertions on mr->terminates |
Date: |
Tue, 26 May 2015 20:49:36 +0800 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
On Mon, 04/27 18:28, Paolo Bonzini wrote:
> mr->terminates alone doesn't guarantee that we are looking at a RAM region.
> mr->ram_addr also has to be checked, in order to distinguish RAM and I/O
> regions.
>
> IOMMU regions were not setting mr->ram_addr to a bogus value, do it now
> so that the assertions would fire for IOMMU regions as well.
>
> Signed-off-by: Paolo Bonzini <address@hidden>
It would be nicer to introduce a memory_region_is_ram(MemoryRegion *mr), the
~(ram_addr_t) duplications are too many.
Fam
> ---
> memory.c | 15 ++++++++-------
> 1 file changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/memory.c b/memory.c
> index bb86b4b..82d9df6 100644
> --- a/memory.c
> +++ b/memory.c
> @@ -1242,6 +1242,7 @@ void memory_region_init_iommu(MemoryRegion *mr,
> memory_region_init(mr, owner, name, size);
> mr->iommu_ops = ops,
> mr->terminates = true; /* then re-forwards */
> + mr->ram_addr = ~(ram_addr_t)0;
> notifier_list_init(&mr->iommu_notify);
> }
>
> @@ -1382,14 +1383,14 @@ void memory_region_set_log(MemoryRegion *mr, bool
> log, unsigned client)
> bool memory_region_get_dirty(MemoryRegion *mr, hwaddr addr,
> hwaddr size, unsigned client)
> {
> - assert(mr->terminates);
> + assert(mr->terminates && mr->ram_addr != ~(ram_addr_t)0);
> return cpu_physical_memory_get_dirty(mr->ram_addr + addr, size, client);
> }
>
> void memory_region_set_dirty(MemoryRegion *mr, hwaddr addr,
> hwaddr size)
> {
> - assert(mr->terminates);
> + assert(mr->terminates && mr->ram_addr != ~(ram_addr_t)0);
> cpu_physical_memory_set_dirty_range(mr->ram_addr + addr, size,
>
> memory_region_get_dirty_log_mask(mr));
> }
> @@ -1397,7 +1398,7 @@ void memory_region_set_dirty(MemoryRegion *mr, hwaddr
> addr,
> bool memory_region_test_and_clear_dirty(MemoryRegion *mr, hwaddr addr,
> hwaddr size, unsigned client)
> {
> - assert(mr->terminates);
> + assert(mr->terminates && mr->ram_addr != ~(ram_addr_t)0);
> return cpu_physical_memory_test_and_clear_dirty(mr->ram_addr + addr,
> size, client);
> }
> @@ -1442,7 +1443,7 @@ void memory_region_rom_device_set_romd(MemoryRegion
> *mr, bool romd_mode)
> void memory_region_reset_dirty(MemoryRegion *mr, hwaddr addr,
> hwaddr size, unsigned client)
> {
> - assert(mr->terminates);
> + assert(mr->terminates && mr->ram_addr != ~(ram_addr_t)0);
> cpu_physical_memory_test_and_clear_dirty(mr->ram_addr + addr, size,
> client);
> }
> @@ -1453,7 +1454,7 @@ int memory_region_get_fd(MemoryRegion *mr)
> return memory_region_get_fd(mr->alias);
> }
>
> - assert(mr->terminates);
> + assert(mr->terminates && mr->ram_addr != ~(ram_addr_t)0);
>
> return qemu_get_ram_fd(mr->ram_addr & TARGET_PAGE_MASK);
> }
> @@ -1464,14 +1465,14 @@ void *memory_region_get_ram_ptr(MemoryRegion *mr)
> return memory_region_get_ram_ptr(mr->alias) + mr->alias_offset;
> }
>
> - assert(mr->terminates);
> + assert(mr->terminates && mr->ram_addr != ~(ram_addr_t)0);
>
> return qemu_get_ram_ptr(mr->ram_addr & TARGET_PAGE_MASK);
> }
>
> void memory_region_ram_resize(MemoryRegion *mr, ram_addr_t newsize, Error
> **errp)
> {
> - assert(mr->terminates);
> + assert(mr->terminates && mr->ram_addr != ~(ram_addr_t)0);
>
> qemu_ram_resize(mr->ram_addr, newsize, errp);
> }
> --
> 1.8.3.1
>
- Re: [Qemu-devel] [PATCH 29/29] memory: strengthen assertions on mr->terminates,
Fam Zheng <=