[PATCH 19/37] audio: simplify audio_init()

marcandre.lureau@redhat.com posted 37 patches 2 weeks, 3 days ago
Maintainers: Gerd Hoffmann <kraxel@redhat.com>, Christian Schoenebeck <qemu_oss@crudebyte.com>, "Marc-André Lureau" <marcandre.lureau@redhat.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>, Thomas Huth <huth@tuxfamily.org>, Alexandre Ratchov <alex@caoua.org>, Laurent Vivier <laurent@vivier.eu>, Manos Pitsidianakis <manos.pitsidianakis@linaro.org>, "Michael S. Tsirkin" <mst@redhat.com>, Alistair Francis <alistair@alistair23.me>, "Edgar E. Iglesias" <edgar.iglesias@gmail.com>, Peter Maydell <peter.maydell@linaro.org>, Paolo Bonzini <pbonzini@redhat.com>, "Alex Bennée" <alex.bennee@linaro.org>, "Daniel P. Berrangé" <berrange@redhat.com>, Eduardo Habkost <eduardo@habkost.net>, John Snow <jsnow@redhat.com>, Cleber Rosa <crosa@redhat.com>
[PATCH 19/37] audio: simplify audio_init()
Posted by marcandre.lureau@redhat.com 2 weeks, 3 days ago
From: Marc-André Lureau <marcandre.lureau@redhat.com>

Factorize looking up the driver in audio_driver_init()

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 audio/audio.c | 66 ++++++++++++++++++++++-----------------------------
 1 file changed, 29 insertions(+), 37 deletions(-)

diff --git a/audio/audio.c b/audio/audio.c
index 1c83dd4ce6d..2a067075b0c 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -1561,11 +1561,18 @@ size_t audio_generic_read(HWVoiceIn *hw, void *buf, size_t size)
     return total;
 }
 
-static bool audio_driver_do_init(AudioMixengBackend *s, struct audio_driver *drv,
-                                 Audiodev *dev, Error **errp)
+static bool audio_driver_do_init(AudioMixengBackend *d, Error **errp)
 {
-    s->drv_opaque = drv->init(dev, errp);
-    if (!s->drv_opaque) {
+    const char *drvname = AudiodevDriver_str(d->dev->driver);
+    struct audio_driver *drv = audio_driver_lookup(drvname);
+
+    if (!drv) {
+        error_setg(errp, "Unknown audio driver `%s'", drvname);
+        return false;
+    }
+
+    d->drv_opaque = drv->init(d->dev, errp);
+    if (!d->drv_opaque) {
         return false;
     }
 
@@ -1578,14 +1585,14 @@ static bool audio_driver_do_init(AudioMixengBackend *s, struct audio_driver *drv
         drv->pcm_ops->put_buffer_out = audio_generic_put_buffer_out;
     }
 
-    audio_init_nb_voices_out(s, drv, 1);
-    audio_init_nb_voices_in(s, drv, 0);
-    s->drv = drv;
+    audio_init_nb_voices_out(d, drv, 1);
+    audio_init_nb_voices_in(d, drv, 0);
+    d->drv = drv;
 
-    if (dev->timer_period <= 0) {
-        s->period_ticks = 1;
+    if (d->dev->timer_period <= 0) {
+        d->period_ticks = 1;
     } else {
-        s->period_ticks = dev->timer_period * (int64_t)SCALE_US;
+        d->period_ticks = d->dev->timer_period * (int64_t)SCALE_US;
     }
 
     return true;
@@ -1785,24 +1792,12 @@ void audio_create_default_audiodevs(void)
  */
 static AudioBackend *audio_init(Audiodev *dev, Error **errp)
 {
-    int done = 0;
-    const char *drvname;
-    AudioMixengBackend *s;
-    struct audio_driver *driver;
+    AudioMixengBackend *d;
 
-    s = AUDIO_MIXENG_BACKEND(object_new(TYPE_AUDIO_MIXENG_BACKEND));
-
-    if (dev) {
-        /* -audiodev option */
-        s->dev = dev;
-        drvname = AudiodevDriver_str(dev->driver);
-        driver = audio_driver_lookup(drvname);
-        if (driver) {
-            done = audio_driver_do_init(s, driver, dev, errp);
-        } else {
-            error_setg(errp, "Unknown audio driver `%s'", drvname);
-        }
-        if (!done) {
+    d = AUDIO_MIXENG_BACKEND(object_new(TYPE_AUDIO_MIXENG_BACKEND));
+    d->dev = dev;
+    if (d->dev) {
+        if (!audio_driver_do_init(d, errp)) {
             goto out;
         }
     } else {
@@ -1813,27 +1808,24 @@ static AudioBackend *audio_init(Audiodev *dev, Error **errp)
                 error_setg(errp, "no default audio driver available");
                 goto out;
             }
-            s->dev = dev = e->dev;
+            d->dev = e->dev;
             QSIMPLEQ_REMOVE_HEAD(&default_audiodevs, next);
             g_free(e);
-            drvname = AudiodevDriver_str(dev->driver);
-            driver = audio_driver_lookup(drvname);
-            if (audio_driver_do_init(s, driver, dev, NULL)) {
+            if (audio_driver_do_init(d, NULL)) {
                 break;
             }
-            qapi_free_Audiodev(dev);
-            s->dev = NULL;
         }
     }
 
-    if (!object_property_try_add_child(get_audiodevs_root(), dev->id, OBJECT(s), errp)) {
+    if (!object_property_try_add_child(get_audiodevs_root(),
+                                       d->dev->id, OBJECT(d), errp)) {
         goto out;
     }
-    object_unref(s);
-    return AUDIO_BACKEND(s);
+    object_unref(d);
+    return AUDIO_BACKEND(d);
 
 out:
-    object_unref(s);
+    object_unref(d);
     return NULL;
 }
 
-- 
2.52.0


Re: [PATCH 19/37] audio: simplify audio_init()
Posted by Mark Cave-Ayland 5 days, 15 hours ago
On 23/01/2026 07:49, marcandre.lureau@redhat.com wrote:

> From: Marc-André Lureau <marcandre.lureau@redhat.com>
> 
> Factorize looking up the driver in audio_driver_init()
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>   audio/audio.c | 66 ++++++++++++++++++++++-----------------------------
>   1 file changed, 29 insertions(+), 37 deletions(-)
> 
> diff --git a/audio/audio.c b/audio/audio.c
> index 1c83dd4ce6d..2a067075b0c 100644
> --- a/audio/audio.c
> +++ b/audio/audio.c
> @@ -1561,11 +1561,18 @@ size_t audio_generic_read(HWVoiceIn *hw, void *buf, size_t size)
>       return total;
>   }
>   
> -static bool audio_driver_do_init(AudioMixengBackend *s, struct audio_driver *drv,
> -                                 Audiodev *dev, Error **errp)
> +static bool audio_driver_do_init(AudioMixengBackend *d, Error **errp)
>   {
> -    s->drv_opaque = drv->init(dev, errp);
> -    if (!s->drv_opaque) {
> +    const char *drvname = AudiodevDriver_str(d->dev->driver);
> +    struct audio_driver *drv = audio_driver_lookup(drvname);
> +
> +    if (!drv) {
> +        error_setg(errp, "Unknown audio driver `%s'", drvname);
> +        return false;
> +    }
> +
> +    d->drv_opaque = drv->init(d->dev, errp);
> +    if (!d->drv_opaque) {
>           return false;
>       }
>   
> @@ -1578,14 +1585,14 @@ static bool audio_driver_do_init(AudioMixengBackend *s, struct audio_driver *drv
>           drv->pcm_ops->put_buffer_out = audio_generic_put_buffer_out;
>       }
>   
> -    audio_init_nb_voices_out(s, drv, 1);
> -    audio_init_nb_voices_in(s, drv, 0);
> -    s->drv = drv;
> +    audio_init_nb_voices_out(d, drv, 1);
> +    audio_init_nb_voices_in(d, drv, 0);
> +    d->drv = drv;
>   
> -    if (dev->timer_period <= 0) {
> -        s->period_ticks = 1;
> +    if (d->dev->timer_period <= 0) {
> +        d->period_ticks = 1;
>       } else {
> -        s->period_ticks = dev->timer_period * (int64_t)SCALE_US;
> +        d->period_ticks = d->dev->timer_period * (int64_t)SCALE_US;
>       }
>   
>       return true;
> @@ -1785,24 +1792,12 @@ void audio_create_default_audiodevs(void)
>    */
>   static AudioBackend *audio_init(Audiodev *dev, Error **errp)
>   {
> -    int done = 0;
> -    const char *drvname;
> -    AudioMixengBackend *s;
> -    struct audio_driver *driver;
> +    AudioMixengBackend *d;
>   
> -    s = AUDIO_MIXENG_BACKEND(object_new(TYPE_AUDIO_MIXENG_BACKEND));
> -
> -    if (dev) {
> -        /* -audiodev option */
> -        s->dev = dev;
> -        drvname = AudiodevDriver_str(dev->driver);
> -        driver = audio_driver_lookup(drvname);
> -        if (driver) {
> -            done = audio_driver_do_init(s, driver, dev, errp);
> -        } else {
> -            error_setg(errp, "Unknown audio driver `%s'", drvname);
> -        }
> -        if (!done) {
> +    d = AUDIO_MIXENG_BACKEND(object_new(TYPE_AUDIO_MIXENG_BACKEND));
> +    d->dev = dev;
> +    if (d->dev) {
> +        if (!audio_driver_do_init(d, errp)) {
>               goto out;
>           }
>       } else {
> @@ -1813,27 +1808,24 @@ static AudioBackend *audio_init(Audiodev *dev, Error **errp)
>                   error_setg(errp, "no default audio driver available");
>                   goto out;
>               }
> -            s->dev = dev = e->dev;
> +            d->dev = e->dev;
>               QSIMPLEQ_REMOVE_HEAD(&default_audiodevs, next);
>               g_free(e);
> -            drvname = AudiodevDriver_str(dev->driver);
> -            driver = audio_driver_lookup(drvname);
> -            if (audio_driver_do_init(s, driver, dev, NULL)) {
> +            if (audio_driver_do_init(d, NULL)) {
>                   break;
>               }
> -            qapi_free_Audiodev(dev);
> -            s->dev = NULL;
>           }
>       }
>   
> -    if (!object_property_try_add_child(get_audiodevs_root(), dev->id, OBJECT(s), errp)) {
> +    if (!object_property_try_add_child(get_audiodevs_root(),
> +                                       d->dev->id, OBJECT(d), errp)) {
>           goto out;
>       }
> -    object_unref(s);
> -    return AUDIO_BACKEND(s);
> +    object_unref(d);
> +    return AUDIO_BACKEND(d);
>   
>   out:
> -    object_unref(s);
> +    object_unref(d);
>       return NULL;
>   }

Reviewed-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>


ATB,

Mark.