On 10/05/2017 06:24 PM, Igor Mammedov wrote:
> pnv core type definition doesn't have any fields that
> require it to be defined at runtime. So replace code
> that fills in TypeInfo at runtime with static TypeInfo
> array that does the same at complie time.

This is much better.

> Signed-off-by: Igor Mammedov <imamm...@redhat.com>

Reviewed-by: Cédric Le Goater <c...@kaod.org>

Thanks,

C.

> ---
>  hw/ppc/pnv_core.c | 48 ++++++++++++++++++++----------------------------
>  1 file changed, 20 insertions(+), 28 deletions(-)
> 
> diff --git a/hw/ppc/pnv_core.c b/hw/ppc/pnv_core.c
> index acdfa17..000c87e 100644
> --- a/hw/ppc/pnv_core.c
> +++ b/hw/ppc/pnv_core.c
> @@ -225,38 +225,30 @@ static void pnv_core_class_init(ObjectClass *oc, void 
> *data)
>      dc->props = pnv_core_properties;
>  }
>  
> -static const TypeInfo pnv_core_info = {
> -    .name           = TYPE_PNV_CORE,
> -    .parent         = TYPE_CPU_CORE,
> -    .instance_size  = sizeof(PnvCore),
> -    .class_size     = sizeof(PnvCoreClass),
> -    .class_init = pnv_core_class_init,
> -    .abstract       = true,
> -};
> -
> -static const char *pnv_core_models[] = {
> -    "power8e_v2.1", "power8_v2.0", "power8nvl_v1.0", "power9_v1.0"
> -};
> -
> -static void pnv_core_register_types(void)
> -{
> -    int i ;
> -
> -    type_register_static(&pnv_core_info);
> -    for (i = 0; i < ARRAY_SIZE(pnv_core_models); ++i) {
> -        TypeInfo ti = {
> -            .parent = TYPE_PNV_CORE,
> -            .instance_size = sizeof(PnvCore),
> -        };
> -        ti.name = pnv_core_typename(pnv_core_models[i]);
> -        type_register(&ti);
> -        g_free((void *)ti.name);
> +#define DEFINE_PNV_CORE_TYPE(cpu_model)         \
> +    {                                           \
> +        .parent = TYPE_PNV_CORE,                \
> +        .name = PNV_CORE_TYPE_NAME(cpu_model),  \
>      }
> -}
>  
> -type_init(pnv_core_register_types)
> +static const TypeInfo pnv_core_infos[] = {
> +    {
> +        .name           = TYPE_PNV_CORE,
> +        .parent         = TYPE_CPU_CORE,
> +        .instance_size  = sizeof(PnvCore),
> +        .class_size     = sizeof(PnvCoreClass),
> +        .class_init = pnv_core_class_init,
> +        .abstract       = true,
> +    },
> +    DEFINE_PNV_CORE_TYPE("power8e_v2.1"),
> +    DEFINE_PNV_CORE_TYPE("power8_v2.0"),
> +    DEFINE_PNV_CORE_TYPE("power8nvl_v1.0"),
> +    DEFINE_PNV_CORE_TYPE("power9_v1.0"),
> +};
>  
>  char *pnv_core_typename(const char *model)
>  {
>      return g_strdup_printf(PNV_CORE_TYPE_NAME("%s"), model);
>  }
> +
> +DEFINE_TYPES(pnv_core_infos)
> 


Reply via email to