From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:58814) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sd1Dr-0004tB-HX for qemu-devel@nongnu.org; Fri, 08 Jun 2012 11:35:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Sd1Dl-0005S3-Va for qemu-devel@nongnu.org; Fri, 08 Jun 2012 11:35:35 -0400 Received: from cantor2.suse.de ([195.135.220.15]:55353 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sd1Dl-0005Rg-J8 for qemu-devel@nongnu.org; Fri, 08 Jun 2012 11:35:29 -0400 From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Fri, 8 Jun 2012 17:35:12 +0200 Message-Id: <1339169713-31205-8-git-send-email-afaerber@suse.de> In-Reply-To: <1339169713-31205-1-git-send-email-afaerber@suse.de> References: <1339169713-31205-1-git-send-email-afaerber@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH 7/8] qdev: Remove PropertyInfo range checking List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?UTF-8?q?Andreas=20F=C3=A4rber?= , Anthony Liguori From: Paolo Bonzini Range checking in PropertyInfo is now used only for pci_devfn properties and some error reporting. Remove all code that implements it in the various property types, and the now unused fields. Signed-off-by: Paolo Bonzini [AF: Fix blocksize min/max for 32-bit hosts by using const int64_t.] Signed-off-by: Andreas F=C3=A4rber --- hw/qdev-properties.c | 106 ++++++++++++--------------------------------= ----- hw/qdev.h | 2 - 2 files changed, 26 insertions(+), 82 deletions(-) diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c index 553b0d1..9ae3187 100644 --- a/hw/qdev-properties.c +++ b/hw/qdev-properties.c @@ -91,34 +91,20 @@ static void set_uint8(Object *obj, Visitor *v, void *= opaque, { DeviceState *dev =3D DEVICE(obj); Property *prop =3D opaque; - uint8_t value, *ptr =3D qdev_get_prop_ptr(dev, prop); - Error *local_err =3D NULL; + uint8_t *ptr =3D qdev_get_prop_ptr(dev, prop); =20 if (dev->state !=3D DEV_STATE_CREATED) { error_set(errp, QERR_PERMISSION_DENIED); return; } =20 - visit_type_uint8(v, &value, name, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } - if (value >=3D prop->info->min && value <=3D prop->info->max) { - *ptr =3D value; - } else { - error_set(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE, - dev->id?:"", name, (int64_t)value, prop->info->min, - prop->info->max); - } + visit_type_uint8(v, ptr, name, errp); } =20 PropertyInfo qdev_prop_uint8 =3D { .name =3D "uint8", .get =3D get_uint8, .set =3D set_uint8, - .min =3D 0, - .max =3D 255, }; =20 /* --- 8bit hex value --- */ @@ -153,8 +139,6 @@ PropertyInfo qdev_prop_hex8 =3D { .print =3D print_hex8, .get =3D get_uint8, .set =3D set_uint8, - .min =3D 0, - .max =3D 255, }; =20 /* --- 16bit integer --- */ @@ -174,34 +158,20 @@ static void set_uint16(Object *obj, Visitor *v, voi= d *opaque, { DeviceState *dev =3D DEVICE(obj); Property *prop =3D opaque; - uint16_t value, *ptr =3D qdev_get_prop_ptr(dev, prop); - Error *local_err =3D NULL; + uint16_t *ptr =3D qdev_get_prop_ptr(dev, prop); =20 if (dev->state !=3D DEV_STATE_CREATED) { error_set(errp, QERR_PERMISSION_DENIED); return; } =20 - visit_type_uint16(v, &value, name, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } - if (value >=3D prop->info->min && value <=3D prop->info->max) { - *ptr =3D value; - } else { - error_set(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE, - dev->id?:"", name, (int64_t)value, prop->info->min, - prop->info->max); - } + visit_type_uint16(v, ptr, name, errp); } =20 PropertyInfo qdev_prop_uint16 =3D { .name =3D "uint16", .get =3D get_uint16, .set =3D set_uint16, - .min =3D 0, - .max =3D 65535, }; =20 /* --- 32bit integer --- */ @@ -211,10 +181,9 @@ static void get_uint32(Object *obj, Visitor *v, void= *opaque, { DeviceState *dev =3D DEVICE(obj); Property *prop =3D opaque; - uint32_t value, *ptr =3D qdev_get_prop_ptr(dev, prop); + uint32_t *ptr =3D qdev_get_prop_ptr(dev, prop); =20 - value =3D *ptr; - visit_type_uint32(v, &value, name, errp); + visit_type_uint32(v, ptr, name, errp); } =20 static void set_uint32(Object *obj, Visitor *v, void *opaque, @@ -222,26 +191,14 @@ static void set_uint32(Object *obj, Visitor *v, voi= d *opaque, { DeviceState *dev =3D DEVICE(obj); Property *prop =3D opaque; - uint32_t value, *ptr =3D qdev_get_prop_ptr(dev, prop); - Error *local_err =3D NULL; + uint32_t *ptr =3D qdev_get_prop_ptr(dev, prop); =20 if (dev->state !=3D DEV_STATE_CREATED) { error_set(errp, QERR_PERMISSION_DENIED); return; } =20 - visit_type_uint32(v, &value, name, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } - if (value >=3D prop->info->min && value <=3D prop->info->max) { - *ptr =3D value; - } else { - error_set(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE, - dev->id?:"", name, (int64_t)value, prop->info->min, - prop->info->max); - } + visit_type_uint32(v, ptr, name, errp); } =20 static void get_int32(Object *obj, Visitor *v, void *opaque, @@ -259,42 +216,26 @@ static void set_int32(Object *obj, Visitor *v, void= *opaque, { DeviceState *dev =3D DEVICE(obj); Property *prop =3D opaque; - int32_t value, *ptr =3D qdev_get_prop_ptr(dev, prop); - Error *local_err =3D NULL; + int32_t *ptr =3D qdev_get_prop_ptr(dev, prop); =20 if (dev->state !=3D DEV_STATE_CREATED) { error_set(errp, QERR_PERMISSION_DENIED); return; } =20 - visit_type_int32(v, &value, name, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } - if (value >=3D prop->info->min && value <=3D prop->info->max) { - *ptr =3D value; - } else { - error_set(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE, - dev->id?:"", name, (int64_t)value, prop->info->min, - prop->info->max); - } + visit_type_int32(v, ptr, name, errp); } =20 PropertyInfo qdev_prop_uint32 =3D { .name =3D "uint32", .get =3D get_uint32, .set =3D set_uint32, - .min =3D 0, - .max =3D 0xFFFFFFFFULL, }; =20 PropertyInfo qdev_prop_int32 =3D { .name =3D "int32", .get =3D get_int32, .set =3D set_int32, - .min =3D -0x80000000LL, - .max =3D 0x7FFFFFFFLL, }; =20 /* --- 32bit hex value --- */ @@ -329,8 +270,6 @@ PropertyInfo qdev_prop_hex32 =3D { .print =3D print_hex32, .get =3D get_uint32, .set =3D set_uint32, - .min =3D 0, - .max =3D 0xFFFFFFFFULL, }; =20 /* --- 64bit integer --- */ @@ -853,7 +792,7 @@ static void set_pci_devfn(Object *obj, Visitor *v, vo= id *opaque, { DeviceState *dev =3D DEVICE(obj); Property *prop =3D opaque; - int32_t *ptr =3D qdev_get_prop_ptr(dev, prop); + int32_t value, *ptr =3D qdev_get_prop_ptr(dev, prop); unsigned int slot, fn, n; Error *local_err =3D NULL; char *str; @@ -866,7 +805,17 @@ static void set_pci_devfn(Object *obj, Visitor *v, v= oid *opaque, visit_type_str(v, &str, name, &local_err); if (local_err) { error_free(local_err); - return set_int32(obj, v, opaque, name, errp); + local_err =3D NULL; + visit_type_int32(v, &value, name, &local_err); + if (local_err) { + error_propagate(errp, local_err); + } else if (value < -1 || value > 255) { + error_set(errp, QERR_INVALID_PARAMETER_VALUE, name ? name : = "null", + "pci_devfn"); + } else { + *ptr =3D value; + } + return; } =20 if (sscanf(str, "%x.%x%n", &slot, &fn, &n) !=3D 2) { @@ -904,8 +853,6 @@ PropertyInfo qdev_prop_pci_devfn =3D { .print =3D print_pci_devfn, .get =3D get_int32, .set =3D set_pci_devfn, - .min =3D -1, - .max =3D 255, }; =20 /* --- blocksize --- */ @@ -917,6 +864,8 @@ static void set_blocksize(Object *obj, Visitor *v, vo= id *opaque, Property *prop =3D opaque; uint16_t value, *ptr =3D qdev_get_prop_ptr(dev, prop); Error *local_err =3D NULL; + const int64_t min =3D 512; + const int64_t max =3D 32768; =20 if (dev->state !=3D DEV_STATE_CREATED) { error_set(errp, QERR_PERMISSION_DENIED); @@ -928,10 +877,9 @@ static void set_blocksize(Object *obj, Visitor *v, v= oid *opaque, error_propagate(errp, local_err); return; } - if (value < prop->info->min || value > prop->info->max) { + if (value < min || value > max) { error_set(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE, - dev->id?:"", name, (int64_t)value, prop->info->min, - prop->info->max); + dev->id?:"", name, (int64_t)value, min, max); return; } =20 @@ -949,8 +897,6 @@ PropertyInfo qdev_prop_blocksize =3D { .name =3D "blocksize", .get =3D get_uint16, .set =3D set_blocksize, - .min =3D 512, - .max =3D 65024, }; =20 /* --- public helpers --- */ diff --git a/hw/qdev.h b/hw/qdev.h index d07da45..5386b16 100644 --- a/hw/qdev.h +++ b/hw/qdev.h @@ -122,8 +122,6 @@ struct PropertyInfo { const char *name; const char *legacy_name; const char **enum_table; - int64_t min; - int64_t max; int (*parse)(DeviceState *dev, Property *prop, const char *str); int (*print)(DeviceState *dev, Property *prop, char *dest, size_t le= n); ObjectPropertyAccessor *get; --=20 1.7.7