From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:36756) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RuPgV-00042g-4n for qemu-devel@nongnu.org; Mon, 06 Feb 2012 09:36:48 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RuPgQ-0004Zo-Eg for qemu-devel@nongnu.org; Mon, 06 Feb 2012 09:36:47 -0500 Received: from mail-pw0-f45.google.com ([209.85.160.45]:37653) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RuPgQ-0004Zk-4B for qemu-devel@nongnu.org; Mon, 06 Feb 2012 09:36:42 -0500 Received: by pbaa11 with SMTP id a11so6797212pba.4 for ; Mon, 06 Feb 2012 06:36:41 -0800 (PST) Message-ID: <4F2FE575.5020207@codemonkey.ws> Date: Mon, 06 Feb 2012 08:36:37 -0600 From: Anthony Liguori MIME-Version: 1.0 References: <1328342577-25732-1-git-send-email-pbonzini@redhat.com> <1328342577-25732-23-git-send-email-pbonzini@redhat.com> In-Reply-To: <1328342577-25732-23-git-send-email-pbonzini@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 22/27] qdev: access properties via QOM List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: qemu-devel@nongnu.org On 02/04/2012 02:02 AM, Paolo Bonzini wrote: > Do not poke anymore in the struct when accessing qdev properties. > Instead, ask the object to set the right value. > > Signed-off-by: Paolo Bonzini Reviewed-by: Anthony Liguori Regards, Anthony Liguori > --- > hw/qdev-addr.c | 5 ++- > hw/qdev-properties.c | 78 ++++++++++++++++++++++++++++++++++--------------- > hw/qdev.h | 4 +-- > 3 files changed, 59 insertions(+), 28 deletions(-) > > diff --git a/hw/qdev-addr.c b/hw/qdev-addr.c > index 5976dcd..8daa733 100644 > --- a/hw/qdev-addr.c > +++ b/hw/qdev-addr.c > @@ -71,5 +71,8 @@ PropertyInfo qdev_prop_taddr = { > > void qdev_prop_set_taddr(DeviceState *dev, const char *name, target_phys_addr_t value) > { > - qdev_prop_set(dev, name,&value, PROP_TYPE_TADDR); > + Error *errp = NULL; > + object_property_set_int(OBJECT(dev), value, name,&errp); > + assert(!errp); > + > } > diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c > index debb37f..5a11676 100644 > --- a/hw/qdev-properties.c > +++ b/hw/qdev-properties.c > @@ -1115,7 +1115,7 @@ int qdev_prop_parse(DeviceState *dev, const char *name, const char *value) > return 0; > } > > -void qdev_prop_set(DeviceState *dev, const char *name, void *src, enum PropertyType type) > +static void qdev_prop_set(DeviceState *dev, const char *name, void *src, enum PropertyType type) > { > Property *prop; > > @@ -1135,52 +1135,63 @@ void qdev_prop_set(DeviceState *dev, const char *name, void *src, enum PropertyT > > void qdev_prop_set_bit(DeviceState *dev, const char *name, bool value) > { > - qdev_prop_set(dev, name,&value, PROP_TYPE_BIT); > + Error *errp = NULL; > + object_property_set_bool(OBJECT(dev), value, name,&errp); > + assert(!errp); > } > > void qdev_prop_set_uint8(DeviceState *dev, const char *name, uint8_t value) > { > - qdev_prop_set(dev, name,&value, PROP_TYPE_UINT8); > + Error *errp = NULL; > + object_property_set_int(OBJECT(dev), value, name,&errp); > + assert(!errp); > } > > void qdev_prop_set_uint16(DeviceState *dev, const char *name, uint16_t value) > { > - qdev_prop_set(dev, name,&value, PROP_TYPE_UINT16); > + Error *errp = NULL; > + object_property_set_int(OBJECT(dev), value, name,&errp); > + assert(!errp); > } > > void qdev_prop_set_uint32(DeviceState *dev, const char *name, uint32_t value) > { > - qdev_prop_set(dev, name,&value, PROP_TYPE_UINT32); > + Error *errp = NULL; > + object_property_set_int(OBJECT(dev), value, name,&errp); > + assert(!errp); > } > > void qdev_prop_set_int32(DeviceState *dev, const char *name, int32_t value) > { > - qdev_prop_set(dev, name,&value, PROP_TYPE_INT32); > + Error *errp = NULL; > + object_property_set_int(OBJECT(dev), value, name,&errp); > + assert(!errp); > } > > void qdev_prop_set_uint64(DeviceState *dev, const char *name, uint64_t value) > { > - qdev_prop_set(dev, name,&value, PROP_TYPE_UINT64); > + Error *errp = NULL; > + object_property_set_int(OBJECT(dev), value, name,&errp); > + assert(!errp); > } > > void qdev_prop_set_string(DeviceState *dev, const char *name, char *value) > { > - qdev_prop_set(dev, name,&value, PROP_TYPE_STRING); > + Error *errp = NULL; > + object_property_set_str(OBJECT(dev), value, name,&errp); > + assert(!errp); > } > > int qdev_prop_set_drive(DeviceState *dev, const char *name, BlockDriverState *value) > { > - int res; > - > - res = bdrv_attach_dev(value, dev); > - if (res< 0) { > - error_report("Can't attach drive %s to %s.%s: %s", > - bdrv_get_device_name(value), > - dev->id ? dev->id : object_get_typename(OBJECT(dev)), > - name, strerror(-res)); > + Error *errp = NULL; > + object_property_set_str(OBJECT(dev), bdrv_get_device_name(value), > + name,&errp); > + if (errp) { > + qerror_report_err(errp); > + error_free(errp); > return -1; > } > - qdev_prop_set(dev, name,&value, PROP_TYPE_DRIVE); > return 0; > } > > @@ -1192,28 +1203,47 @@ void qdev_prop_set_drive_nofail(DeviceState *dev, const char *name, BlockDriverS > } > void qdev_prop_set_chr(DeviceState *dev, const char *name, CharDriverState *value) > { > - qdev_prop_set(dev, name,&value, PROP_TYPE_CHR); > + Error *errp = NULL; > + assert(value->label); > + object_property_set_str(OBJECT(dev), value->label, name,&errp); > + assert(!errp); > } > > void qdev_prop_set_netdev(DeviceState *dev, const char *name, VLANClientState *value) > { > - qdev_prop_set(dev, name,&value, PROP_TYPE_NETDEV); > + Error *errp = NULL; > + assert(value->name); > + object_property_set_str(OBJECT(dev), value->name, name,&errp); > + assert(!errp); > } > > void qdev_prop_set_vlan(DeviceState *dev, const char *name, VLANState *value) > { > - qdev_prop_set(dev, name,&value, PROP_TYPE_VLAN); > + Error *errp = NULL; > + object_property_set_int(OBJECT(dev), value ? value->id : -1, name,&errp); > + assert(!errp); > } > > void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value) > { > - qdev_prop_set(dev, name, value, PROP_TYPE_MACADDR); > + Error *errp = NULL; > + char str[2 * 6 + 5 + 1]; > + snprintf(str, sizeof(str), "%02x:%02x:%02x:%02x:%02x:%02x", > + value[0], value[1], value[2], value[3], value[4], value[5]); > + > + object_property_set_str(OBJECT(dev), str, name,&errp); > + assert(!errp); > } > > -void qdev_prop_set_losttickpolicy(DeviceState *dev, const char *name, > - LostTickPolicy *value) > +void qdev_prop_set_enum(DeviceState *dev, const char *name, int value) > { > - qdev_prop_set(dev, name, value, PROP_TYPE_LOSTTICKPOLICY); > + Property *prop; > + Error *errp = NULL; > + > + prop = qdev_prop_find(dev, name); > + object_property_set_str(OBJECT(dev), prop->info->enum_table[value], > + name,&errp); > + assert(!errp); > } > > void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value) > diff --git a/hw/qdev.h b/hw/qdev.h > index acccf26..9ccd5c3 100644 > --- a/hw/qdev.h > +++ b/hw/qdev.h > @@ -310,7 +310,6 @@ extern PropertyInfo qdev_prop_pci_devfn; > void *qdev_get_prop_ptr(DeviceState *dev, Property *prop); > int qdev_prop_exists(DeviceState *dev, const char *name); > int qdev_prop_parse(DeviceState *dev, const char *name, const char *value); > -void qdev_prop_set(DeviceState *dev, const char *name, void *src, enum PropertyType type); > void qdev_prop_set_bit(DeviceState *dev, const char *name, bool value); > void qdev_prop_set_uint8(DeviceState *dev, const char *name, uint8_t value); > void qdev_prop_set_uint16(DeviceState *dev, const char *name, uint16_t value); > @@ -324,8 +323,7 @@ void qdev_prop_set_vlan(DeviceState *dev, const char *name, VLANState *value); > int qdev_prop_set_drive(DeviceState *dev, const char *name, BlockDriverState *value) QEMU_WARN_UNUSED_RESULT; > void qdev_prop_set_drive_nofail(DeviceState *dev, const char *name, BlockDriverState *value); > void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value); > -void qdev_prop_set_losttickpolicy(DeviceState *dev, const char *name, > - LostTickPolicy *value); > +void qdev_prop_set_enum(DeviceState *dev, const char *name, int value); > /* FIXME: Remove opaque pointer properties. */ > void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value); > void qdev_prop_set_defaults(DeviceState *dev, Property *props);