qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: David Hildenbrand <david@redhat.com>
Cc: Pankaj Gupta <pagupta@redhat.com>,
	Eduardo Habkost <ehabkost@redhat.com>,
	"Michael S . Tsirkin" <mst@redhat.com>,
	Markus Armbruster <armbru@redhat.com>,
	qemu-devel@nongnu.org,
	"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Luiz Capitulino <lcapitul@redhat.com>,
	Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-devel] [PATCH v2 05/20] memory-device: convert get_region_size() to get_memory_region()
Date: Fri, 14 Sep 2018 16:34:47 +0200	[thread overview]
Message-ID: <20180914163447.367cb2d3@redhat.com> (raw)
In-Reply-To: <20180913142025.55af60ae@redhat.com>

On Thu, 13 Sep 2018 14:20:25 +0200
Igor Mammedov <imammedo@redhat.com> wrote:

> On Wed, 29 Aug 2018 17:36:09 +0200
> David Hildenbrand <david@redhat.com> 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().
this part isn't clear and doesn't really answer "why" patch's been written
and how it will really help.

> > 
> > 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.
It might be better to document expectation as part of get_memory_region() doc comment.


I'm not really getting reasoning behind this patch.
 * Why get_region_size() doesn't work for you?
   benefits I see is that's one less get_foo_size() callback,
   so it becomes less confusing

 * I get we might need access to memory region at MemoryDeviceClass level,
   but why are you keeping PCDIMMDeviceClass::get_memory_region()?
   I'd expect the later being generalized (moved) to MemoryDeviceClass
   so we would end up with one level indirection that we have now.

> > Signed-off-by: David Hildenbrand <david@redhat.com>
> > ---
> >  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	other threads:[~2018-09-14 14:35 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-29 15:36 [Qemu-devel] [PATCH v2 00/20] memory-device: complete refactoring + virtio-pmem David Hildenbrand
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 01/20] memory-device: fix error message when hinted address is too small David Hildenbrand
2018-08-30  8:53   ` Dr. David Alan Gilbert
2018-09-03 13:29   ` Igor Mammedov
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 02/20] memory-device: use memory device terminology in error messages David Hildenbrand
2018-08-30  8:58   ` Dr. David Alan Gilbert
2018-09-03 13:31   ` Igor Mammedov
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 03/20] memory-device: introduce separate config option David Hildenbrand
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 04/20] memory-device: get_region_size()/get_plugged_size() might fail David Hildenbrand
2018-09-03 13:40   ` Igor Mammedov
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 05/20] memory-device: convert get_region_size() to get_memory_region() David Hildenbrand
2018-09-13 12:20   ` Igor Mammedov
2018-09-14 14:34     ` Igor Mammedov [this message]
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 06/20] memory-device: document MemoryDeviceClass David Hildenbrand
2018-09-13 12:53   ` Igor Mammedov
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 07/20] memory-device: add device class function set_addr() David Hildenbrand
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 08/20] pc-dimm: implement memory " David Hildenbrand
2018-09-13 12:14   ` Igor Mammedov
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 09/20] memory-device: complete factoring out pre_plug handling David Hildenbrand
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 10/20] memory-device: complete factoring out plug handling David Hildenbrand
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 11/20] memory-device: complete factoring out unplug handling David Hildenbrand
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 12/20] memory-device: trace when pre_assigning/assigning/unassigning addresses David Hildenbrand
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 13/20] hw/acpi-build: only indicate nvdimm and pc-dimm David Hildenbrand
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 14/20] memory-device: ids of virtio based devices are special David Hildenbrand
2018-08-31 10:36   ` Dr. David Alan Gilbert
2018-08-31 10:38   ` Dr. David Alan Gilbert
2018-08-31 10:39     ` David Hildenbrand
2018-08-31 10:43       ` Dr. David Alan Gilbert
2018-08-31 11:18         ` David Hildenbrand
2018-08-31 11:22           ` Dr. David Alan Gilbert
2018-08-31 15:01           ` Eric Blake
2018-08-31 11:23   ` Eduardo Habkost
2018-08-31 11:26     ` David Hildenbrand
2018-08-31 11:41       ` Eduardo Habkost
2018-08-31 11:55         ` David Hildenbrand
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 15/20] virtio-pmem: prototype David Hildenbrand
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 16/20] virtio-pci: proxy for virtio-pmem David Hildenbrand
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 17/20] hmp: handle virtio-pmem when printing memory device infos David Hildenbrand
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 18/20] numa: handle virtio-pmem in NUMA stats David Hildenbrand
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 19/20] virtio-pmem: hotplug support functions David Hildenbrand
2018-08-29 15:36 ` [Qemu-devel] [PATCH v2 20/20] pc: support for virtio-pmem David Hildenbrand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180914163447.367cb2d3@redhat.com \
    --to=imammedo@redhat.com \
    --cc=armbru@redhat.com \
    --cc=david@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=lcapitul@redhat.com \
    --cc=mst@redhat.com \
    --cc=pagupta@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).