From: Igor Mammedov <imammedo@redhat.com>
To: David Hildenbrand <david@redhat.com>
Cc: qemu-devel@nongnu.org, Eduardo Habkost <ehabkost@redhat.com>,
"Michael S . Tsirkin" <mst@redhat.com>,
Xiao Guangrong <xiaoguangrong.eric@gmail.com>,
Alexander Graf <agraf@suse.de>,
qemu-ppc@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,
David Gibson <david@gibson.dropbear.id.au>,
Richard Henderson <rth@twiddle.net>,
Haozhong Zhang
<haozhong.zhang@intel.com>xiaoguangrong.eric@gmail.com,
Junyan He <junyan.he@intel.com>
Subject: Re: [Qemu-devel] [PATCH v1 05/11] spapr: move memory hotplug size check into plug code
Date: Wed, 13 Jun 2018 13:01:13 +0200 [thread overview]
Message-ID: <20180613130113.64852912@redhat.com> (raw)
In-Reply-To: <20180611121655.19616-6-david@redhat.com>
On Mon, 11 Jun 2018 14:16:49 +0200
David Hildenbrand <david@redhat.com> wrote:
> This might look like a step backwards, but it is not. get_memory_region()
> should not be called on uninititalized devices. In general, only
> properties should be access, but no "derived" satte like the memory
> region.
>
> 1. We need duplicate error checks if memdev is actually already set.
> realize() performs these checks, no need to duplicate.
it's not duplicate, if a machine doesn't access to memory region
in preplug time (hence doesn't check), then device itself would check it,
check won't be missed by accident.
(yep it's more code but more robust at the same time, so I'd leave it as is)
> 2. This is bad practise as one can see when looking at the NVDIMM
> implemetation. The call does not return sane data before the device
> is realized. Although spapr does not use NVDIMM, conceptually it is
> wrong.
>
> So let's just move this call to the right place. We can then cleanup
> get_memory_region().
So I have to say no to this particular patch.
It is indeed a step backwards and it looks like workaround for broken nvdimm impl.
Firstly, memdev property must be set for dimm device and
a user accessing memory region first must check for error.
More details below.
[...]
> @@ -3196,18 +3199,6 @@ static void spapr_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> return;
> }
>
> - mr = ddc->get_memory_region(dimm, errp);
> - if (!mr) {
here 2 bugs are colliding and leading to invalid code path
'if(!mr)' check happens to work for pc-dimm as it returns NULL on error
and error is reported to user.
however in nvdimm case, nvdimm_get_memory_region() unconditionally
returns pointer to not initialized memory alias without any checks
1st issue here is that spapr_memory_pre_plug() should check for error
like spapr_memory_plug() does when calling the same function.
2nd, nvdimm should (re)initialize nvdimm_mr alias whenever hostmem/label_size
properties are set (it's doable but could be tricky. however device model
shouldn't push its issues up to the stack).
There are other places in nvdimm that access uninitialized nvdimm_mr
during properties setting (I suppose all this sites should be fixed
as part of 2nd bugfix).
CCing author & co of nvdimm_mr, so that they could fix issue
> - return;
> - }
> - size = memory_region_size(mr);
> -
> - if (size % SPAPR_MEMORY_BLOCK_SIZE) {
> - error_setg(errp, "Hotplugged memory size must be a multiple of "
> - "%lld MB", SPAPR_MEMORY_BLOCK_SIZE / M_BYTE);
> - return;
> - }
> -
> mem_dev = object_property_get_str(OBJECT(dimm), PC_DIMM_MEMDEV_PROP, NULL);
> if (mem_dev && !kvmppc_is_mem_backend_page_size_ok(mem_dev)) {
> error_setg(errp, "Memory backend has bad page size. "
next prev parent reply other threads:[~2018-06-13 11:01 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-11 12:16 [Qemu-devel] [PATCH v1 00/11] pc-dimm: next bunch of cleanups David Hildenbrand
2018-06-11 12:16 ` [Qemu-devel] [PATCH v1 01/11] pc-dimm: remove leftover "struct pc_dimms_capacity" David Hildenbrand
2018-06-12 0:21 ` David Gibson
2018-06-13 9:23 ` Igor Mammedov
2018-06-11 12:16 ` [Qemu-devel] [PATCH v1 02/11] nvdimm: no need to overwrite get_vmstate_memory_region() David Hildenbrand
2018-06-12 0:22 ` David Gibson
2018-06-13 9:39 ` Igor Mammedov
2018-06-11 12:16 ` [Qemu-devel] [PATCH v1 03/11] pc: factor out pc-dimm checks into pc_dimm_pre_plug() David Hildenbrand
2018-06-12 0:28 ` David Gibson
2018-06-13 10:07 ` Igor Mammedov
2018-06-11 12:16 ` [Qemu-devel] [PATCH v1 04/11] hostmem: drop error variable from host_memory_backend_get_memory() David Hildenbrand
2018-06-12 0:49 ` David Gibson
2018-06-13 10:13 ` Igor Mammedov
2018-06-11 12:16 ` [Qemu-devel] [PATCH v1 05/11] spapr: move memory hotplug size check into plug code David Hildenbrand
2018-06-12 1:02 ` David Gibson
2018-06-13 11:01 ` Igor Mammedov [this message]
2018-06-13 11:05 ` David Hildenbrand
2018-06-13 13:57 ` Igor Mammedov
2018-06-14 7:10 ` David Hildenbrand
2018-06-11 12:16 ` [Qemu-devel] [PATCH v1 06/11] pc-dimm: don't allow to access "size" before the device was realized David Hildenbrand
2018-06-12 1:08 ` David Gibson
2018-06-13 12:56 ` Igor Mammedov
2018-06-13 14:03 ` David Hildenbrand
2018-06-13 21:33 ` Eduardo Habkost
2018-06-14 13:02 ` Igor Mammedov
2018-06-14 13:24 ` Igor Mammedov
2018-06-14 14:10 ` David Hildenbrand
2018-06-15 9:16 ` Igor Mammedov
2018-06-15 9:25 ` David Hildenbrand
2018-06-15 10:06 ` Igor Mammedov
2018-06-11 12:16 ` [Qemu-devel] [PATCH v1 07/11] pc-dimm: get_memory_region() can never fail David Hildenbrand
2018-06-12 1:10 ` David Gibson
2018-06-13 13:03 ` Igor Mammedov
2018-06-13 14:07 ` David Hildenbrand
2018-06-13 14:50 ` David Hildenbrand
2018-06-14 15:00 ` Igor Mammedov
2018-06-14 15:11 ` David Hildenbrand
2018-06-15 9:59 ` Igor Mammedov
2018-06-15 10:29 ` David Hildenbrand
2018-06-11 12:16 ` [Qemu-devel] [PATCH v1 08/11] pc-dimm: get_memory_region() will never return a NULL pointer David Hildenbrand
2018-06-12 1:12 ` David Gibson
2018-06-11 12:16 ` [Qemu-devel] [PATCH v1 09/11] pc-dimm: remove pc_dimm_get_vmstate_memory_region() David Hildenbrand
2018-06-12 1:29 ` David Gibson
2018-06-11 12:16 ` [Qemu-devel] [PATCH v1 10/11] pc-dimm: introduce and use pc_dimm_memory_pre_plug() David Hildenbrand
2018-06-12 1:48 ` David Gibson
2018-06-13 13:10 ` Igor Mammedov
2018-06-13 14:15 ` David Hildenbrand
2018-06-15 9:34 ` Igor Mammedov
2018-06-15 9:48 ` David Hildenbrand
2018-06-15 10:01 ` Igor Mammedov
2018-06-11 12:16 ` [Qemu-devel] [PATCH v1 11/11] pc-dimm: assign and verify the "slot" property during pre_plug David Hildenbrand
2018-06-12 2:02 ` David Gibson
2018-06-13 13:34 ` [Qemu-devel] [PATCH v1 00/11] pc-dimm: next bunch of cleanups Igor Mammedov
2018-06-13 14:11 ` David Hildenbrand
2018-06-15 10:59 ` 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=20180613130113.64852912@redhat.com \
--to=imammedo@redhat.com \
--cc=agraf@suse.de \
--cc=david@gibson.dropbear.id.au \
--cc=david@redhat.com \
--cc=ehabkost@redhat.com \
--cc=haozhong.zhang@intel.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=rth@twiddle.net \
--cc=xiaoguangrong.eric@gmail.com \
/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).