Re: [RFC PATCH 004/134] sysbus: Make sysbus_create_simple()/_varargs() take a QOM parent

Philippe Mathieu-Daudé <[email protected]>
Newsgroups org.nongnu.qemu-riscv,org.nongnu.qemu-arm,org.nongnu.qemu-devel
Message-ID <[email protected]>
On 12/7/26 00:34, Alexander Graf wrote:
> Sysbus is by far the largest producer of orphaned onboard devices:
> of the ~1180 unparented device creation sites in the tree, well over
> half go through sysbus_create_simple(), sysbus_create_varargs(), or
> qdev_new_orphan()+sysbus_realize_and_unref() open-coded.
> 
> Apply the same rename-and-reintroduce treatment as qdev_new():
> mechanically rename the existing helpers to *_orphan() and
> reintroduce the short names with a leading (parent, id, ...) pair
> that plumbs down to the new qdev_new().  The parented versions call
> sysbus_realize() (not _and_unref) since the child<> property already
> holds the sole reference.
> 
> The mechanical rename part is generated by
> 
>    spatch --sp-file \
>        scripts/coccinelle/qom-parent/sysbus-create-orphan.cocci \
>        --in-place --include-headers --dir .
> 
> or equivalently
> 
>    git ls-files '*.[ch]' '*.[ch].inc' '*.rst' '*.py' | \
>        grep -v '^subprojects/' | \
>        xargs sed -i \
>            's/\bsysbus_create_simple\b/sysbus_create_simple_orphan/g;
>             s/\bsysbus_create_varargs\b/sysbus_create_varargs_orphan/g'
> 
> Assisted-by: Kiro
> Signed-off-by: Alexander Graf <[email protected]>
> ---
>   hw/arm/allwinner-h3.c                         | 16 ++++-----
>   hw/arm/collie.c                               |  2 +-
>   hw/arm/exynos4210.c                           | 14 ++++----
>   hw/arm/fsl-imx6.c                             |  2 +-
>   hw/arm/integratorcp.c                         | 18 +++++-----
>   hw/arm/mps2.c                                 |  6 ++--
>   hw/arm/musicpal.c                             | 18 +++++-----
>   hw/arm/npcm7xx.c                              |  2 +-
>   hw/arm/realview.c                             | 24 ++++++-------
>   hw/arm/sbsa-ref.c                             |  6 ++--
>   hw/arm/stellaris.c                            |  8 ++---
>   hw/arm/strongarm.c                            | 10 +++---
>   hw/arm/versatilepb.c                          | 28 +++++++--------
>   hw/arm/vexpress.c                             | 20 +++++------
>   hw/arm/virt.c                                 |  8 ++---
>   hw/arm/xilinx_zynq.c                          | 10 +++---
>   hw/core/sysbus.c                              | 35 ++++++++++++++++++-
>   hw/i386/kvm/clock.c                           |  2 +-
>   hw/i386/kvm/xen_evtchn.c                      |  2 +-
>   hw/i386/kvm/xen_gnttab.c                      |  2 +-
>   hw/i386/kvm/xen_overlay.c                     |  2 +-
>   hw/i386/kvm/xen_primary_console.c             |  2 +-
>   hw/i386/kvm/xen_xenstore.c                    |  2 +-
>   hw/i386/microvm.c                             |  2 +-
>   hw/intc/apic_common.c                         |  2 +-
>   hw/loongarch/virt.c                           |  2 +-
>   hw/m68k/next-cube.c                           |  4 +--
>   hw/m68k/virt.c                                |  2 +-
>   hw/mips/jazz.c                                |  2 +-
>   hw/mips/loongson3_virt.c                      |  2 +-
>   hw/or1k/virt.c                                |  2 +-
>   hw/ppc/amigaone.c                             |  2 +-
>   hw/ppc/e500.c                                 |  2 +-
>   hw/ppc/pegasos.c                              |  4 +--
>   hw/ppc/ppc440_bamboo.c                        |  2 +-
>   hw/ppc/sam460ex.c                             |  8 ++---
>   hw/riscv/virt.c                               |  4 +--
>   hw/sparc/sun4m.c                              |  2 +-
>   hw/vmapple/vmapple.c                          |  4 +--
>   hw/xen/xen-pvh-common.c                       |  2 +-
>   include/hw/core/sysbus.h                      | 32 ++++++++++++++---
>   .../qom-parent/sysbus-create-orphan.cocci     | 18 ++++++++++
>   42 files changed, 206 insertions(+), 131 deletions(-)
>   create mode 100644 scripts/coccinelle/qom-parent/sysbus-create-orphan.cocci


> diff --git a/include/hw/core/sysbus.h b/include/hw/core/sysbus.h
> index f3c4259d29..7737c959c5 100644
> --- a/include/hw/core/sysbus.h
> +++ b/include/hw/core/sysbus.h
> @@ -91,15 +91,39 @@ bool sysbus_realize_and_unref(SysBusDevice *dev, Error **errp);
>   /* Call func for every dynamically created sysbus device in the system */
>   void foreach_dynamic_sysbus_device(FindSysbusDeviceFunc *func, void *opaque);
>   
> -/* Legacy helper function for creating devices.  */
> -DeviceState *sysbus_create_varargs(const char *name,
> +/**
> + * sysbus_create_varargs: Create, parent and realize a sysbus device
> + * @parent: the QOM parent (usually the machine or containing device)
> + * @id: child<> property name
> + * @type: sysbus device type to create
> + * @addr: MMIO region 0 address, or -1 for none
> + * @...: NULL-terminated list of qemu_irq to connect
> + *
> + * Create a sysbus device via qdev_new(@parent, @id, @type), realize
> + * it, optionally map MMIO region 0 at @addr, and connect the given
> + * IRQs.  The returned device is owned by @parent.
> + */
> +DeviceState *sysbus_create_varargs(Object *parent, const char *id,
> +                                   const char *type, hwaddr addr, ...);
> +
> +static inline DeviceState *sysbus_create_simple(Object *parent,

Both are legacy. Updating the doc:
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>

> +                                                 const char *id,
> +                                                 const char *type,
> +                                                 hwaddr addr,
> +                                                 qemu_irq irq)
> +{
> +    return sysbus_create_varargs(parent, id, type, addr, irq, NULL);
> +}
> +
> +/* Legacy helper function for creating unparented devices.  */
> +DeviceState *sysbus_create_varargs_orphan(const char *name,
>                                    hwaddr addr, ...);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.