qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: David Hildenbrand <david@redhat.com>
To: qemu-devel@nongnu.org
Cc: qemu-ppc@nongnu.org, Eduardo Habkost <ehabkost@redhat.com>,
	Igor Mammedov <imammedo@redhat.com>,
	"Michael S . Tsirkin" <mst@redhat.com>,
	Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Richard Henderson <rth@twiddle.net>,
	Xiao Guangrong <xiaoguangrong.eric@gmail.com>,
	David Gibson <david@gibson.dropbear.id.au>,
	Alexander Graf <agraf@suse.de>,
	David Hildenbrand <david@redhat.com>
Subject: [Qemu-devel] [PATCH v2 10/12] nvdimm: convert "label-size" into a static property
Date: Fri, 15 Jun 2018 13:24:58 +0200	[thread overview]
Message-ID: <20180615112500.19854-11-david@redhat.com> (raw)
In-Reply-To: <20180615112500.19854-1-david@redhat.com>

We don't allow to modify it after realization. So we can simply turn
it into a static property. The value is now validated during realize().

Signed-off-by: David Hildenbrand <david@redhat.com>
---
 hw/mem/nvdimm.c | 53 ++++++++-----------------------------------------
 1 file changed, 8 insertions(+), 45 deletions(-)

diff --git a/hw/mem/nvdimm.c b/hw/mem/nvdimm.c
index 7260c9c6b1..d3e8a5bcbb 100644
--- a/hw/mem/nvdimm.c
+++ b/hw/mem/nvdimm.c
@@ -27,50 +27,6 @@
 #include "qapi/visitor.h"
 #include "hw/mem/nvdimm.h"
 
-static void nvdimm_get_label_size(Object *obj, Visitor *v, const char *name,
-                                  void *opaque, Error **errp)
-{
-    NVDIMMDevice *nvdimm = NVDIMM(obj);
-    uint64_t value = nvdimm->label_size;
-
-    visit_type_size(v, name, &value, errp);
-}
-
-static void nvdimm_set_label_size(Object *obj, Visitor *v, const char *name,
-                                  void *opaque, Error **errp)
-{
-    NVDIMMDevice *nvdimm = NVDIMM(obj);
-    Error *local_err = NULL;
-    uint64_t value;
-
-    if (memory_region_size(&nvdimm->nvdimm_mr)) {
-        error_setg(&local_err, "cannot change property value");
-        goto out;
-    }
-
-    visit_type_size(v, name, &value, &local_err);
-    if (local_err) {
-        goto out;
-    }
-    if (value < MIN_NAMESPACE_LABEL_SIZE) {
-        error_setg(&local_err, "Property '%s.%s' (0x%" PRIx64 ") is required"
-                   " at least 0x%lx", object_get_typename(obj),
-                   name, value, MIN_NAMESPACE_LABEL_SIZE);
-        goto out;
-    }
-
-    nvdimm->label_size = value;
-out:
-    error_propagate(errp, local_err);
-}
-
-static void nvdimm_init(Object *obj)
-{
-    object_property_add(obj, NVDIMM_LABEL_SIZE_PROP, "int",
-                        nvdimm_get_label_size, nvdimm_set_label_size, NULL,
-                        NULL, NULL);
-}
-
 static MemoryRegion *nvdimm_get_memory_region(PCDIMMDevice *dimm, Error **errp)
 {
     NVDIMMDevice *nvdimm = NVDIMM(dimm);
@@ -86,6 +42,13 @@ static void nvdimm_realize(PCDIMMDevice *dimm, Error **errp)
 
     align = memory_region_get_alignment(mr);
 
+    if (nvdimm->label_size && nvdimm->label_size < MIN_NAMESPACE_LABEL_SIZE) {
+        error_setg(errp, "the label-size (0x%" PRIx64 ") has to be "
+                   "either 0 or at least 0x%lx",
+                   nvdimm->label_size, MIN_NAMESPACE_LABEL_SIZE);
+        return;
+    }
+
     pmem_size = size - nvdimm->label_size;
     nvdimm->label_data = memory_region_get_ram_ptr(mr) + pmem_size;
     pmem_size = QEMU_ALIGN_DOWN(pmem_size, align);
@@ -143,6 +106,7 @@ static void nvdimm_write_label_data(NVDIMMDevice *nvdimm, const void *buf,
 
 static Property nvdimm_properties[] = {
     DEFINE_PROP_BOOL(NVDIMM_UNARMED_PROP, NVDIMMDevice, unarmed, false),
+    DEFINE_PROP_UINT64(NVDIMM_LABEL_SIZE_PROP, NVDIMMDevice, label_size, 0),
     DEFINE_PROP_END_OF_LIST(),
 };
 
@@ -166,7 +130,6 @@ static TypeInfo nvdimm_info = {
     .class_size    = sizeof(NVDIMMClass),
     .class_init    = nvdimm_class_init,
     .instance_size = sizeof(NVDIMMDevice),
-    .instance_init = nvdimm_init,
 };
 
 static void nvdimm_register_types(void)
-- 
2.17.1

  parent reply	other threads:[~2018-06-15 11:25 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-15 11:24 [Qemu-devel] [PATCH v2 00/12] pc-dimm: next bunch of cleanups David Hildenbrand
2018-06-15 11:24 ` [Qemu-devel] [PATCH v2 01/12] pc-dimm: remove leftover "struct pc_dimms_capacity" David Hildenbrand
2018-06-15 11:24 ` [Qemu-devel] [PATCH v2 02/12] pc: rename pc_dimm_(plug|unplug|...)* into pc_memory_(plug|unplug|...)* David Hildenbrand
2018-06-15 11:51   ` Igor Mammedov
2018-06-15 11:52     ` David Hildenbrand
2018-06-15 12:31       ` Igor Mammedov
2018-06-15 11:24 ` [Qemu-devel] [PATCH v2 03/12] pc-dimm: rename pc_dimm_memory_* to pc_dimm_* David Hildenbrand
2018-06-15 12:33   ` Igor Mammedov
2018-06-15 11:24 ` [Qemu-devel] [PATCH v2 04/12] pc-dimm: remove pc_dimm_get_free_slot() from header David Hildenbrand
2018-06-15 12:36   ` Igor Mammedov
2018-06-15 11:24 ` [Qemu-devel] [PATCH v2 05/12] pc: factor out pc specific dimm checks into pc_memory_pre_plug() David Hildenbrand
2018-06-15 11:24 ` [Qemu-devel] [PATCH v2 06/12] hostmem: drop error variable from host_memory_backend_get_memory() David Hildenbrand
2018-06-15 12:39   ` Igor Mammedov
2018-06-15 12:45     ` David Hildenbrand
2018-06-15 11:24 ` [Qemu-devel] [PATCH v2 07/12] pc-dimm: merge get_(vmstate_)memory_region() David Hildenbrand
2018-06-15 12:45   ` Igor Mammedov
2018-06-15 11:24 ` [Qemu-devel] [PATCH v2 08/12] nvdimm: no need to overwrite get_vmstate_memory_region() David Hildenbrand
2018-06-15 12:46   ` Igor Mammedov
2018-06-15 12:50     ` David Hildenbrand
2018-06-15 11:24 ` [Qemu-devel] [PATCH v2 09/12] nvdimm: convert "unarmed" into a static property David Hildenbrand
2018-06-15 11:24 ` David Hildenbrand [this message]
2018-06-15 12:53   ` [Qemu-devel] [PATCH v2 10/12] nvdimm: convert "label-size" " Igor Mammedov
2018-06-15 13:30     ` David Hildenbrand
2018-06-15 13:40       ` David Hildenbrand
2018-06-15 11:24 ` [Qemu-devel] [PATCH v2 11/12] nvdimm: make get_memory_region() perform checks and initialization David Hildenbrand
2018-06-15 13:14   ` Igor Mammedov
2018-06-15 11:25 ` [Qemu-devel] [PATCH v2 12/12] pc-dimm: get_memory_region() will not fail after realize David Hildenbrand
2018-06-15 13:19   ` Igor Mammedov

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=20180615112500.19854-11-david@redhat.com \
    --to=david@redhat.com \
    --cc=agraf@suse.de \
    --cc=david@gibson.dropbear.id.au \
    --cc=ehabkost@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=marcel.apfelbaum@gmail.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).