qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v3 1/3] machine: add device_type_is_dynamic_sysbus function


From: Alistair Francis
Subject: Re: [PATCH v3 1/3] machine: add device_type_is_dynamic_sysbus function
Date: Mon, 1 Nov 2021 09:36:53 +1000

On Sat, Oct 30, 2021 at 12:26 AM Damien Hedde
<damien.hedde@greensocs.com> wrote:
>
> Right now the allowance check for adding a sysbus device using
> -device cli option (or device_add qmp command) is done well after
> the device has been created. It is done during the machine init done
> notifier: machine_init_notify() in hw/core/machine.c
>
> This new function will allow us to do the check at the right time and
> issue an error if it fails.
>
> Also make device_is_dynamic_sysbus() use the new function.
>
> Signed-off-by: Damien Hedde <damien.hedde@greensocs.com>

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>

Alistair

> ---
> Cc: Ani Sinha <ani@anisinha.ca>
>
> v3: change the function name (Ani)
> ---
>  include/hw/boards.h | 15 +++++++++++++++
>  hw/core/machine.c   | 13 ++++++++++---
>  2 files changed, 25 insertions(+), 3 deletions(-)
>
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index 5adbcbb99b..85adf660c1 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -51,6 +51,21 @@ void machine_set_cpu_numa_node(MachineState *machine,
>   */
>  void machine_class_allow_dynamic_sysbus_dev(MachineClass *mc, const char 
> *type);
>
> +/**
> + * device_type_is_dynamic_sysbus: Check if type is an allowed sysbus device
> + * type for the machine class.
> + * @mc: Machine class
> + * @type: type to check (should be a subtype of TYPE_SYS_BUS_DEVICE)
> + *
> + * Returns: true if @type is a type in the machine's list of
> + * dynamically pluggable sysbus devices; otherwise false.
> + *
> + * Check if the QOM type @type is in the list of allowed sysbus device
> + * types (see machine_class_allowed_dynamic_sysbus_dev()).
> + * Note that if @type has a parent type in the list, it is allowed too.
> + */
> +bool device_type_is_dynamic_sysbus(MachineClass *mc, const char *type);
> +
>  /**
>   * device_is_dynamic_sysbus: test whether device is a dynamic sysbus device
>   * @mc: Machine class
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index b8d95eec32..0d20104796 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -548,18 +548,25 @@ void 
> machine_class_allow_dynamic_sysbus_dev(MachineClass *mc, const char *type)
>
>  bool device_is_dynamic_sysbus(MachineClass *mc, DeviceState *dev)
>  {
> -    bool allowed = false;
> -    strList *wl;
>      Object *obj = OBJECT(dev);
>
>      if (!object_dynamic_cast(obj, TYPE_SYS_BUS_DEVICE)) {
>          return false;
>      }
>
> +    return device_type_is_dynamic_sysbus(mc, object_get_typename(obj));
> +}
> +
> +bool device_type_is_dynamic_sysbus(MachineClass *mc, const char *type)
> +{
> +    bool allowed = false;
> +    strList *wl;
> +    ObjectClass *klass = object_class_by_name(type);
> +
>      for (wl = mc->allowed_dynamic_sysbus_devices;
>           !allowed && wl;
>           wl = wl->next) {
> -        allowed |= !!object_dynamic_cast(obj, wl->value);
> +        allowed |= !!object_class_dynamic_cast(klass, wl->value);
>      }
>
>      return allowed;
> --
> 2.33.0
>
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]