qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v2 05/20] memory-device: convert get_region_size


From: Igor Mammedov
Subject: Re: [Qemu-devel] [PATCH v2 05/20] memory-device: convert get_region_size() to get_memory_region()
Date: Thu, 13 Sep 2018 14:20:25 +0200

On Wed, 29 Aug 2018 17:36:09 +0200
David Hildenbrand <address@hidden> wrote:

> To factor out plugging and unplugging of memory device we need access to
> the memory region. So let's replace get_region_size() by
> get_memory_region().
> 
> If any memory device will in the future have multiple memory regions
> that make up the total region size, it can simply use a wrapping memory
> region to embed the other ones.
> 
> Signed-off-by: David Hildenbrand <address@hidden>
> ---
>  hw/mem/memory-device.c         | 10 ++++++----
>  hw/mem/pc-dimm.c               | 19 ++++++++++++++-----
>  include/hw/mem/memory-device.h |  2 +-
>  3 files changed, 21 insertions(+), 10 deletions(-)
> 
> diff --git a/hw/mem/memory-device.c b/hw/mem/memory-device.c
> index d87599c280..3bd30d98bb 100644
> --- a/hw/mem/memory-device.c
> +++ b/hw/mem/memory-device.c
> @@ -56,11 +56,13 @@ static int memory_device_used_region_size(Object *obj, 
> void *opaque)
>  
>      if (object_dynamic_cast(obj, TYPE_MEMORY_DEVICE)) {
>          const DeviceState *dev = DEVICE(obj);
> -        const MemoryDeviceState *md = MEMORY_DEVICE(obj);
> +        MemoryDeviceState *md = MEMORY_DEVICE(obj);
it's a getter, why do we loose 'const' here?

>          const MemoryDeviceClass *mdc = MEMORY_DEVICE_GET_CLASS(obj);
>  
>          if (dev->realized) {
> -            *size += mdc->get_region_size(md, &error_abort);
> +            MemoryRegion *mr = mdc->get_memory_region(md, &error_abort);
> +
> +            *size += memory_region_size(mr);
>          }
>      }
>  
> @@ -162,12 +164,12 @@ uint64_t memory_device_get_free_addr(MachineState *ms, 
> const uint64_t *hint,
>      /* find address range that will fit new memory device */
>      object_child_foreach(OBJECT(ms), memory_device_build_list, &list);
>      for (item = list; item; item = g_slist_next(item)) {
> -        const MemoryDeviceState *md = item->data;
> +        MemoryDeviceState *md = item->data;
ditto

>          const MemoryDeviceClass *mdc = MEMORY_DEVICE_GET_CLASS(OBJECT(md));
>          uint64_t md_size, md_addr;
>  
>          md_addr = mdc->get_addr(md);
> -        md_size = mdc->get_region_size(md, &error_abort);
> +        md_size = memory_region_size(mdc->get_memory_region(md, 
> &error_abort));
>          if (*errp) {
>              goto out;
>          }
> diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c
> index 4bf1a0acc9..a208b17c64 100644
> --- a/hw/mem/pc-dimm.c
> +++ b/hw/mem/pc-dimm.c
> @@ -236,8 +236,8 @@ static uint64_t pc_dimm_md_get_addr(const 
> MemoryDeviceState *md)
>      return dimm->addr;
>  }
>  
> -static uint64_t pc_dimm_md_get_region_size(const MemoryDeviceState *md,
> -                                           Error **errp)
> +static uint64_t pc_dimm_md_get_plugged_size(const MemoryDeviceState *md,
> +                                            Error **errp)
>  {
>      /* dropping const here is fine as we don't touch the memory region */
>      PCDIMMDevice *dimm = PC_DIMM(md);
> @@ -249,9 +249,19 @@ static uint64_t pc_dimm_md_get_region_size(const 
> MemoryDeviceState *md,
>          return 0;
>      }
>  
> +    /* for a dimm plugged_size == region_size */
>      return memory_region_size(mr);
>  }
>  
> +static MemoryRegion *pc_dimm_md_get_memory_region(MemoryDeviceState *md,
> +                                                  Error **errp)
> +{
> +    PCDIMMDevice *dimm = PC_DIMM(md);
> +    const PCDIMMDeviceClass *ddc = PC_DIMM_GET_CLASS(md);
> +
> +    return ddc->get_memory_region(dimm, errp);
> +}
> +
>  static void pc_dimm_md_fill_device_info(const MemoryDeviceState *md,
>                                          MemoryDeviceInfo *info)
>  {
> @@ -297,9 +307,8 @@ static void pc_dimm_class_init(ObjectClass *oc, void 
> *data)
>      ddc->get_vmstate_memory_region = pc_dimm_get_memory_region;
>  
>      mdc->get_addr = pc_dimm_md_get_addr;
> -    /* for a dimm plugged_size == region_size */
> -    mdc->get_plugged_size = pc_dimm_md_get_region_size;
> -    mdc->get_region_size = pc_dimm_md_get_region_size;
> +    mdc->get_plugged_size = pc_dimm_md_get_plugged_size;
> +    mdc->get_memory_region = pc_dimm_md_get_memory_region;
>      mdc->fill_device_info = pc_dimm_md_fill_device_info;
>  }
>  
> diff --git a/include/hw/mem/memory-device.h b/include/hw/mem/memory-device.h
> index f02b229837..852fd8f98a 100644
> --- a/include/hw/mem/memory-device.h
> +++ b/include/hw/mem/memory-device.h
> @@ -34,7 +34,7 @@ typedef struct MemoryDeviceClass {
>  
>      uint64_t (*get_addr)(const MemoryDeviceState *md);
>      uint64_t (*get_plugged_size)(const MemoryDeviceState *md, Error **errp);
> -    uint64_t (*get_region_size)(const MemoryDeviceState *md, Error **errp);
> +    MemoryRegion *(*get_memory_region)(MemoryDeviceState *md, Error **errp);
>      void (*fill_device_info)(const MemoryDeviceState *md,
>                               MemoryDeviceInfo *info);
>  } MemoryDeviceClass;




reply via email to

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