qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] hw/char/sh_serial: QOM housekeeping
@ 2025-01-24 17:50 Philippe Mathieu-Daudé
  2025-01-24 17:50 ` [PATCH 1/2] hw/char/sh_serial: Delete fifo_timeout_timer in DeviceUnrealize Philippe Mathieu-Daudé
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-01-24 17:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, Paolo Bonzini, Bernhard Beschow,
	Magnus Damm, Yoshinori Sato, Philippe Mathieu-Daudé

- Parity in realize / unrealize
- Define TypeInfo structure

Philippe Mathieu-Daudé (2):
  hw/char/sh_serial: Delete fifo_timeout_timer in DeviceUnrealize
  hw/char/sh_serial: Convert to TypeInfo

 hw/char/sh_serial.c | 24 ++++++++++++++----------
 1 file changed, 14 insertions(+), 10 deletions(-)

-- 
2.47.1



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

* [PATCH 1/2] hw/char/sh_serial: Delete fifo_timeout_timer in DeviceUnrealize
  2025-01-24 17:50 [PATCH 0/2] hw/char/sh_serial: QOM housekeeping Philippe Mathieu-Daudé
@ 2025-01-24 17:50 ` Philippe Mathieu-Daudé
  2025-02-06 14:57   ` Peter Maydell
  2025-01-24 17:50 ` [PATCH 2/2] hw/char/sh_serial: Convert to TypeInfo Philippe Mathieu-Daudé
  2025-02-06 11:55 ` [PATCH 0/2] hw/char/sh_serial: QOM housekeeping Philippe Mathieu-Daudé
  2 siblings, 1 reply; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-01-24 17:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, Paolo Bonzini, Bernhard Beschow,
	Magnus Damm, Yoshinori Sato, Philippe Mathieu-Daudé

fifo_timeout_timer is created in the DeviceRealize handler,
not in the instance_init one. For parity, delete it in
DeviceUnrealize, rather than instance_finalize.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 hw/char/sh_serial.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/hw/char/sh_serial.c b/hw/char/sh_serial.c
index 247aeb071ac..29ac9f9e5e7 100644
--- a/hw/char/sh_serial.c
+++ b/hw/char/sh_serial.c
@@ -436,9 +436,9 @@ static void sh_serial_realize(DeviceState *d, Error **errp)
     s->etu = NANOSECONDS_PER_SECOND / 9600;
 }
 
-static void sh_serial_finalize(Object *obj)
+static void sh_serial_unrealize(DeviceState *dev)
 {
-    SHSerialState *s = SH_SERIAL(obj);
+    SHSerialState *s = SH_SERIAL(dev);
 
     timer_del(&s->fifo_timeout_timer);
 }
@@ -447,6 +447,10 @@ static void sh_serial_init(Object *obj)
 {
 }
 
+static void sh_serial_finalize(Object *obj)
+{
+}
+
 static const Property sh_serial_properties[] = {
     DEFINE_PROP_CHR("chardev", SHSerialState, chr),
     DEFINE_PROP_UINT8("features", SHSerialState, feat, 0),
@@ -458,6 +462,7 @@ static void sh_serial_class_init(ObjectClass *oc, void *data)
 
     device_class_set_props(dc, sh_serial_properties);
     dc->realize = sh_serial_realize;
+    dc->unrealize = sh_serial_unrealize;
     device_class_set_legacy_reset(dc, sh_serial_reset);
     /* Reason: part of SuperH CPU/SoC, needs to be wired up */
     dc->user_creatable = false;
-- 
2.47.1



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

* [PATCH 2/2] hw/char/sh_serial: Convert to TypeInfo
  2025-01-24 17:50 [PATCH 0/2] hw/char/sh_serial: QOM housekeeping Philippe Mathieu-Daudé
  2025-01-24 17:50 ` [PATCH 1/2] hw/char/sh_serial: Delete fifo_timeout_timer in DeviceUnrealize Philippe Mathieu-Daudé
@ 2025-01-24 17:50 ` Philippe Mathieu-Daudé
  2025-01-24 18:07   ` Philippe Mathieu-Daudé
  2025-02-06 15:07   ` Peter Maydell
  2025-02-06 11:55 ` [PATCH 0/2] hw/char/sh_serial: QOM housekeeping Philippe Mathieu-Daudé
  2 siblings, 2 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-01-24 17:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, Paolo Bonzini, Bernhard Beschow,
	Magnus Damm, Yoshinori Sato, Philippe Mathieu-Daudé

QOM types are now registered using as TypeInfo via DEFINE_TYPES()
or type_init(). Update TYPE_SH_SERIAL, removing the empty QOM
instance_init/finalize handlers.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 hw/char/sh_serial.c | 23 +++++++++++------------
 1 file changed, 11 insertions(+), 12 deletions(-)

diff --git a/hw/char/sh_serial.c b/hw/char/sh_serial.c
index 29ac9f9e5e7..b1db91656fe 100644
--- a/hw/char/sh_serial.c
+++ b/hw/char/sh_serial.c
@@ -78,10 +78,6 @@ struct SHSerialState {
     qemu_irq bri;
 };
 
-typedef struct {} SHSerialStateClass;
-
-OBJECT_DEFINE_TYPE(SHSerialState, sh_serial, SH_SERIAL, SYS_BUS_DEVICE)
-
 static void sh_serial_clear_fifo(SHSerialState *s)
 {
     memset(s->rx_fifo, 0, SH_RX_FIFO_LENGTH);
@@ -443,14 +439,6 @@ static void sh_serial_unrealize(DeviceState *dev)
     timer_del(&s->fifo_timeout_timer);
 }
 
-static void sh_serial_init(Object *obj)
-{
-}
-
-static void sh_serial_finalize(Object *obj)
-{
-}
-
 static const Property sh_serial_properties[] = {
     DEFINE_PROP_CHR("chardev", SHSerialState, chr),
     DEFINE_PROP_UINT8("features", SHSerialState, feat, 0),
@@ -467,3 +455,14 @@ static void sh_serial_class_init(ObjectClass *oc, void *data)
     /* Reason: part of SuperH CPU/SoC, needs to be wired up */
     dc->user_creatable = false;
 }
+
+static const TypeInfo sh_serial_types[] = {
+    {
+        .name           = TYPE_SH_SERIAL,
+        .parent         = TYPE_SYS_BUS_DEVICE,
+        .instance_size  = sizeof(SHSerialState),
+        .class_init     = sh_serial_class_init,
+    },
+};
+
+DEFINE_TYPES(sh_serial_types)
-- 
2.47.1



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

* Re: [PATCH 2/2] hw/char/sh_serial: Convert to TypeInfo
  2025-01-24 17:50 ` [PATCH 2/2] hw/char/sh_serial: Convert to TypeInfo Philippe Mathieu-Daudé
@ 2025-01-24 18:07   ` Philippe Mathieu-Daudé
  2025-02-06 15:07   ` Peter Maydell
  1 sibling, 0 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-01-24 18:07 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, Paolo Bonzini, Bernhard Beschow,
	Magnus Damm, Yoshinori Sato

On 24/1/25 18:50, Philippe Mathieu-Daudé wrote:
> QOM types are now registered using as TypeInfo via DEFINE_TYPES()
> or type_init(). Update TYPE_SH_SERIAL, removing the empty QOM
> instance_init/finalize handlers.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   hw/char/sh_serial.c | 23 +++++++++++------------
>   1 file changed, 11 insertions(+), 12 deletions(-)
> 
> diff --git a/hw/char/sh_serial.c b/hw/char/sh_serial.c
> index 29ac9f9e5e7..b1db91656fe 100644
> --- a/hw/char/sh_serial.c
> +++ b/hw/char/sh_serial.c
> @@ -78,10 +78,6 @@ struct SHSerialState {
>       qemu_irq bri;
>   };
>   
> -typedef struct {} SHSerialStateClass;

Note this structure was buggy, as it should have embedded its parent...

   struct SHSerialStateClass {
     SysBusDeviceClass parent_class;
     ...
   };

> -
> -OBJECT_DEFINE_TYPE(SHSerialState, sh_serial, SH_SERIAL, SYS_BUS_DEVICE)
> -
>   static void sh_serial_clear_fifo(SHSerialState *s)
>   {
>       memset(s->rx_fifo, 0, SH_RX_FIFO_LENGTH);
> @@ -443,14 +439,6 @@ static void sh_serial_unrealize(DeviceState *dev)
>       timer_del(&s->fifo_timeout_timer);
>   }
>   
> -static void sh_serial_init(Object *obj)
> -{
> -}
> -
> -static void sh_serial_finalize(Object *obj)
> -{
> -}
> -
>   static const Property sh_serial_properties[] = {
>       DEFINE_PROP_CHR("chardev", SHSerialState, chr),
>       DEFINE_PROP_UINT8("features", SHSerialState, feat, 0),
> @@ -467,3 +455,14 @@ static void sh_serial_class_init(ObjectClass *oc, void *data)
>       /* Reason: part of SuperH CPU/SoC, needs to be wired up */
>       dc->user_creatable = false;
>   }
> +
> +static const TypeInfo sh_serial_types[] = {
> +    {
> +        .name           = TYPE_SH_SERIAL,
> +        .parent         = TYPE_SYS_BUS_DEVICE,
> +        .instance_size  = sizeof(SHSerialState),
> +        .class_init     = sh_serial_class_init,
> +    },
> +};
> +
> +DEFINE_TYPES(sh_serial_types)



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

* Re: [PATCH 0/2] hw/char/sh_serial: QOM housekeeping
  2025-01-24 17:50 [PATCH 0/2] hw/char/sh_serial: QOM housekeeping Philippe Mathieu-Daudé
  2025-01-24 17:50 ` [PATCH 1/2] hw/char/sh_serial: Delete fifo_timeout_timer in DeviceUnrealize Philippe Mathieu-Daudé
  2025-01-24 17:50 ` [PATCH 2/2] hw/char/sh_serial: Convert to TypeInfo Philippe Mathieu-Daudé
@ 2025-02-06 11:55 ` Philippe Mathieu-Daudé
  2 siblings, 0 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-02-06 11:55 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, Paolo Bonzini, Bernhard Beschow,
	Magnus Damm, Yoshinori Sato

On 24/1/25 18:50, Philippe Mathieu-Daudé wrote:
> - Parity in realize / unrealize
> - Define TypeInfo structure
> 
> Philippe Mathieu-Daudé (2):
>    hw/char/sh_serial: Delete fifo_timeout_timer in DeviceUnrealize
>    hw/char/sh_serial: Convert to TypeInfo
> 
>   hw/char/sh_serial.c | 24 ++++++++++++++----------
>   1 file changed, 14 insertions(+), 10 deletions(-)
> 

ping?


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

* Re: [PATCH 1/2] hw/char/sh_serial: Delete fifo_timeout_timer in DeviceUnrealize
  2025-01-24 17:50 ` [PATCH 1/2] hw/char/sh_serial: Delete fifo_timeout_timer in DeviceUnrealize Philippe Mathieu-Daudé
@ 2025-02-06 14:57   ` Peter Maydell
  0 siblings, 0 replies; 7+ messages in thread
From: Peter Maydell @ 2025-02-06 14:57 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: qemu-devel, Marc-André Lureau, Paolo Bonzini,
	Bernhard Beschow, Magnus Damm, Yoshinori Sato

On Fri, 24 Jan 2025 at 17:51, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>
> fifo_timeout_timer is created in the DeviceRealize handler,
> not in the instance_init one. For parity, delete it in
> DeviceUnrealize, rather than instance_finalize.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

thanks
-- PMM


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

* Re: [PATCH 2/2] hw/char/sh_serial: Convert to TypeInfo
  2025-01-24 17:50 ` [PATCH 2/2] hw/char/sh_serial: Convert to TypeInfo Philippe Mathieu-Daudé
  2025-01-24 18:07   ` Philippe Mathieu-Daudé
@ 2025-02-06 15:07   ` Peter Maydell
  1 sibling, 0 replies; 7+ messages in thread
From: Peter Maydell @ 2025-02-06 15:07 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: qemu-devel, Marc-André Lureau, Paolo Bonzini,
	Bernhard Beschow, Magnus Damm, Yoshinori Sato

On Fri, 24 Jan 2025 at 17:51, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>
> QOM types are now registered using as TypeInfo via DEFINE_TYPES()
> or type_init(). Update TYPE_SH_SERIAL, removing the empty QOM
> instance_init/finalize handlers.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>  hw/char/sh_serial.c | 23 +++++++++++------------
>  1 file changed, 11 insertions(+), 12 deletions(-)
>
> diff --git a/hw/char/sh_serial.c b/hw/char/sh_serial.c
> index 29ac9f9e5e7..b1db91656fe 100644
> --- a/hw/char/sh_serial.c
> +++ b/hw/char/sh_serial.c
> @@ -78,10 +78,6 @@ struct SHSerialState {
>      qemu_irq bri;
>  };
>
> -typedef struct {} SHSerialStateClass;
> -
> -OBJECT_DEFINE_TYPE(SHSerialState, sh_serial, SH_SERIAL, SYS_BUS_DEVICE)
> -

This was definitely wrong, because OBJECT_DEFINE_TYPE()
is only for cases where the class needs its own virtual
methods or some other per-class state in its own class struct.

>  static void sh_serial_clear_fifo(SHSerialState *s)
>  {
>      memset(s->rx_fifo, 0, SH_RX_FIFO_LENGTH);
> @@ -443,14 +439,6 @@ static void sh_serial_unrealize(DeviceState *dev)
>      timer_del(&s->fifo_timeout_timer);
>  }
>
> -static void sh_serial_init(Object *obj)
> -{
> -}
> -
> -static void sh_serial_finalize(Object *obj)
> -{
> -}
> -
>  static const Property sh_serial_properties[] = {
>      DEFINE_PROP_CHR("chardev", SHSerialState, chr),
>      DEFINE_PROP_UINT8("features", SHSerialState, feat, 0),
> @@ -467,3 +455,14 @@ static void sh_serial_class_init(ObjectClass *oc, void *data)
>      /* Reason: part of SuperH CPU/SoC, needs to be wired up */
>      dc->user_creatable = false;
>  }
> +
> +static const TypeInfo sh_serial_types[] = {
> +    {
> +        .name           = TYPE_SH_SERIAL,
> +        .parent         = TYPE_SYS_BUS_DEVICE,
> +        .instance_size  = sizeof(SHSerialState),
> +        .class_init     = sh_serial_class_init,
> +    },
> +};
> +
> +DEFINE_TYPES(sh_serial_types)

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

Do you have a view on when we should:
 * use DEFINE_TYPES like this
 * longhand write out a type_init() and a function
   (maybe only if you need to programmatically construct
   the type structs, e.g. in a loop ?)
 * use OBJECT_DEFINE_TYPE()
?

Currently docs/devel/qom.rst leads off with the
"write it out longhand" approach, then mentions
DEFINE_TYPES for if you want to register "several
static types", and finally documents the OBJECT_DECLARE
and OBJECT_DEFINE families of macros.

thanks
-- PMM


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

end of thread, other threads:[~2025-02-06 15:08 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-24 17:50 [PATCH 0/2] hw/char/sh_serial: QOM housekeeping Philippe Mathieu-Daudé
2025-01-24 17:50 ` [PATCH 1/2] hw/char/sh_serial: Delete fifo_timeout_timer in DeviceUnrealize Philippe Mathieu-Daudé
2025-02-06 14:57   ` Peter Maydell
2025-01-24 17:50 ` [PATCH 2/2] hw/char/sh_serial: Convert to TypeInfo Philippe Mathieu-Daudé
2025-01-24 18:07   ` Philippe Mathieu-Daudé
2025-02-06 15:07   ` Peter Maydell
2025-02-06 11:55 ` [PATCH 0/2] hw/char/sh_serial: QOM housekeeping Philippe Mathieu-Daudé

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).