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;
>
>
next prev parent 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).