All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [Qemu-devel] [PATCH 01/10] qdev: add qdev property for bool type
       [not found] ` <1361754189-29809-2-git-send-email-imammedo@redhat.com>
@ 2013-03-07 14:05   ` Andreas Färber
  2013-03-07 16:16     ` [Qemu-devel] [PATCH 01/10 v2] " Igor Mammedov
  0 siblings, 1 reply; 8+ messages in thread
From: Andreas Färber @ 2013-03-07 14:05 UTC (permalink / raw)
  To: Igor Mammedov; +Cc: qemu-devel, ehabkost

Am 25.02.2013 02:03, schrieb Igor Mammedov:
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>

I vaguely remember having written something like this long time ago for
ISA and for Vasilis... looks good except for minor nits.

> ---
>  hw/qdev-properties.c |   33 +++++++++++++++++++++++++++++++++
>  hw/qdev-properties.h |   10 ++++++++++
>  2 files changed, 43 insertions(+), 0 deletions(-)
> 
> diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
> index a8a31f5..16ac814 100644
> --- a/hw/qdev-properties.c
> +++ b/hw/qdev-properties.c
> @@ -106,6 +106,39 @@ PropertyInfo qdev_prop_bit = {
>      .set   = set_bit,
>  };
>  
> +/* --- bool --- */
> +
> +static void get_bool(Object *obj, Visitor *v, void *opaque,
> +                     const char *name, Error **errp)
> +{
> +    DeviceState *dev = DEVICE(obj);
> +    Property *prop = opaque;
> +    bool *ptr = qdev_get_prop_ptr(dev, prop);
> +
> +    visit_type_bool(v, ptr, name, errp);
> +}
> +
> +static void set_bool(Object *obj, Visitor *v, void *opaque,
> +                       const char *name, Error **errp)

Indentation is off.

> +{
> +    DeviceState *dev = DEVICE(obj);
> +    Property *prop = opaque;
> +    bool *ptr = qdev_get_prop_ptr(dev, prop);
> +
> +    if (dev->realized) {
> +        error_setg(errp, "Insufficient permission to perform this operation");

Should we be more specific here?
E.g., "Property '%s' cannot be changed once realized."

Andreas

> +        return;
> +    }
> +
> +    visit_type_bool(v, ptr, name, errp);
> +}
> +
> +PropertyInfo qdev_prop_bool = {
> +    .name  = "boolean",
> +    .get   = get_bool,
> +    .set   = set_bool,
> +};
> +
>  /* --- 8bit integer --- */
>  
>  static void get_uint8(Object *obj, Visitor *v, void *opaque,
> diff --git a/hw/qdev-properties.h b/hw/qdev-properties.h
> index 20c67f3..3915f7c 100644
> --- a/hw/qdev-properties.h
> +++ b/hw/qdev-properties.h
> @@ -6,6 +6,7 @@
>  /*** qdev-properties.c ***/
>  
>  extern PropertyInfo qdev_prop_bit;
> +extern PropertyInfo qdev_prop_bool;
>  extern PropertyInfo qdev_prop_uint8;
>  extern PropertyInfo qdev_prop_uint16;
>  extern PropertyInfo qdev_prop_uint32;
> @@ -51,6 +52,15 @@ extern PropertyInfo qdev_prop_pci_host_devaddr;
>          .defval    = (bool)_defval,                              \
>          }
>  
> +#define DEFINE_PROP_BOOL(_name, _state, _field, _defval) {       \
> +        .name      = (_name),                                    \
> +        .info      = &(qdev_prop_bool),                          \
> +        .offset    = offsetof(_state, _field)                    \
> +            + type_check(bool, typeof_field(_state, _field)),    \
> +        .qtype     = QTYPE_QBOOL,                                \
> +        .defval    = (bool)_defval,                              \
> +        }
> +
>  #define DEFINE_PROP_UINT8(_n, _s, _f, _d)                       \
>      DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint8, uint8_t)
>  #define DEFINE_PROP_UINT16(_n, _s, _f, _d)                      \
> 


-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Qemu-devel] [PATCH 01/10 v2] qdev: add qdev property for bool type
  2013-03-07 14:05   ` [Qemu-devel] [PATCH 01/10] qdev: add qdev property for bool type Andreas Färber
@ 2013-03-07 16:16     ` Igor Mammedov
  2013-04-09 13:56       ` Andreas Färber
  0 siblings, 1 reply; 8+ messages in thread
From: Igor Mammedov @ 2013-03-07 16:16 UTC (permalink / raw)
  To: qemu-devel; +Cc: afaerber

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
---
v2:
  - fixed indentation
  - replaced error message. Suggested-By: Andreas Färber <afaerber@suse.de>
---
 hw/qdev-properties.c |   33 +++++++++++++++++++++++++++++++++
 hw/qdev-properties.h |   10 ++++++++++
 2 files changed, 43 insertions(+), 0 deletions(-)

diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
index a8a31f5..b0f2333 100644
--- a/hw/qdev-properties.c
+++ b/hw/qdev-properties.c
@@ -106,6 +106,39 @@ PropertyInfo qdev_prop_bit = {
     .set   = set_bit,
 };
 
+/* --- bool --- */
+
+static void get_bool(Object *obj, Visitor *v, void *opaque,
+                     const char *name, Error **errp)
+{
+    DeviceState *dev = DEVICE(obj);
+    Property *prop = opaque;
+    bool *ptr = qdev_get_prop_ptr(dev, prop);
+
+    visit_type_bool(v, ptr, name, errp);
+}
+
+static void set_bool(Object *obj, Visitor *v, void *opaque,
+                     const char *name, Error **errp)
+{
+    DeviceState *dev = DEVICE(obj);
+    Property *prop = opaque;
+    bool *ptr = qdev_get_prop_ptr(dev, prop);
+
+    if (dev->realized) {
+        error_setg(errp, "Property '%s' cannot be changed once realized", name);
+        return;
+    }
+
+    visit_type_bool(v, ptr, name, errp);
+}
+
+PropertyInfo qdev_prop_bool = {
+    .name  = "boolean",
+    .get   = get_bool,
+    .set   = set_bool,
+};
+
 /* --- 8bit integer --- */
 
 static void get_uint8(Object *obj, Visitor *v, void *opaque,
diff --git a/hw/qdev-properties.h b/hw/qdev-properties.h
index 20c67f3..3915f7c 100644
--- a/hw/qdev-properties.h
+++ b/hw/qdev-properties.h
@@ -6,6 +6,7 @@
 /*** qdev-properties.c ***/
 
 extern PropertyInfo qdev_prop_bit;
+extern PropertyInfo qdev_prop_bool;
 extern PropertyInfo qdev_prop_uint8;
 extern PropertyInfo qdev_prop_uint16;
 extern PropertyInfo qdev_prop_uint32;
@@ -51,6 +52,15 @@ extern PropertyInfo qdev_prop_pci_host_devaddr;
         .defval    = (bool)_defval,                              \
         }
 
+#define DEFINE_PROP_BOOL(_name, _state, _field, _defval) {       \
+        .name      = (_name),                                    \
+        .info      = &(qdev_prop_bool),                          \
+        .offset    = offsetof(_state, _field)                    \
+            + type_check(bool, typeof_field(_state, _field)),    \
+        .qtype     = QTYPE_QBOOL,                                \
+        .defval    = (bool)_defval,                              \
+        }
+
 #define DEFINE_PROP_UINT8(_n, _s, _f, _d)                       \
     DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint8, uint8_t)
 #define DEFINE_PROP_UINT16(_n, _s, _f, _d)                      \
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH qom-cpu-next 00/10 v7] target-i386: convert CPU features into properties
       [not found] <1361754189-29809-1-git-send-email-imammedo@redhat.com>
       [not found] ` <1361754189-29809-2-git-send-email-imammedo@redhat.com>
@ 2013-03-18 12:31 ` Igor Mammedov
  2013-03-18 12:36   ` Andreas Färber
       [not found] ` <1361754189-29809-3-git-send-email-imammedo@redhat.com>
  2 siblings, 1 reply; 8+ messages in thread
From: Igor Mammedov @ 2013-03-18 12:31 UTC (permalink / raw)
  To: afaerber; +Cc: qemu-devel

ping

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH qom-cpu-next 00/10 v7] target-i386: convert CPU features into properties
  2013-03-18 12:31 ` [Qemu-devel] [PATCH qom-cpu-next 00/10 v7] target-i386: convert CPU features into properties Igor Mammedov
@ 2013-03-18 12:36   ` Andreas Färber
  0 siblings, 0 replies; 8+ messages in thread
From: Andreas Färber @ 2013-03-18 12:36 UTC (permalink / raw)
  To: Igor Mammedov; +Cc: qemu-devel

Am 18.03.2013 13:31, schrieb Igor Mammedov:
> ping

Thanks. First day back at work here. :)

Cheers,
Andreas

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH 01/10 v2] qdev: add qdev property for bool type
  2013-03-07 16:16     ` [Qemu-devel] [PATCH 01/10 v2] " Igor Mammedov
@ 2013-04-09 13:56       ` Andreas Färber
  2013-04-09 14:13         ` Igor Mammedov
  0 siblings, 1 reply; 8+ messages in thread
From: Andreas Färber @ 2013-04-09 13:56 UTC (permalink / raw)
  To: Igor Mammedov; +Cc: Peter Maydell, qemu-devel, Eduardo Habkost

Am 07.03.2013 17:16, schrieb Igor Mammedov:
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> ---
> v2:
>   - fixed indentation
>   - replaced error message. Suggested-By: Andreas Färber <afaerber@suse.de>

Thanks, rebased onto PMM's array properties and applied to qom-cpu:
https://github.com/afaerber/qemu-cpu/commits/qom-cpu

Andreas

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH 01/10 v2] qdev: add qdev property for bool type
  2013-04-09 13:56       ` Andreas Färber
@ 2013-04-09 14:13         ` Igor Mammedov
  2013-04-09 14:25           ` Andreas Färber
  0 siblings, 1 reply; 8+ messages in thread
From: Igor Mammedov @ 2013-04-09 14:13 UTC (permalink / raw)
  To: Andreas Färber; +Cc: Peter Maydell, qemu-devel, Eduardo Habkost

On Tue, 09 Apr 2013 15:56:57 +0200
Andreas Färber <afaerber@suse.de> wrote:

> Am 07.03.2013 17:16, schrieb Igor Mammedov:
> > Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> > ---
> > v2:
> >   - fixed indentation
> >   - replaced error message. Suggested-By: Andreas Färber
> > <afaerber@suse.de>
> 
> Thanks, rebased onto PMM's array properties and applied to qom-cpu:
> https://github.com/afaerber/qemu-cpu/commits/qom-cpu
> 
> Andreas
> 

Thanks,

one more note could you fixup setter like Peter did in b000dfbd4,
or would you like me send a patch?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH 01/10 v2] qdev: add qdev property for bool type
  2013-04-09 14:13         ` Igor Mammedov
@ 2013-04-09 14:25           ` Andreas Färber
  0 siblings, 0 replies; 8+ messages in thread
From: Andreas Färber @ 2013-04-09 14:25 UTC (permalink / raw)
  To: Igor Mammedov; +Cc: Peter Maydell, qemu-devel, Eduardo Habkost

Am 09.04.2013 16:13, schrieb Igor Mammedov:
> On Tue, 09 Apr 2013 15:56:57 +0200
> Andreas Färber <afaerber@suse.de> wrote:
> 
>> Am 07.03.2013 17:16, schrieb Igor Mammedov:
>>> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
>>> ---
>>> v2:
>>>   - fixed indentation
>>>   - replaced error message. Suggested-By: Andreas Färber
>>> <afaerber@suse.de>
>>
>> Thanks, rebased onto PMM's array properties and applied to qom-cpu:
>> https://github.com/afaerber/qemu-cpu/commits/qom-cpu
>>
>> Andreas
>>
> 
> Thanks,
> 
> one more note could you fixup setter like Peter did in b000dfbd4,
> or would you like me send a patch?

Thanks for pointing that out! Updated to use
qdev_prop_set_after_realized() and pushed.

Andreas

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH 02/10] target-i386: cpu: convert existing dynamic properties into static properties
       [not found] ` <1361754189-29809-3-git-send-email-imammedo@redhat.com>
@ 2013-04-26 16:20   ` Andreas Färber
  0 siblings, 0 replies; 8+ messages in thread
From: Andreas Färber @ 2013-04-26 16:20 UTC (permalink / raw)
  To: Igor Mammedov; +Cc: qemu-devel, ehabkost

Am 25.02.2013 02:03, schrieb Igor Mammedov:
> Following properties are converted:
>     * vendor
>     * xlevel
>         * custom setter/getter replaced by qdev's DEFINE_PROP_UINT32
>     * level
>         * custom setter/getter replaced by qdev's DEFINE_PROP_UINT32
>     * tsc-frequency
>     * stepping
>     * model
>     * family
>     * model-id
>         * check "if (model_id == NULL)" looks unnecessary now, since all
>         builtin model-ids are not NULL and user shouldn't be able to set
>         it NULL (cpumodel string parsing code takes care of it, if feature
>         is specified as "model-id=" on command line, its parsing will
>         result in an empty string as value).
> 
> Common changes to all properties:
>     * string properties: changed function signature to conform to form used in
>       qdev-properties.c
> 
> * extra change is addition of feat2prop() helper to deal with properties
>   naming using '-' instead of '_'. Used in this patch for 'model_id' name
>   conversion and converting along the way 'hv-spinlocks', but will be
>   reused in following patches for "hv_*" and +-foo conversions as well.
> 
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> v2:
>   - removed s/error_set/error_setg/;s/QERR*/with similar message/
>   - made PropertyInfo static
>   - Left setters/getters atwher they have been, only signature change
>     + usin visitors where needed
>   - use g_malloc0() instead of g_malloc() in x86_cpuid_get_model_id()
> ---
>  target-i386/cpu.c |  174 ++++++++++++++++++++++++++++++++---------------------
>  1 files changed, 105 insertions(+), 69 deletions(-)
> 
> diff --git a/target-i386/cpu.c b/target-i386/cpu.c
> index dfcf86e..5626931 100644
> --- a/target-i386/cpu.c
> +++ b/target-i386/cpu.c
[...]
> @@ -1297,6 +1345,17 @@ static int cpu_x86_find_by_name(x86_def_t *x86_cpu_def, const char *name)
>      return -1;
>  }
>  
> +/* It converts all '_' in a feature string option name to '-', to make
> + * feature name to conform property naming rule which uses '-' instead of '_'
> + */
> +static inline void feat2prop(char *s)
> +{
> +    char *delimiter = strchr(s, '=');
> +    while ((s = strchr(s, '_')) && ((delimiter == NULL) || (s < delimiter))) {
> +        *s = '-';
> +    }
> +}
> +
>  /* Parse "+feature,-feature,feature=foo" CPU feature string
>   */
>  static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp)
> @@ -1318,6 +1377,7 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp)
>          } else if (featurestr[0] == '-') {
>              add_flagname_to_bitmaps(featurestr + 1, minus_features);
>          } else if ((val = strchr(featurestr, '='))) {
> +            feat2prop(featurestr);
>              *val = 0; val++;
>              if (!strcmp(featurestr, "family")) {
>                  object_property_parse(OBJECT(cpu), val, featurestr, errp);
> @@ -1345,9 +1405,9 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp)
>                  object_property_parse(OBJECT(cpu), num, featurestr, errp);
>              } else if (!strcmp(featurestr, "vendor")) {
>                  object_property_parse(OBJECT(cpu), val, featurestr, errp);
> -            } else if (!strcmp(featurestr, "model_id")) {
> -                object_property_parse(OBJECT(cpu), val, "model-id", errp);
> -            } else if (!strcmp(featurestr, "tsc_freq")) {
> +            } else if (!strcmp(featurestr, "model-id")) {
> +                object_property_parse(OBJECT(cpu), val, featurestr, errp);
> +            } else if (!strcmp(featurestr, "tsc-freq")) {
>                  int64_t tsc_freq;
>                  char *err;
>                  char num[32];
> @@ -1360,7 +1420,7 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp)
>                  }
>                  snprintf(num, sizeof(num), "%" PRId64, tsc_freq);
>                  object_property_parse(OBJECT(cpu), num, "tsc-frequency", errp);
> -            } else if (!strcmp(featurestr, "hv_spinlocks")) {
> +            } else if (!strcmp(featurestr, "hv-spinlocks")) {
>                  char *err;
>                  numvalue = strtoul(val, &err, 0);
>                  if (!*val || *err) {
[snip]

Thanks, split this part off and applied to qom-cpu (modified as below):

https://github.com/afaerber/qemu-cpu/commits/qom-cpu

Andreas

diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index f34ba23..697848d 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1307,6 +1307,16 @@ static int cpu_x86_find_by_name(x86_def_t
*x86_cpu_def, c
onst char *name)
     return -1;
 }

+/* Convert all '_' in a feature string option name to '-', to make feature
+ * name conform to QOM property naming rule, which uses '-' instead of '_'.
+ */
+static inline void feat2prop(char *s)
+{
+    while ((s = strchr(s, '_'))) {
+        *s = '-';
+    }
+}
+
 /* Parse "+feature,-feature,feature=foo" CPU feature string
  */
 static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error
**errp)
@@ -1329,6 +1339,7 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu,
char *fe
atures, Error **errp)
             add_flagname_to_bitmaps(featurestr + 1, minus_features);
         } else if ((val = strchr(featurestr, '='))) {
             *val = 0; val++;
+            feat2prop(featurestr);
             if (!strcmp(featurestr, "family")) {
                 object_property_parse(OBJECT(cpu), val, featurestr, errp);
             } else if (!strcmp(featurestr, "model")) {
@@ -1355,9 +1366,9 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu,
char *fe
atures, Error **errp)
                 object_property_parse(OBJECT(cpu), num, featurestr, errp);
             } else if (!strcmp(featurestr, "vendor")) {
                 object_property_parse(OBJECT(cpu), val, featurestr, errp);
-            } else if (!strcmp(featurestr, "model_id")) {
-                object_property_parse(OBJECT(cpu), val, "model-id", errp);
-            } else if (!strcmp(featurestr, "tsc_freq")) {
+            } else if (!strcmp(featurestr, "model-id")) {
+                object_property_parse(OBJECT(cpu), val, featurestr, errp);
+            } else if (!strcmp(featurestr, "tsc-freq")) {
                 int64_t tsc_freq;
                 char *err;
                 char num[32];
@@ -1370,7 +1381,7 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu,
char *features, Error **errp)
                 }
                 snprintf(num, sizeof(num), "%" PRId64, tsc_freq);
                 object_property_parse(OBJECT(cpu), num,
"tsc-frequency", errp);
-            } else if (!strcmp(featurestr, "hv_spinlocks")) {
+            } else if (!strcmp(featurestr, "hv-spinlocks")) {
                 char *err;
                 numvalue = strtoul(val, &err, 0);
                 if (!*val || *err) {


-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2013-04-26 16:20 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <1361754189-29809-1-git-send-email-imammedo@redhat.com>
     [not found] ` <1361754189-29809-2-git-send-email-imammedo@redhat.com>
2013-03-07 14:05   ` [Qemu-devel] [PATCH 01/10] qdev: add qdev property for bool type Andreas Färber
2013-03-07 16:16     ` [Qemu-devel] [PATCH 01/10 v2] " Igor Mammedov
2013-04-09 13:56       ` Andreas Färber
2013-04-09 14:13         ` Igor Mammedov
2013-04-09 14:25           ` Andreas Färber
2013-03-18 12:31 ` [Qemu-devel] [PATCH qom-cpu-next 00/10 v7] target-i386: convert CPU features into properties Igor Mammedov
2013-03-18 12:36   ` Andreas Färber
     [not found] ` <1361754189-29809-3-git-send-email-imammedo@redhat.com>
2013-04-26 16:20   ` [Qemu-devel] [PATCH 02/10] target-i386: cpu: convert existing dynamic properties into static properties Andreas Färber

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.