On 7/29/24 10:22 AM, David Hildenbrand wrote: >>>> The simplest way to address 4 is to tack 'if': 'TARGET_S390X' to >>>> @deprecated-props. >>>> >>> >>> diff --git a/qapi/machine-target.json b/qapi/machine-target.json >>> index 09dec2b9bb..0be95d559c 100644 >>> --- a/qapi/machine-target.json >>> +++ b/qapi/machine-target.json >>> @@ -253,7 +253,7 @@ >>> ## >>> { 'struct': 'CpuModelExpansionInfo', >>> 'data': { 'model': 'CpuModelInfo', >>> - '*deprecated-props': ['str'] }, >>> + '*deprecated-props' : { 'type': ['str'], 'if': 'TARGET_S390X' >>> } }, >>> 'if': { 'any': [ 'TARGET_S390X', >>> 'TARGET_I386', >>> 'TARGET_ARM', >>> >>> >>> Should do the trick, right? >> >> Yes. Break the line before 'if', please. > > Ack > > [...] > >> >> Questions? > > As clear as it can get, thanks! :) > > That would leave us with: > > > From 8be206168e31b9c3ff89e2b99c57a85d30150194 Mon Sep 17 00:00:00 2001 > From: Collin Walling <wall...@linux.ibm.com> > Date: Fri, 26 Jul 2024 16:36:46 -0400 > Subject: [PATCH] target/s390x: move @deprecated-props to CpuModelExpansion > Info > > CpuModelInfo is used both as command argument and in command > returns. > > Its @deprecated-props array does not make any sense in arguments, > and is silently ignored. We actually want it only as return value > of query-cpu-model-expansion. > > Move it from CpuModelInfo to CpuModelExpansionType, and document > its dependence on expansion type property. > > This was identified late during review [1] and we have to fix it up > while it's not part of an official QEMU release yet. > > [1] > https://lore.kernel.org/qemu-devel/20240719181741.35146-1-wall...@linux.ibm.com/ > > Message-ID: <20240726203646.20279-1-wall...@linux.ibm.com> > Fixes: eed0e8ffa38f ("target/s390x: filter deprecated properties based on > model expansion type") > Signed-off-by: Collin Walling <wall...@linux.ibm.com> > [ david: - add "Fixes", adjust description, reference v3 instead > - make property s390x-only and non-optional ] > Signed-off-by: David Hildenbrand <da...@redhat.com> > --- > qapi/machine-target.json | 19 +++++++++++-------- > target/s390x/cpu_models_sysemu.c | 29 ++++++++++++++++++----------- > 2 files changed, 29 insertions(+), 19 deletions(-) > > diff --git a/qapi/machine-target.json b/qapi/machine-target.json > index a552e2b0ce..00bbecc905 100644 > --- a/qapi/machine-target.json > +++ b/qapi/machine-target.json > @@ -20,17 +20,11 @@ > # > # @props: a dictionary of QOM properties to be applied > # > -# @deprecated-props: a list of properties that are flagged as deprecated > -# by the CPU vendor. These properties are either a subset of the > -# properties enabled on the CPU model, or a set of properties > -# deprecated across all models for the architecture. > -# > # Since: 2.8 > ## > { 'struct': 'CpuModelInfo', > 'data': { 'name': 'str', > - '*props': 'any', > - '*deprecated-props': ['str'] } } > + '*props': 'any' } } > > ## > # @CpuModelExpansionType: > @@ -248,10 +242,19 @@ > # > # @model: the expanded CpuModelInfo. > # > +# @deprecated-props: a list of properties that are flagged as deprecated > +# by the CPU vendor. The list depends on the CpuModelExpansionType: > +# "static" properties are a subset of the enabled-properties for > +# the expanded model; "full" properties are a set of properties > +# that are deprecated across all models for the architecture. > +# (since: 9.1). > +# > # Since: 2.8 > ## > { 'struct': 'CpuModelExpansionInfo', > - 'data': { 'model': 'CpuModelInfo' }, > + 'data': { 'model': 'CpuModelInfo', > + 'deprecated-props' : { 'type': ['str'], > + 'if': 'TARGET_S390X' } }, > 'if': { 'any': [ 'TARGET_S390X', > 'TARGET_I386', > 'TARGET_ARM', > diff --git a/target/s390x/cpu_models_sysemu.c > b/target/s390x/cpu_models_sysemu.c > index 94dd798b4c..6c8e5c7260 100644 > --- a/target/s390x/cpu_models_sysemu.c > +++ b/target/s390x/cpu_models_sysemu.c > @@ -174,15 +174,11 @@ static void cpu_info_from_model(CpuModelInfo *info, > const S390CPUModel *model, > bool delta_changes) > { > QDict *qdict = qdict_new(); > - S390FeatBitmap bitmap, deprecated; > + S390FeatBitmap bitmap; > > /* always fallback to the static base model */ > info->name = g_strdup_printf("%s-base", model->def->name); > > - /* features flagged as deprecated */ > - bitmap_zero(deprecated, S390_FEAT_MAX); > - s390_get_deprecated_features(deprecated); > - > if (delta_changes) { > /* features deleted from the base feature set */ > bitmap_andnot(bitmap, model->def->base_feat, model->features, > @@ -197,9 +193,6 @@ static void cpu_info_from_model(CpuModelInfo *info, const > S390CPUModel *model, > if (!bitmap_empty(bitmap, S390_FEAT_MAX)) { > s390_feat_bitmap_to_ascii(bitmap, qdict, > qdict_add_enabled_feat); > } > - > - /* deprecated features that are a subset of the model's enabled > features */ > - bitmap_and(deprecated, deprecated, model->features, S390_FEAT_MAX); > } else { > /* expand all features */ > s390_feat_bitmap_to_ascii(model->features, qdict, > @@ -213,9 +206,6 @@ static void cpu_info_from_model(CpuModelInfo *info, const > S390CPUModel *model, > } else { > info->props = QOBJECT(qdict); > } > - > - s390_feat_bitmap_to_ascii(deprecated, &info->deprecated_props, > list_add_feat); > - info->has_deprecated_props = !!info->deprecated_props; > } > > CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType > type, > @@ -226,6 +216,7 @@ CpuModelExpansionInfo > *qmp_query_cpu_model_expansion(CpuModelExpansionType type, > CpuModelExpansionInfo *expansion_info = NULL; > S390CPUModel s390_model; > bool delta_changes = false; > + S390FeatBitmap deprecated_feats; > > /* convert it to our internal representation */ > cpu_model_from_info(&s390_model, model, "model", &err); > @@ -245,6 +236,22 @@ CpuModelExpansionInfo > *qmp_query_cpu_model_expansion(CpuModelExpansionType type, > expansion_info = g_new0(CpuModelExpansionInfo, 1); > expansion_info->model = g_malloc0(sizeof(*expansion_info->model)); > cpu_info_from_model(expansion_info->model, &s390_model, delta_changes); > + > + /* populated list of deprecated features */
s/populated/populate > + bitmap_zero(deprecated_feats, S390_FEAT_MAX); > + s390_get_deprecated_features(deprecated_feats); > + > + if (delta_changes) { > + /* > + * Only populate deprecated features that are a > + * subset of the features enabled on the CPU model. > + */ > + bitmap_and(deprecated_feats, deprecated_feats, > + s390_model.features, S390_FEAT_MAX); > + } > + > + s390_feat_bitmap_to_ascii(deprecated_feats, > + &expansion_info->deprecated_props, > list_add_feat); > return expansion_info; > } > Eh, just a small nit above due to a typo I made. Other than that, gave it all another run-through just in case and everything is still good. -- Regards, Collin