All of lore.kernel.org
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: "Matthew Rosato" <mjrosato@linux.ibm.com>,
	"Paul Durrant" <paul@xen.org>,
	"Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>,
	qemu-devel@nongnu.org,
	"Stefano Stabellini" <sstabellini@kernel.org>,
	qemu-block@nongnu.org,
	"Stefan Berger" <stefanb@linux.vnet.ibm.com>,
	"David Hildenbrand" <david@redhat.com>,
	"Markus Armbruster" <armbru@redhat.com>,
	"Halil Pasic" <pasic@linux.ibm.com>,
	"Christian Borntraeger" <borntraeger@de.ibm.com>,
	"Anthony Perard" <anthony.perard@citrix.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>,
	"Artyom Tarasenko" <atar4qemu@gmail.com>,
	"Thomas Huth" <thuth@redhat.com>,
	"Alex Williamson" <alex.williamson@redhat.com>,
	xen-devel@lists.xenproject.org, "John Snow" <jsnow@redhat.com>,
	"Richard Henderson" <rth@twiddle.net>,
	"Kevin Wolf" <kwolf@redhat.com>,
	"Daniel P. Berrange" <berrange@redhat.com>,
	"Cornelia Huck" <cohuck@redhat.com>,
	qemu-s390x@nongnu.org, "Max Reitz" <mreitz@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Stefan Berger" <stefanb@linux.ibm.com>
Subject: Re: [PATCH v4 23/32] qdev: Move dev->realized check to qdev_property_set()
Date: Mon, 14 Dec 2020 15:55:30 +0100	[thread overview]
Message-ID: <20201214155530.55f80cd6@redhat.com> (raw)
In-Reply-To: <20201211220529.2290218-24-ehabkost@redhat.com>

On Fri, 11 Dec 2020 17:05:20 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:

> Every single qdev property setter function manually checks
> dev->realized.  We can just check dev->realized inside
> qdev_property_set() instead.
> 
> The check is being added as a separate function
> (qdev_prop_allow_set()) because it will become a callback later.

is callback added within this series?
and I'd add here what's the purpose of it.

> 
> Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> Changes v1 -> v2:
> * Removed unused variable at xen_block_set_vdev()
> * Redone patch after changes in the previous patches in the
>   series
> ---
> Cc: Stefan Berger <stefanb@linux.vnet.ibm.com>
> Cc: Stefano Stabellini <sstabellini@kernel.org>
> Cc: Anthony Perard <anthony.perard@citrix.com>
> Cc: Paul Durrant <paul@xen.org>
> Cc: Kevin Wolf <kwolf@redhat.com>
> Cc: Max Reitz <mreitz@redhat.com>
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: Cornelia Huck <cohuck@redhat.com>
> Cc: Halil Pasic <pasic@linux.ibm.com>
> Cc: Christian Borntraeger <borntraeger@de.ibm.com>
> Cc: Richard Henderson <rth@twiddle.net>
> Cc: David Hildenbrand <david@redhat.com>
> Cc: Thomas Huth <thuth@redhat.com>
> Cc: Matthew Rosato <mjrosato@linux.ibm.com>
> Cc: Alex Williamson <alex.williamson@redhat.com>
> Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> Cc: Artyom Tarasenko <atar4qemu@gmail.com>
> Cc: qemu-devel@nongnu.org
> Cc: xen-devel@lists.xenproject.org
> Cc: qemu-block@nongnu.org
> Cc: qemu-s390x@nongnu.org
> ---
>  backends/tpm/tpm_util.c          |   6 --
>  hw/block/xen-block.c             |   6 --
>  hw/core/qdev-properties-system.c |  70 ----------------------
>  hw/core/qdev-properties.c        | 100 ++++++-------------------------
>  hw/s390x/css.c                   |   6 --
>  hw/s390x/s390-pci-bus.c          |   6 --
>  hw/vfio/pci-quirks.c             |   6 --
>  target/sparc/cpu.c               |   6 --
>  8 files changed, 18 insertions(+), 188 deletions(-)
> 
> diff --git a/backends/tpm/tpm_util.c b/backends/tpm/tpm_util.c
> index a5d997e7dc..39b45fa46d 100644
> --- a/backends/tpm/tpm_util.c
> +++ b/backends/tpm/tpm_util.c
> @@ -46,16 +46,10 @@ static void get_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
>  static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
>                      Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      TPMBackend *s, **be = qdev_get_prop_ptr(obj, prop);
>      char *str;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> diff --git a/hw/block/xen-block.c b/hw/block/xen-block.c
> index 905e4acd97..bd1aef63a7 100644
> --- a/hw/block/xen-block.c
> +++ b/hw/block/xen-block.c
> @@ -395,17 +395,11 @@ static int vbd_name_to_disk(const char *name, const char **endp,
>  static void xen_block_set_vdev(Object *obj, Visitor *v, const char *name,
>                                 void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      XenBlockVdev *vdev = qdev_get_prop_ptr(obj, prop);
>      char *str, *p;
>      const char *end;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
> index 42529c3b65..f31aea3de1 100644
> --- a/hw/core/qdev-properties-system.c
> +++ b/hw/core/qdev-properties-system.c
> @@ -94,11 +94,6 @@ static void set_drive_helper(Object *obj, Visitor *v, const char *name,
>      bool blk_created = false;
>      int ret;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> @@ -230,17 +225,11 @@ static void get_chr(Object *obj, Visitor *v, const char *name, void *opaque,
>  static void set_chr(Object *obj, Visitor *v, const char *name, void *opaque,
>                      Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      CharBackend *be = qdev_get_prop_ptr(obj, prop);
>      Chardev *s;
>      char *str;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> @@ -311,18 +300,12 @@ static void get_mac(Object *obj, Visitor *v, const char *name, void *opaque,
>  static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
>                      Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      MACAddr *mac = qdev_get_prop_ptr(obj, prop);
>      int i, pos;
>      char *str;
>      const char *p;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> @@ -390,7 +373,6 @@ static void get_netdev(Object *obj, Visitor *v, const char *name,
>  static void set_netdev(Object *obj, Visitor *v, const char *name,
>                         void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      NICPeers *peers_ptr = qdev_get_prop_ptr(obj, prop);
>      NetClientState **ncs = peers_ptr->ncs;
> @@ -398,11 +380,6 @@ static void set_netdev(Object *obj, Visitor *v, const char *name,
>      int queues, err = 0, i = 0;
>      char *str;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> @@ -469,18 +446,12 @@ static void get_audiodev(Object *obj, Visitor *v, const char* name,
>  static void set_audiodev(Object *obj, Visitor *v, const char* name,
>                           void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      QEMUSoundCard *card = qdev_get_prop_ptr(obj, prop);
>      AudioState *state;
>      int err = 0;
>      char *str;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> @@ -582,11 +553,6 @@ static void set_blocksize(Object *obj, Visitor *v, const char *name,
>      uint64_t value;
>      Error *local_err = NULL;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_size(v, name, &value, errp)) {
>          return;
>      }
> @@ -686,7 +652,6 @@ static void get_reserved_region(Object *obj, Visitor *v, const char *name,
>  static void set_reserved_region(Object *obj, Visitor *v, const char *name,
>                                  void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      ReservedRegion *rr = qdev_get_prop_ptr(obj, prop);
>      Error *local_err = NULL;
> @@ -694,11 +659,6 @@ static void set_reserved_region(Object *obj, Visitor *v, const char *name,
>      char *str;
>      int ret;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_str(v, name, &str, &local_err);
>      if (local_err) {
>          error_propagate(errp, local_err);
> @@ -754,17 +714,11 @@ const PropertyInfo qdev_prop_reserved_region = {
>  static void set_pci_devfn(Object *obj, Visitor *v, const char *name,
>                            void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      int32_t value, *ptr = qdev_get_prop_ptr(obj, prop);
>      unsigned int slot, fn, n;
>      char *str;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, NULL)) {
>          if (!visit_type_int32(v, name, &value, errp)) {
>              return;
> @@ -848,7 +802,6 @@ static void get_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
>  static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
>                                   void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      PCIHostDeviceAddress *addr = qdev_get_prop_ptr(obj, prop);
>      char *str, *p;
> @@ -857,11 +810,6 @@ static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
>      unsigned long dom = 0, bus = 0;
>      unsigned int slot = 0, func = 0;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> @@ -972,16 +920,10 @@ static void get_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
>  static void set_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
>                                     void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      PCIExpLinkSpeed *p = qdev_get_prop_ptr(obj, prop);
>      int speed;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_enum(v, name, &speed, prop->info->enum_table,
>                           errp)) {
>          return;
> @@ -1057,16 +999,10 @@ static void get_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
>  static void set_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
>                                     void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      PCIExpLinkWidth *p = qdev_get_prop_ptr(obj, prop);
>      int width;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_enum(v, name, &width, prop->info->enum_table,
>                           errp)) {
>          return;
> @@ -1129,16 +1065,10 @@ static void get_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
>  static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
>                      Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
>      char *str;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index b924f13d58..92f48ecbf2 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -24,6 +24,19 @@ void qdev_prop_set_after_realize(DeviceState *dev, const char *name,
>      }
>  }
>  
> +/* returns: true if property is allowed to be set, false otherwise */
> +static bool qdev_prop_allow_set(Object *obj, const char *name,
> +                                Error **errp)
> +{
> +    DeviceState *dev = DEVICE(obj);
> +
> +    if (dev->realized) {
> +        qdev_prop_set_after_realize(dev, name, errp);
> +        return false;
> +    }
> +    return true;
> +}
> +
>  void qdev_prop_allow_set_link_before_realize(const Object *obj,
>                                               const char *name,
>                                               Object *val, Error **errp)
> @@ -65,6 +78,11 @@ static void field_prop_set(Object *obj, Visitor *v, const char *name,
>                             void *opaque, Error **errp)
>  {
>      Property *prop = opaque;
> +
> +    if (!qdev_prop_allow_set(obj, name, errp)) {
> +        return;
> +    }
> +
>      return prop->info->set(obj, v, name, opaque, errp);
>  }
>  
> @@ -90,15 +108,9 @@ void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
>  void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
>                              void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      int *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
>  }
>  
> @@ -148,15 +160,9 @@ static void prop_get_bit(Object *obj, Visitor *v, const char *name,
>  static void prop_set_bit(Object *obj, Visitor *v, const char *name,
>                           void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      bool value;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_bool(v, name, &value, errp)) {
>          return;
>      }
> @@ -208,15 +214,9 @@ static void prop_get_bit64(Object *obj, Visitor *v, const char *name,
>  static void prop_set_bit64(Object *obj, Visitor *v, const char *name,
>                             void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      bool value;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_bool(v, name, &value, errp)) {
>          return;
>      }
> @@ -245,15 +245,9 @@ static void get_bool(Object *obj, Visitor *v, const char *name, void *opaque,
>  static void set_bool(Object *obj, Visitor *v, const char *name, void *opaque,
>                       Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      bool *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_bool(v, name, ptr, errp);
>  }
>  
> @@ -278,15 +272,9 @@ static void get_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
>  static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
>                        Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      uint8_t *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_uint8(v, name, ptr, errp);
>  }
>  
> @@ -323,15 +311,9 @@ static void get_uint16(Object *obj, Visitor *v, const char *name,
>  static void set_uint16(Object *obj, Visitor *v, const char *name,
>                         void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      uint16_t *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_uint16(v, name, ptr, errp);
>  }
>  
> @@ -356,15 +338,9 @@ static void get_uint32(Object *obj, Visitor *v, const char *name,
>  static void set_uint32(Object *obj, Visitor *v, const char *name,
>                         void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_uint32(v, name, ptr, errp);
>  }
>  
> @@ -380,15 +356,9 @@ void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
>  static void set_int32(Object *obj, Visitor *v, const char *name, void *opaque,
>                        Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      int32_t *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_int32(v, name, ptr, errp);
>  }
>  
> @@ -420,15 +390,9 @@ static void get_uint64(Object *obj, Visitor *v, const char *name,
>  static void set_uint64(Object *obj, Visitor *v, const char *name,
>                         void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_uint64(v, name, ptr, errp);
>  }
>  
> @@ -444,15 +408,9 @@ static void get_int64(Object *obj, Visitor *v, const char *name,
>  static void set_int64(Object *obj, Visitor *v, const char *name,
>                        void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      int64_t *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_int64(v, name, ptr, errp);
>  }
>  
> @@ -495,16 +453,10 @@ static void get_string(Object *obj, Visitor *v, const char *name,
>  static void set_string(Object *obj, Visitor *v, const char *name,
>                         void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      char **ptr = qdev_get_prop_ptr(obj, prop);
>      char *str;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> @@ -545,16 +497,10 @@ void qdev_propinfo_get_size32(Object *obj, Visitor *v, const char *name,
>  static void set_size32(Object *obj, Visitor *v, const char *name, void *opaque,
>                         Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
>      uint64_t value;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_size(v, name, &value, errp)) {
>          return;
>      }
> @@ -621,10 +567,6 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
>      const char *arrayname;
>      int i;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
>      if (*alenptr) {
>          error_setg(errp, "array size property %s may not be set more than once",
>                     name);
> @@ -864,15 +806,9 @@ static void get_size(Object *obj, Visitor *v, const char *name, void *opaque,
>  static void set_size(Object *obj, Visitor *v, const char *name, void *opaque,
>                       Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_size(v, name, ptr, errp);
>  }
>  
> diff --git a/hw/s390x/css.c b/hw/s390x/css.c
> index 7a44320d12..496e2c5801 100644
> --- a/hw/s390x/css.c
> +++ b/hw/s390x/css.c
> @@ -2372,18 +2372,12 @@ static void get_css_devid(Object *obj, Visitor *v, const char *name,
>  static void set_css_devid(Object *obj, Visitor *v, const char *name,
>                            void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      CssDevId *dev_id = qdev_get_prop_ptr(obj, prop);
>      char *str;
>      int num, n1, n2;
>      unsigned int cssid, ssid, devid;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
> index 8b6be1197b..30511f620e 100644
> --- a/hw/s390x/s390-pci-bus.c
> +++ b/hw/s390x/s390-pci-bus.c
> @@ -1338,16 +1338,10 @@ static void s390_pci_get_fid(Object *obj, Visitor *v, const char *name,
>  static void s390_pci_set_fid(Object *obj, Visitor *v, const char *name,
>                           void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      S390PCIBusDevice *zpci = S390_PCI_DEVICE(obj);
>      Property *prop = opaque;
>      uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_uint32(v, name, ptr, errp)) {
>          return;
>      }
> diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c
> index 53569925a2..802979635c 100644
> --- a/hw/vfio/pci-quirks.c
> +++ b/hw/vfio/pci-quirks.c
> @@ -1498,15 +1498,9 @@ static void set_nv_gpudirect_clique_id(Object *obj, Visitor *v,
>                                         const char *name, void *opaque,
>                                         Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      uint8_t value, *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_uint8(v, name, &value, errp)) {
>          return;
>      }
> diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
> index 92534bcd18..b730146bbe 100644
> --- a/target/sparc/cpu.c
> +++ b/target/sparc/cpu.c
> @@ -798,17 +798,11 @@ static void sparc_get_nwindows(Object *obj, Visitor *v, const char *name,
>  static void sparc_set_nwindows(Object *obj, Visitor *v, const char *name,
>                                 void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      const int64_t min = MIN_NWINDOWS;
>      const int64_t max = MAX_NWINDOWS;
>      SPARCCPU *cpu = SPARC_CPU(obj);
>      int64_t value;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_int(v, name, &value, errp)) {
>          return;
>      }



WARNING: multiple messages have this Message-ID (diff)
From: Igor Mammedov <imammedo@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org, "Markus Armbruster" <armbru@redhat.com>,
	"Stefan Berger" <stefanb@linux.ibm.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Daniel P. Berrange" <berrange@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>,
	"John Snow" <jsnow@redhat.com>, "Kevin Wolf" <kwolf@redhat.com>,
	"Eric Blake" <eblake@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Stefan Berger" <stefanb@linux.vnet.ibm.com>,
	"Stefano Stabellini" <sstabellini@kernel.org>,
	"Anthony Perard" <anthony.perard@citrix.com>,
	"Paul Durrant" <paul@xen.org>, "Max Reitz" <mreitz@redhat.com>,
	"Cornelia Huck" <cohuck@redhat.com>,
	"Halil Pasic" <pasic@linux.ibm.com>,
	"Christian Borntraeger" <borntraeger@de.ibm.com>,
	"Richard Henderson" <rth@twiddle.net>,
	"David Hildenbrand" <david@redhat.com>,
	"Thomas Huth" <thuth@redhat.com>,
	"Matthew Rosato" <mjrosato@linux.ibm.com>,
	"Alex Williamson" <alex.williamson@redhat.com>,
	"Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>,
	"Artyom Tarasenko" <atar4qemu@gmail.com>,
	xen-devel@lists.xenproject.org, qemu-block@nongnu.org,
	qemu-s390x@nongnu.org
Subject: Re: [PATCH v4 23/32] qdev: Move dev->realized check to qdev_property_set()
Date: Mon, 14 Dec 2020 15:55:30 +0100	[thread overview]
Message-ID: <20201214155530.55f80cd6@redhat.com> (raw)
In-Reply-To: <20201211220529.2290218-24-ehabkost@redhat.com>

On Fri, 11 Dec 2020 17:05:20 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:

> Every single qdev property setter function manually checks
> dev->realized.  We can just check dev->realized inside
> qdev_property_set() instead.
> 
> The check is being added as a separate function
> (qdev_prop_allow_set()) because it will become a callback later.

is callback added within this series?
and I'd add here what's the purpose of it.

> 
> Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> Changes v1 -> v2:
> * Removed unused variable at xen_block_set_vdev()
> * Redone patch after changes in the previous patches in the
>   series
> ---
> Cc: Stefan Berger <stefanb@linux.vnet.ibm.com>
> Cc: Stefano Stabellini <sstabellini@kernel.org>
> Cc: Anthony Perard <anthony.perard@citrix.com>
> Cc: Paul Durrant <paul@xen.org>
> Cc: Kevin Wolf <kwolf@redhat.com>
> Cc: Max Reitz <mreitz@redhat.com>
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: Cornelia Huck <cohuck@redhat.com>
> Cc: Halil Pasic <pasic@linux.ibm.com>
> Cc: Christian Borntraeger <borntraeger@de.ibm.com>
> Cc: Richard Henderson <rth@twiddle.net>
> Cc: David Hildenbrand <david@redhat.com>
> Cc: Thomas Huth <thuth@redhat.com>
> Cc: Matthew Rosato <mjrosato@linux.ibm.com>
> Cc: Alex Williamson <alex.williamson@redhat.com>
> Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> Cc: Artyom Tarasenko <atar4qemu@gmail.com>
> Cc: qemu-devel@nongnu.org
> Cc: xen-devel@lists.xenproject.org
> Cc: qemu-block@nongnu.org
> Cc: qemu-s390x@nongnu.org
> ---
>  backends/tpm/tpm_util.c          |   6 --
>  hw/block/xen-block.c             |   6 --
>  hw/core/qdev-properties-system.c |  70 ----------------------
>  hw/core/qdev-properties.c        | 100 ++++++-------------------------
>  hw/s390x/css.c                   |   6 --
>  hw/s390x/s390-pci-bus.c          |   6 --
>  hw/vfio/pci-quirks.c             |   6 --
>  target/sparc/cpu.c               |   6 --
>  8 files changed, 18 insertions(+), 188 deletions(-)
> 
> diff --git a/backends/tpm/tpm_util.c b/backends/tpm/tpm_util.c
> index a5d997e7dc..39b45fa46d 100644
> --- a/backends/tpm/tpm_util.c
> +++ b/backends/tpm/tpm_util.c
> @@ -46,16 +46,10 @@ static void get_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
>  static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
>                      Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      TPMBackend *s, **be = qdev_get_prop_ptr(obj, prop);
>      char *str;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> diff --git a/hw/block/xen-block.c b/hw/block/xen-block.c
> index 905e4acd97..bd1aef63a7 100644
> --- a/hw/block/xen-block.c
> +++ b/hw/block/xen-block.c
> @@ -395,17 +395,11 @@ static int vbd_name_to_disk(const char *name, const char **endp,
>  static void xen_block_set_vdev(Object *obj, Visitor *v, const char *name,
>                                 void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      XenBlockVdev *vdev = qdev_get_prop_ptr(obj, prop);
>      char *str, *p;
>      const char *end;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
> index 42529c3b65..f31aea3de1 100644
> --- a/hw/core/qdev-properties-system.c
> +++ b/hw/core/qdev-properties-system.c
> @@ -94,11 +94,6 @@ static void set_drive_helper(Object *obj, Visitor *v, const char *name,
>      bool blk_created = false;
>      int ret;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> @@ -230,17 +225,11 @@ static void get_chr(Object *obj, Visitor *v, const char *name, void *opaque,
>  static void set_chr(Object *obj, Visitor *v, const char *name, void *opaque,
>                      Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      CharBackend *be = qdev_get_prop_ptr(obj, prop);
>      Chardev *s;
>      char *str;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> @@ -311,18 +300,12 @@ static void get_mac(Object *obj, Visitor *v, const char *name, void *opaque,
>  static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
>                      Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      MACAddr *mac = qdev_get_prop_ptr(obj, prop);
>      int i, pos;
>      char *str;
>      const char *p;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> @@ -390,7 +373,6 @@ static void get_netdev(Object *obj, Visitor *v, const char *name,
>  static void set_netdev(Object *obj, Visitor *v, const char *name,
>                         void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      NICPeers *peers_ptr = qdev_get_prop_ptr(obj, prop);
>      NetClientState **ncs = peers_ptr->ncs;
> @@ -398,11 +380,6 @@ static void set_netdev(Object *obj, Visitor *v, const char *name,
>      int queues, err = 0, i = 0;
>      char *str;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> @@ -469,18 +446,12 @@ static void get_audiodev(Object *obj, Visitor *v, const char* name,
>  static void set_audiodev(Object *obj, Visitor *v, const char* name,
>                           void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      QEMUSoundCard *card = qdev_get_prop_ptr(obj, prop);
>      AudioState *state;
>      int err = 0;
>      char *str;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> @@ -582,11 +553,6 @@ static void set_blocksize(Object *obj, Visitor *v, const char *name,
>      uint64_t value;
>      Error *local_err = NULL;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_size(v, name, &value, errp)) {
>          return;
>      }
> @@ -686,7 +652,6 @@ static void get_reserved_region(Object *obj, Visitor *v, const char *name,
>  static void set_reserved_region(Object *obj, Visitor *v, const char *name,
>                                  void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      ReservedRegion *rr = qdev_get_prop_ptr(obj, prop);
>      Error *local_err = NULL;
> @@ -694,11 +659,6 @@ static void set_reserved_region(Object *obj, Visitor *v, const char *name,
>      char *str;
>      int ret;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_str(v, name, &str, &local_err);
>      if (local_err) {
>          error_propagate(errp, local_err);
> @@ -754,17 +714,11 @@ const PropertyInfo qdev_prop_reserved_region = {
>  static void set_pci_devfn(Object *obj, Visitor *v, const char *name,
>                            void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      int32_t value, *ptr = qdev_get_prop_ptr(obj, prop);
>      unsigned int slot, fn, n;
>      char *str;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, NULL)) {
>          if (!visit_type_int32(v, name, &value, errp)) {
>              return;
> @@ -848,7 +802,6 @@ static void get_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
>  static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
>                                   void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      PCIHostDeviceAddress *addr = qdev_get_prop_ptr(obj, prop);
>      char *str, *p;
> @@ -857,11 +810,6 @@ static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
>      unsigned long dom = 0, bus = 0;
>      unsigned int slot = 0, func = 0;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> @@ -972,16 +920,10 @@ static void get_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
>  static void set_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
>                                     void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      PCIExpLinkSpeed *p = qdev_get_prop_ptr(obj, prop);
>      int speed;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_enum(v, name, &speed, prop->info->enum_table,
>                           errp)) {
>          return;
> @@ -1057,16 +999,10 @@ static void get_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
>  static void set_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
>                                     void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      PCIExpLinkWidth *p = qdev_get_prop_ptr(obj, prop);
>      int width;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_enum(v, name, &width, prop->info->enum_table,
>                           errp)) {
>          return;
> @@ -1129,16 +1065,10 @@ static void get_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
>  static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
>                      Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
>      char *str;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index b924f13d58..92f48ecbf2 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -24,6 +24,19 @@ void qdev_prop_set_after_realize(DeviceState *dev, const char *name,
>      }
>  }
>  
> +/* returns: true if property is allowed to be set, false otherwise */
> +static bool qdev_prop_allow_set(Object *obj, const char *name,
> +                                Error **errp)
> +{
> +    DeviceState *dev = DEVICE(obj);
> +
> +    if (dev->realized) {
> +        qdev_prop_set_after_realize(dev, name, errp);
> +        return false;
> +    }
> +    return true;
> +}
> +
>  void qdev_prop_allow_set_link_before_realize(const Object *obj,
>                                               const char *name,
>                                               Object *val, Error **errp)
> @@ -65,6 +78,11 @@ static void field_prop_set(Object *obj, Visitor *v, const char *name,
>                             void *opaque, Error **errp)
>  {
>      Property *prop = opaque;
> +
> +    if (!qdev_prop_allow_set(obj, name, errp)) {
> +        return;
> +    }
> +
>      return prop->info->set(obj, v, name, opaque, errp);
>  }
>  
> @@ -90,15 +108,9 @@ void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
>  void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
>                              void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      int *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
>  }
>  
> @@ -148,15 +160,9 @@ static void prop_get_bit(Object *obj, Visitor *v, const char *name,
>  static void prop_set_bit(Object *obj, Visitor *v, const char *name,
>                           void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      bool value;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_bool(v, name, &value, errp)) {
>          return;
>      }
> @@ -208,15 +214,9 @@ static void prop_get_bit64(Object *obj, Visitor *v, const char *name,
>  static void prop_set_bit64(Object *obj, Visitor *v, const char *name,
>                             void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      bool value;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_bool(v, name, &value, errp)) {
>          return;
>      }
> @@ -245,15 +245,9 @@ static void get_bool(Object *obj, Visitor *v, const char *name, void *opaque,
>  static void set_bool(Object *obj, Visitor *v, const char *name, void *opaque,
>                       Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      bool *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_bool(v, name, ptr, errp);
>  }
>  
> @@ -278,15 +272,9 @@ static void get_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
>  static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
>                        Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      uint8_t *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_uint8(v, name, ptr, errp);
>  }
>  
> @@ -323,15 +311,9 @@ static void get_uint16(Object *obj, Visitor *v, const char *name,
>  static void set_uint16(Object *obj, Visitor *v, const char *name,
>                         void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      uint16_t *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_uint16(v, name, ptr, errp);
>  }
>  
> @@ -356,15 +338,9 @@ static void get_uint32(Object *obj, Visitor *v, const char *name,
>  static void set_uint32(Object *obj, Visitor *v, const char *name,
>                         void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_uint32(v, name, ptr, errp);
>  }
>  
> @@ -380,15 +356,9 @@ void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
>  static void set_int32(Object *obj, Visitor *v, const char *name, void *opaque,
>                        Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      int32_t *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_int32(v, name, ptr, errp);
>  }
>  
> @@ -420,15 +390,9 @@ static void get_uint64(Object *obj, Visitor *v, const char *name,
>  static void set_uint64(Object *obj, Visitor *v, const char *name,
>                         void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_uint64(v, name, ptr, errp);
>  }
>  
> @@ -444,15 +408,9 @@ static void get_int64(Object *obj, Visitor *v, const char *name,
>  static void set_int64(Object *obj, Visitor *v, const char *name,
>                        void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      int64_t *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_int64(v, name, ptr, errp);
>  }
>  
> @@ -495,16 +453,10 @@ static void get_string(Object *obj, Visitor *v, const char *name,
>  static void set_string(Object *obj, Visitor *v, const char *name,
>                         void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      char **ptr = qdev_get_prop_ptr(obj, prop);
>      char *str;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> @@ -545,16 +497,10 @@ void qdev_propinfo_get_size32(Object *obj, Visitor *v, const char *name,
>  static void set_size32(Object *obj, Visitor *v, const char *name, void *opaque,
>                         Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
>      uint64_t value;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_size(v, name, &value, errp)) {
>          return;
>      }
> @@ -621,10 +567,6 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
>      const char *arrayname;
>      int i;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
>      if (*alenptr) {
>          error_setg(errp, "array size property %s may not be set more than once",
>                     name);
> @@ -864,15 +806,9 @@ static void get_size(Object *obj, Visitor *v, const char *name, void *opaque,
>  static void set_size(Object *obj, Visitor *v, const char *name, void *opaque,
>                       Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      visit_type_size(v, name, ptr, errp);
>  }
>  
> diff --git a/hw/s390x/css.c b/hw/s390x/css.c
> index 7a44320d12..496e2c5801 100644
> --- a/hw/s390x/css.c
> +++ b/hw/s390x/css.c
> @@ -2372,18 +2372,12 @@ static void get_css_devid(Object *obj, Visitor *v, const char *name,
>  static void set_css_devid(Object *obj, Visitor *v, const char *name,
>                            void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      CssDevId *dev_id = qdev_get_prop_ptr(obj, prop);
>      char *str;
>      int num, n1, n2;
>      unsigned int cssid, ssid, devid;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_str(v, name, &str, errp)) {
>          return;
>      }
> diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
> index 8b6be1197b..30511f620e 100644
> --- a/hw/s390x/s390-pci-bus.c
> +++ b/hw/s390x/s390-pci-bus.c
> @@ -1338,16 +1338,10 @@ static void s390_pci_get_fid(Object *obj, Visitor *v, const char *name,
>  static void s390_pci_set_fid(Object *obj, Visitor *v, const char *name,
>                           void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      S390PCIBusDevice *zpci = S390_PCI_DEVICE(obj);
>      Property *prop = opaque;
>      uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_uint32(v, name, ptr, errp)) {
>          return;
>      }
> diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c
> index 53569925a2..802979635c 100644
> --- a/hw/vfio/pci-quirks.c
> +++ b/hw/vfio/pci-quirks.c
> @@ -1498,15 +1498,9 @@ static void set_nv_gpudirect_clique_id(Object *obj, Visitor *v,
>                                         const char *name, void *opaque,
>                                         Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      Property *prop = opaque;
>      uint8_t value, *ptr = qdev_get_prop_ptr(obj, prop);
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_uint8(v, name, &value, errp)) {
>          return;
>      }
> diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
> index 92534bcd18..b730146bbe 100644
> --- a/target/sparc/cpu.c
> +++ b/target/sparc/cpu.c
> @@ -798,17 +798,11 @@ static void sparc_get_nwindows(Object *obj, Visitor *v, const char *name,
>  static void sparc_set_nwindows(Object *obj, Visitor *v, const char *name,
>                                 void *opaque, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(obj);
>      const int64_t min = MIN_NWINDOWS;
>      const int64_t max = MAX_NWINDOWS;
>      SPARCCPU *cpu = SPARC_CPU(obj);
>      int64_t value;
>  
> -    if (dev->realized) {
> -        qdev_prop_set_after_realize(dev, name, errp);
> -        return;
> -    }
> -
>      if (!visit_type_int(v, name, &value, errp)) {
>          return;
>      }



  parent reply	other threads:[~2020-12-14 14:57 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
2020-12-11 22:04 ` [PATCH v4 01/32] cs4231: Get rid of empty property array Eduardo Habkost
2020-12-15  8:22   ` Gerd Hoffmann
2020-12-11 22:04 ` [PATCH v4 02/32] cpu: Move cpu_common_props to hw/core/cpu.c Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 03/32] qdev: Move property code to qdev-properties.[ch] Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 04/32] qdev: Check dev->realized at set_size() Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 05/32] sparc: Check dev->realized at sparc_set_nwindows() Eduardo Habkost
2020-12-15 11:45   ` Mark Cave-Ayland
2020-12-11 22:05 ` [PATCH v4 06/32] qdev: Don't use dev->id on set_size32() error message Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 07/32] qdev: Make PropertyInfo.print method get Object* argument Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 08/32] qdev: Make bit_prop_set() " Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 09/32] qdev: Make qdev_get_prop_ptr() get Object* arg Eduardo Habkost
2020-12-11 22:05   ` Eduardo Habkost
2020-12-14  7:46   ` Paul Durrant
2020-12-14  7:46     ` Paul Durrant
2020-12-11 22:05 ` [PATCH v4 10/32] qdev: Make qdev_find_global_prop() get Object* argument Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 11/32] qdev: Make check_prop_still_unset() " Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 12/32] qdev: Make error_set_from_qdev_prop_error() " Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 13/32] qdev: Make qdev_propinfo_get_uint16() static Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 14/32] qdev: Move UUID property to qdev-properties-system.c Eduardo Habkost
2020-12-14 14:18   ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 15/32] qdev: Move softmmu properties to qdev-properties-system.h Eduardo Habkost
2020-12-14 14:25   ` Igor Mammedov
2020-12-14 17:40     ` Eduardo Habkost
2020-12-15 14:40   ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 16/32] qdev: Reuse DEFINE_PROP in all DEFINE_PROP_* macros Eduardo Habkost
2020-12-14 14:32   ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 17/32] sparc: Use DEFINE_PROP for nwindows property Eduardo Habkost
2020-12-14 14:42   ` Igor Mammedov
2020-12-14 17:30     ` Eduardo Habkost
2020-12-15 14:39       ` Igor Mammedov
2020-12-15 11:52   ` Mark Cave-Ayland
2020-12-11 22:05 ` [PATCH v4 18/32] qdev: Get just property name at error_set_from_qdev_prop_error() Eduardo Habkost
2020-12-14 10:41   ` Cornelia Huck
2020-12-14 14:44   ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 19/32] qdev: Avoid using prop->name unnecessarily Eduardo Habkost
2020-12-14 14:45   ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 20/32] qdev: Add name parameter to qdev_class_add_property() Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 21/32] qdev: Add name argument to PropertyInfo.create method Eduardo Habkost
2020-12-14 14:47   ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 22/32] qdev: Wrap getters and setters in separate helpers Eduardo Habkost
2020-12-15 14:42   ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 23/32] qdev: Move dev->realized check to qdev_property_set() Eduardo Habkost
2020-12-11 22:05   ` Eduardo Habkost
2020-12-14  7:46   ` Paul Durrant
2020-12-14  7:46     ` Paul Durrant
2020-12-14 10:46   ` Cornelia Huck
2020-12-14 10:46     ` Cornelia Huck
2020-12-14 14:55   ` Igor Mammedov [this message]
2020-12-14 14:55     ` Igor Mammedov
2020-12-14 17:24     ` Eduardo Habkost
2020-12-14 17:24       ` Eduardo Habkost
2020-12-15 14:24       ` Igor Mammedov
2020-12-15 14:24         ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 24/32] qdev: Make PropertyInfo.create return ObjectProperty* Eduardo Habkost
2020-12-14 14:57   ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 25/32] qdev: Make qdev_class_add_property() more flexible Eduardo Habkost
2020-12-14 15:00   ` Igor Mammedov
2020-12-14 18:28     ` Eduardo Habkost
2020-12-15 14:25       ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 26/32] qdev: Separate generic and device-specific property registration Eduardo Habkost
2020-12-15 14:33   ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 27/32] qdev: Rename qdev_propinfo_* to field_prop_* Eduardo Habkost
2020-12-15 14:35   ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 28/32] qdev: Move qdev_prop_tpm declaration to tpm_prop.h Eduardo Habkost
2020-12-15 14:36   ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 29/32] qdev: Rename qdev_prop_* to prop_info_* Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 30/32] qdev: Rename qdev_get_prop_ptr() to object_field_prop_ptr() Eduardo Habkost
2020-12-11 22:05   ` Eduardo Habkost
2020-12-14  7:47   ` Paul Durrant
2020-12-14  7:47     ` Paul Durrant
2020-12-14 10:56   ` Cornelia Huck
2020-12-14 10:56     ` Cornelia Huck
2020-12-14 15:13   ` Igor Mammedov
2020-12-14 15:13     ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 31/32] qdev: Avoid unnecessary DeviceState* variable at set_prop_arraylen() Eduardo Habkost
2020-12-14 15:11   ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 32/32] tests: Add unit test for qdev array properties Eduardo Habkost
2020-12-14 19:42 ` [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
2020-12-15 15:40   ` Eduardo Habkost
2020-12-15 16:57     ` Eduardo Habkost

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=20201214155530.55f80cd6@redhat.com \
    --to=imammedo@redhat.com \
    --cc=alex.williamson@redhat.com \
    --cc=anthony.perard@citrix.com \
    --cc=armbru@redhat.com \
    --cc=atar4qemu@gmail.com \
    --cc=berrange@redhat.com \
    --cc=borntraeger@de.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=david@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=mark.cave-ayland@ilande.co.uk \
    --cc=mjrosato@linux.ibm.com \
    --cc=mreitz@redhat.com \
    --cc=pasic@linux.ibm.com \
    --cc=paul@xen.org \
    --cc=pbonzini@redhat.com \
    --cc=philmd@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-s390x@nongnu.org \
    --cc=rth@twiddle.net \
    --cc=sstabellini@kernel.org \
    --cc=stefanb@linux.ibm.com \
    --cc=stefanb@linux.vnet.ibm.com \
    --cc=thuth@redhat.com \
    --cc=xen-devel@lists.xenproject.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.