qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH memory v1 1/1] memory: remove may_overlap proper


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH memory v1 1/1] memory: remove may_overlap property
Date: Sun, 17 Aug 2014 22:43:17 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.7.0

Il 15/08/2014 09:17, Peter Crosthwaite ha scritto:
> In a5e1cbc80e88ed7d73b3fcb46053a3ba167293fc the enforcement of Memory
> collisions was disabled. This means that the MemoryRegion map_overlap
> state is unused. Remove it completely.
> 
> The commit mentions that it should be fixed, but we have been living
> happily-every-after since removal of the check so it's probably
> unneeded complication.
> 
> If we were to repair this, a simpler and more effective check would be
> to only assert collisions between same-priority regions. The fact that
> colliding memory regions may-overlap is then left as implicit by the
> fact that they have different priorities.
> 
> Signed-off-by: Peter Crosthwaite <address@hidden>
> ---
> 
>  include/exec/memory.h |  1 -
>  memory.c              | 35 -----------------------------------
>  2 files changed, 36 deletions(-)
> 
> diff --git a/include/exec/memory.h b/include/exec/memory.h
> index e2c8e3e..a8e9707 100644
> --- a/include/exec/memory.h
> +++ b/include/exec/memory.h
> @@ -158,7 +158,6 @@ struct MemoryRegion {
>      MemoryRegion *alias;
>      hwaddr alias_offset;
>      int32_t priority;
> -    bool may_overlap;
>      QTAILQ_HEAD(subregions, MemoryRegion) subregions;
>      QTAILQ_ENTRY(MemoryRegion) subregions_link;
>      QTAILQ_HEAD(coalesced_ranges, CoalescedMemoryRange) coalesced;
> diff --git a/memory.c b/memory.c
> index 64d7176..be4cf76 100644
> --- a/memory.c
> +++ b/memory.c
> @@ -964,13 +964,6 @@ static void memory_region_get_priority(Object *obj, 
> Visitor *v, void *opaque,
>      visit_type_int32(v, &value, name, errp);
>  }
>  
> -static bool memory_region_get_may_overlap(Object *obj, Error **errp)
> -{
> -    MemoryRegion *mr = MEMORY_REGION(obj);
> -
> -    return mr->may_overlap;
> -}
> -
>  static void memory_region_get_size(Object *obj, Visitor *v, void *opaque,
>                                     const char *name, Error **errp)
>  {
> @@ -1007,10 +1000,6 @@ static void memory_region_initfn(Object *obj)
>                          memory_region_get_priority,
>                          NULL, /* memory_region_set_priority */
>                          NULL, NULL, &error_abort);
> -    object_property_add_bool(OBJECT(mr), "may-overlap",
> -                             memory_region_get_may_overlap,
> -                             NULL, /* memory_region_set_may_overlap */
> -                             &error_abort);
>      object_property_add(OBJECT(mr), "size", "uint64",
>                          memory_region_get_size,
>                          NULL, /* memory_region_set_size, */
> @@ -1623,7 +1612,6 @@ void memory_region_del_eventfd(MemoryRegion *mr,
>  
>  static void memory_region_update_container_subregions(MemoryRegion 
> *subregion)
>  {
> -    hwaddr offset = subregion->addr;
>      MemoryRegion *mr = subregion->container;
>      MemoryRegion *other;
>  
> @@ -1631,27 +1619,6 @@ static void 
> memory_region_update_container_subregions(MemoryRegion *subregion)
>  
>      memory_region_ref(subregion);
>      QTAILQ_FOREACH(other, &mr->subregions, subregions_link) {
> -        if (subregion->may_overlap || other->may_overlap) {
> -            continue;
> -        }
> -        if (int128_ge(int128_make64(offset),
> -                      int128_add(int128_make64(other->addr), other->size))
> -            || int128_le(int128_add(int128_make64(offset), subregion->size),
> -                         int128_make64(other->addr))) {
> -            continue;
> -        }
> -#if 0
> -        printf("warning: subregion collision %llx/%llx (%s) "
> -               "vs %llx/%llx (%s)\n",
> -               (unsigned long long)offset,
> -               (unsigned long long)int128_get64(subregion->size),
> -               subregion->name,
> -               (unsigned long long)other->addr,
> -               (unsigned long long)int128_get64(other->size),
> -               other->name);
> -#endif
> -    }
> -    QTAILQ_FOREACH(other, &mr->subregions, subregions_link) {
>          if (subregion->priority >= other->priority) {
>              QTAILQ_INSERT_BEFORE(other, subregion, subregions_link);
>              goto done;
> @@ -1677,7 +1644,6 @@ void memory_region_add_subregion(MemoryRegion *mr,
>                                   hwaddr offset,
>                                   MemoryRegion *subregion)
>  {
> -    subregion->may_overlap = false;
>      subregion->priority = 0;
>      memory_region_add_subregion_common(mr, offset, subregion);
>  }
> @@ -1687,7 +1653,6 @@ void memory_region_add_subregion_overlap(MemoryRegion 
> *mr,
>                                           MemoryRegion *subregion,
>                                           int priority)
>  {
> -    subregion->may_overlap = true;
>      subregion->priority = priority;
>      memory_region_add_subregion_common(mr, offset, subregion);
>  }
> 

Thanks, applied to memory branch.

Paolo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]