[PATCH v2 14/15] qdev: Base object creation on QDict rather than QemuOpts

Laurent Vivier lvivier at redhat.com
Fri Oct 8 15:17:29 UTC 2021


On 08/10/2021 15:34, Kevin Wolf wrote:
> QDicts are both what QMP natively uses and what the keyval parser
> produces. Going through QemuOpts isn't useful for either one, so switch
> the main device creation function to QDicts. By sharing more code with
> the -object/object-add code path, we can even reduce the code size a
> bit.
> 
> This commit doesn't remove the detour through QemuOpts from any code
> path yet, but it allows the following commits to do so.
> 
> Signed-off-by: Kevin Wolf <kwolf at redhat.com>
> ---
>   include/hw/qdev-core.h         | 11 +++---
>   include/hw/virtio/virtio-net.h |  3 +-
>   include/monitor/qdev.h         |  2 +
>   hw/core/qdev.c                 |  7 ++--
>   hw/net/virtio-net.c            | 23 +++++++-----
>   hw/vfio/pci.c                  |  4 +-
>   softmmu/qdev-monitor.c         | 69 +++++++++++++++-------------------
>   7 files changed, 60 insertions(+), 59 deletions(-)
> 
> diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
> index 74d8b614a7..910042c650 100644
> --- a/include/hw/qdev-core.h
> +++ b/include/hw/qdev-core.h
> @@ -180,7 +180,7 @@ struct DeviceState {
>       char *canonical_path;
>       bool realized;
>       bool pending_deleted_event;
> -    QemuOpts *opts;
> +    QDict *opts;
>       int hotplugged;
>       bool allow_unplug_during_migration;
>       BusState *parent_bus;
> @@ -205,8 +205,8 @@ struct DeviceListener {
>        * On errors, it returns false and errp is set. Device creation
>        * should fail in this case.
>        */
> -    bool (*hide_device)(DeviceListener *listener, QemuOpts *device_opts,
> -                        Error **errp);
> +    bool (*hide_device)(DeviceListener *listener, const QDict *device_opts,
> +                        bool from_json, Error **errp);
>       QTAILQ_ENTRY(DeviceListener) link;
>   };
>   
> @@ -835,13 +835,14 @@ void device_listener_unregister(DeviceListener *listener);
>   
>   /**
>    * @qdev_should_hide_device:
> - * @opts: QemuOpts as passed on cmdline.
> + * @opts: options QDict > + * @from_json: true if @opts entries are typed, false for all strings

Add the errp here too:

     * @errp: pointer to error object

>    *
>    * Check if a device should be added.
>    * When a device is added via qdev_device_add() this will be called,
>    * and return if the device should be added now or not.
>    */
> -bool qdev_should_hide_device(QemuOpts *opts, Error **errp);
> +bool qdev_should_hide_device(const QDict *opts, bool from_json, Error **errp);
>   
>   typedef enum MachineInitPhase {
>       /* current_machine is NULL.  */

Thank you to have added the errp pointer in the hide_device helpers, it helps in my series.

Laurent




More information about the libvir-list mailing list