On 16/09/26, Pierrick Bouvier wrote:
> On 9/16/2026 2:19 AM, Anton Johansson wrote:
> > Allows specifying is_available when defining machines using convenience
> > macros.  Also introduces DEFINE_MACHINE_WITH_GUARD() replacing
> > DEFINE_MACHINE() for machines that need to specify is_available.
> > 
> > Signed-off-by: Anton Johansson <[email protected]>
> > ---
> >  include/hw/core/boards.h | 11 ++++++++---
> >  hw/arm/bananapi_m2u.c    |  2 +-
> >  hw/arm/cubieboard.c      |  2 +-
> >  hw/arm/imx8mm-evk.c      |  2 +-
> >  hw/arm/integratorcp.c    |  2 +-
> >  hw/arm/mcimx7d-sabre.c   |  2 +-
> >  hw/arm/orangepi.c        |  2 +-
> >  hw/ppc/pegasos.c         |  3 ++-
> >  8 files changed, 16 insertions(+), 10 deletions(-)
> > 
> > diff --git a/include/hw/core/boards.h b/include/hw/core/boards.h
> > index dba465efc2..8c35516622 100644
> > --- a/include/hw/core/boards.h
> > +++ b/include/hw/core/boards.h
> > @@ -514,7 +514,7 @@ struct MachineState {
> >   */
> >  
> >  #define DEFINE_MACHINE_EXTENDED(namestr, PARENT_NAME, InstanceName, \
> > -                                machine_initfn, ABSTRACT, ifaces...) \
> > +                                machine_initfn, ABSTRACT, availfn, 
> > ifaces...) \
> >      static void machine_initfn##_class_init(ObjectClass *oc, const void 
> > *data) \
> >      { \
> >          MachineClass *mc = MACHINE_CLASS(oc); \
> > @@ -526,6 +526,7 @@ struct MachineState {
> >          .class_init = machine_initfn##_class_init, \
> >          .instance_size = sizeof(InstanceName), \
> >          .abstract = ABSTRACT, \
> > +        .is_available = availfn, \
> >          .interfaces = ifaces, \
> >      }; \
> >      static void machine_initfn##_register_types(void) \
> > @@ -536,11 +537,15 @@ struct MachineState {
> >  
> >  #define DEFINE_MACHINE(namestr, machine_initfn) \
> >      DEFINE_MACHINE_EXTENDED(namestr, MACHINE, MachineState, 
> > machine_initfn, \
> > -                            false, NULL)
> > +                            false, NULL, NULL)
> > +
> > +#define DEFINE_MACHINE_WITH_GUARD(namestr, machine_initfn, availfn) \
> > +    DEFINE_MACHINE_EXTENDED(namestr, MACHINE, MachineState, 
> > machine_initfn, \
> > +                            false, availfn, NULL)
> >  
> >  #define DEFINE_MACHINE_WITH_INTERFACE_ARRAY(namestr, machine_initfn, 
> > ifaces...)\
> >      DEFINE_MACHINE_EXTENDED(namestr, MACHINE, MachineState, 
> > machine_initfn, \
> > -                            false, ifaces)
> > +                            false, NULL, ifaces)
> >  
> >  #define DEFINE_MACHINE_WITH_INTERFACES(namestr, machine_initfn, ...) \
> >      DEFINE_MACHINE_WITH_INTERFACE_ARRAY(namestr, machine_initfn, \
> > diff --git a/hw/arm/bananapi_m2u.c b/hw/arm/bananapi_m2u.c
> > index 8f59111fd4..7b86986efb 100644
> > --- a/hw/arm/bananapi_m2u.c
> > +++ b/hw/arm/bananapi_m2u.c
> > @@ -153,4 +153,4 @@ static void bpim2u_machine_init(MachineClass *mc)
> >  }
> >  
> >  DEFINE_MACHINE_EXTENDED("bpim2u", MACHINE, Bpim2uMachineState,
> > -                        bpim2u_machine_init, false, NULL)
> > +                        bpim2u_machine_init, false, NULL, NULL)
> > diff --git a/hw/arm/cubieboard.c b/hw/arm/cubieboard.c
> > index ae27056938..da45bb2be5 100644
> > --- a/hw/arm/cubieboard.c
> > +++ b/hw/arm/cubieboard.c
> > @@ -134,4 +134,4 @@ static void cubieboard_machine_init(MachineClass *mc)
> >  
> >  DEFINE_MACHINE_EXTENDED("cubieboard", MACHINE, CubieboardMachineState,
> >                          cubieboard_machine_init, false,
> > -                        NULL)
> > +                        NULL, NULL)
> > diff --git a/hw/arm/imx8mm-evk.c b/hw/arm/imx8mm-evk.c
> > index 8a5737502f..68526c0e43 100644
> > --- a/hw/arm/imx8mm-evk.c
> > +++ b/hw/arm/imx8mm-evk.c
> > @@ -135,4 +135,4 @@ static void imx8mm_evk_machine_init(MachineClass *mc)
> >  
> >  DEFINE_MACHINE_EXTENDED("imx8mm-evk", MACHINE, Imx8mmEvkMachineState,
> >                          imx8mm_evk_machine_init, false,
> > -                        NULL)
> > +                        NULL, NULL)
> > diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c
> > index 382ea7850d..6314bbb6c1 100644
> > --- a/hw/arm/integratorcp.c
> > +++ b/hw/arm/integratorcp.c
> > @@ -705,7 +705,7 @@ static void integratorcp_machine_init(MachineClass *mc)
> >  
> >  DEFINE_MACHINE_EXTENDED("integratorcp", MACHINE, IntegratorcpMachineState,
> >                          integratorcp_machine_init, false,
> > -                        NULL)
> > +                        NULL, NULL)
> >  
> >  static const Property core_properties[] = {
> >      DEFINE_PROP_UINT32("memsz", IntegratorCMState, memsz, 0),
> > diff --git a/hw/arm/mcimx7d-sabre.c b/hw/arm/mcimx7d-sabre.c
> > index db8a62e5f6..2c884b5c78 100644
> > --- a/hw/arm/mcimx7d-sabre.c
> > +++ b/hw/arm/mcimx7d-sabre.c
> > @@ -87,4 +87,4 @@ static void mcimx7d_sabre_machine_init(MachineClass *mc)
> >  
> >  DEFINE_MACHINE_EXTENDED("mcimx7d-sabre", MACHINE, Mcimx7dSabreMachineState,
> >                          mcimx7d_sabre_machine_init, false,
> > -                        NULL)
> > +                        NULL, NULL)
> > diff --git a/hw/arm/orangepi.c b/hw/arm/orangepi.c
> > index 7a19732f5d..87ed2ef4b6 100644
> > --- a/hw/arm/orangepi.c
> > +++ b/hw/arm/orangepi.c
> > @@ -134,4 +134,4 @@ static void orangepi_machine_init(MachineClass *mc)
> >  
> >  DEFINE_MACHINE_EXTENDED("orangepi-pc", MACHINE, OrangePiMachineState,
> >                          orangepi_machine_init, false,
> > -                        NULL)
> > +                        NULL, NULL)
> > diff --git a/hw/ppc/pegasos.c b/hw/ppc/pegasos.c
> > index 9d7e279123..cbff8bb59d 100644
> > --- a/hw/ppc/pegasos.c
> > +++ b/hw/ppc/pegasos.c
> > @@ -788,7 +788,8 @@ static void pegasos2_machine_class_init(ObjectClass 
> > *oc, const void *data)
> >  }
> >  
> >  DEFINE_MACHINE_EXTENDED("pegasos", MACHINE, PegasosMachineState,
> > -                        pegasos_machine_init, true, (const 
> > InterfaceInfo[]) {
> > +                        pegasos_machine_init, true, NULL,
> > +                        (const InterfaceInfo[]) {
> >                          { TYPE_PPC_VIRTUAL_HYPERVISOR },
> >                          { TYPE_VOF_MACHINE_IF }, { } })
> >  
> > 
> 
> Since full filtering concept was dropped for now, and since
> there are not so many usage of DEFINE_MACHINE in the codebase, maybe we
> can simply do a full declaration when a guard need to be set.
> 
> In current series, only one occurence would need this: boston-aia.
> 
> Regards,
> Pierrick

Good point I'll drop this patch then and just expand fully for
boston-aia then, similar to other targets, thanks!:)

-- 
Anton Johansson
rev.ng Labs Srl.

Reply via email to