Message ID | 158274357799.140275.12263135811731647490.stgit@bahia.lan (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ppc: Officially deprecate the CPU "compat" property | expand |
On Wed, Feb 26, 2020 at 07:59:38PM +0100, Greg Kurz wrote: > Server class POWER CPUs have a "compat" property, which was obsoleted > by commit 7843c0d60d and replaced by a "max-cpu-compat" property on the > pseries machine type. A hack was introduced so that passing "compat" to > -cpu would still produce the desired effect, for the sake of backward > compatibility : it strips the "compat" option from the CPU properties > and applies internally it to the pseries machine. The accessors of the > "compat" property were updated to do nothing but warn the user about the > deprecated status when doing something like: > > $ qemu-system-ppc64 -global POWER9-family-powerpc64-cpu.compat=power9 > qemu-system-ppc64: warning: CPU 'compat' property is deprecated and has no > effect; use max-cpu-compat machine property instead > > This was merged during the QEMU 2.10 timeframe, a few weeks before we > formalized our deprecation process. As a consequence, the "compat" > property fell through the cracks and was never listed in the officialy > deprecated features. > > We are now eight QEMU versions later, it is largely time to mention it > in qemu-deprecated.texi. Also, since -global XXX-powerpc64-cpu.compat= > has been emitting warnings since QEMU 2.10 and the usual way of setting > CPU properties is with -cpu, completely remove the "compat" property. > Keep the hack so that -cpu XXX,compat= stays functional some more time, > as required by our deprecation process. > > The now empty powerpc_servercpu_properties[] list which was introduced > for "compat" and never had any other use is removed on the way. We can > re-add it in the future if the need for a server class POWER CPU specific > property arises again. > > Signed-off-by: Greg Kurz <groug@kaod.org> Applied to ppc-for-5.0, thanks. > --- > qemu-deprecated.texi | 6 +++++ > target/ppc/translate_init.inc.c | 44 ++------------------------------------- > 2 files changed, 8 insertions(+), 42 deletions(-) > > diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi > index 66eca3a1dede..56a69400c14a 100644 > --- a/qemu-deprecated.texi > +++ b/qemu-deprecated.texi > @@ -242,6 +242,12 @@ The RISC-V no MMU cpus have been depcreated. The two CPUs: ``rv32imacu-nommu`` a > ``rv64imacu-nommu`` should no longer be used. Instead the MMU status can be specified > via the CPU ``mmu`` option when using the ``rv32`` or ``rv64`` CPUs. > > +@subsection ``compat`` property of server class POWER CPUs (since 5.0) > + > +The ``compat`` property used to set backwards compatibility modes for > +the processor has been deprecated. The ``max-cpu-compat`` property of > +the ``pseries`` machine type should be used instead. > + > @section System emulator devices > > @subsection ide-drive (since 4.2) > diff --git a/target/ppc/translate_init.inc.c b/target/ppc/translate_init.inc.c > index 53995f62eab2..2f7125c51f35 100644 > --- a/target/ppc/translate_init.inc.c > +++ b/target/ppc/translate_init.inc.c > @@ -8492,44 +8492,6 @@ POWERPC_FAMILY(POWER5P)(ObjectClass *oc, void *data) > pcc->l1_icache_size = 0x10000; > } > > -/* > - * The CPU used to have a "compat" property which set the > - * compatibility mode PVR. However, this was conceptually broken - it > - * only makes sense on the pseries machine type (otherwise the guest > - * owns the PCR and can control the compatibility mode itself). It's > - * been replaced with the 'max-cpu-compat' property on the pseries > - * machine type. For backwards compatibility, pseries specially > - * parses the -cpu parameter and converts old compat= parameters into > - * the appropriate machine parameters. This stub implementation of > - * the parameter catches any uses on explicitly created CPUs. > - */ > -static void getset_compat_deprecated(Object *obj, Visitor *v, const char *name, > - void *opaque, Error **errp) > -{ > - QNull *null = NULL; > - > - if (!qtest_enabled()) { > - warn_report("CPU 'compat' property is deprecated and has no effect; " > - "use max-cpu-compat machine property instead"); > - } > - visit_type_null(v, name, &null, NULL); > - qobject_unref(null); > -} > - > -static const PropertyInfo ppc_compat_deprecated_propinfo = { > - .name = "str", > - .description = "compatibility mode (deprecated)", > - .get = getset_compat_deprecated, > - .set = getset_compat_deprecated, > -}; > -static Property powerpc_servercpu_properties[] = { > - { > - .name = "compat", > - .info = &ppc_compat_deprecated_propinfo, > - }, > - DEFINE_PROP_END_OF_LIST(), > -}; > - > static void init_proc_POWER7(CPUPPCState *env) > { > /* Common Registers */ > @@ -8611,7 +8573,6 @@ POWERPC_FAMILY(POWER7)(ObjectClass *oc, void *data) > > dc->fw_name = "PowerPC,POWER7"; > dc->desc = "POWER7"; > - device_class_set_props(dc, powerpc_servercpu_properties); > pcc->pvr_match = ppc_pvr_match_power7; > pcc->pcr_mask = PCR_VEC_DIS | PCR_VSX_DIS | PCR_COMPAT_2_05; > pcc->pcr_supported = PCR_COMPAT_2_06 | PCR_COMPAT_2_05; > @@ -8776,7 +8737,6 @@ POWERPC_FAMILY(POWER8)(ObjectClass *oc, void *data) > > dc->fw_name = "PowerPC,POWER8"; > dc->desc = "POWER8"; > - device_class_set_props(dc, powerpc_servercpu_properties); > pcc->pvr_match = ppc_pvr_match_power8; > pcc->pcr_mask = PCR_TM_DIS | PCR_COMPAT_2_06 | PCR_COMPAT_2_05; > pcc->pcr_supported = PCR_COMPAT_2_07 | PCR_COMPAT_2_06 | PCR_COMPAT_2_05; > @@ -8988,7 +8948,6 @@ POWERPC_FAMILY(POWER9)(ObjectClass *oc, void *data) > > dc->fw_name = "PowerPC,POWER9"; > dc->desc = "POWER9"; > - device_class_set_props(dc, powerpc_servercpu_properties); > pcc->pvr_match = ppc_pvr_match_power9; > pcc->pcr_mask = PCR_COMPAT_2_05 | PCR_COMPAT_2_06 | PCR_COMPAT_2_07; > pcc->pcr_supported = PCR_COMPAT_3_00 | PCR_COMPAT_2_07 | PCR_COMPAT_2_06 | > @@ -9198,7 +9157,6 @@ POWERPC_FAMILY(POWER10)(ObjectClass *oc, void *data) > > dc->fw_name = "PowerPC,POWER10"; > dc->desc = "POWER10"; > - device_class_set_props(dc, powerpc_servercpu_properties); > pcc->pvr_match = ppc_pvr_match_power10; > pcc->pcr_mask = PCR_COMPAT_2_05 | PCR_COMPAT_2_06 | PCR_COMPAT_2_07 | > PCR_COMPAT_3_00; > @@ -10486,6 +10444,8 @@ static void ppc_cpu_parse_featurestr(const char *type, char *features, > *s = '\0'; > for (i = 0; inpieces[i]; i++) { > if (g_str_has_prefix(inpieces[i], "compat=")) { > + warn_report_once("CPU 'compat' property is deprecated; " > + "use max-cpu-compat machine property instead"); > compat_str = inpieces[i]; > continue; > } >
On Thu, 27 Feb 2020 09:46:41 +1100 David Gibson <david@gibson.dropbear.id.au> wrote: > On Wed, Feb 26, 2020 at 07:59:38PM +0100, Greg Kurz wrote: > > Server class POWER CPUs have a "compat" property, which was obsoleted > > by commit 7843c0d60d and replaced by a "max-cpu-compat" property on the > > pseries machine type. A hack was introduced so that passing "compat" to > > -cpu would still produce the desired effect, for the sake of backward > > compatibility : it strips the "compat" option from the CPU properties > > and applies internally it to the pseries machine. The accessors of the > > "compat" property were updated to do nothing but warn the user about the > > deprecated status when doing something like: > > > > $ qemu-system-ppc64 -global POWER9-family-powerpc64-cpu.compat=power9 > > qemu-system-ppc64: warning: CPU 'compat' property is deprecated and has no > > effect; use max-cpu-compat machine property instead > > > > This was merged during the QEMU 2.10 timeframe, a few weeks before we > > formalized our deprecation process. As a consequence, the "compat" > > property fell through the cracks and was never listed in the officialy > > deprecated features. > > > > We are now eight QEMU versions later, it is largely time to mention it > > in qemu-deprecated.texi. Also, since -global XXX-powerpc64-cpu.compat= > > has been emitting warnings since QEMU 2.10 and the usual way of setting > > CPU properties is with -cpu, completely remove the "compat" property. > > Keep the hack so that -cpu XXX,compat= stays functional some more time, > > as required by our deprecation process. > > > > The now empty powerpc_servercpu_properties[] list which was introduced > > for "compat" and never had any other use is removed on the way. We can > > re-add it in the future if the need for a server class POWER CPU specific > > property arises again. > > > > Signed-off-by: Greg Kurz <groug@kaod.org> > > Applied to ppc-for-5.0, thanks. > > > --- > > qemu-deprecated.texi | 6 +++++ I've just discovered that Paolo posted a series to convert documentation to rST. Especially this patch that introduces docs/system/deprecated.rst : https://patchew.org/QEMU/20200226113034.6741-1-pbonzini@redhat.com/20200226113034.6741-18-pbonzini@redhat.com/ Paolo and David, Please advise on the better way to ensure the changes from _my_ patch make it to the rST version. Thanks! > > target/ppc/translate_init.inc.c | 44 ++------------------------------------- > > 2 files changed, 8 insertions(+), 42 deletions(-) > > > > diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi > > index 66eca3a1dede..56a69400c14a 100644 > > --- a/qemu-deprecated.texi > > +++ b/qemu-deprecated.texi > > @@ -242,6 +242,12 @@ The RISC-V no MMU cpus have been depcreated. The two CPUs: ``rv32imacu-nommu`` a > > ``rv64imacu-nommu`` should no longer be used. Instead the MMU status can be specified > > via the CPU ``mmu`` option when using the ``rv32`` or ``rv64`` CPUs. > > > > +@subsection ``compat`` property of server class POWER CPUs (since 5.0) > > + > > +The ``compat`` property used to set backwards compatibility modes for > > +the processor has been deprecated. The ``max-cpu-compat`` property of > > +the ``pseries`` machine type should be used instead. > > + > > @section System emulator devices > > > > @subsection ide-drive (since 4.2) > > diff --git a/target/ppc/translate_init.inc.c b/target/ppc/translate_init.inc.c > > index 53995f62eab2..2f7125c51f35 100644 > > --- a/target/ppc/translate_init.inc.c > > +++ b/target/ppc/translate_init.inc.c > > @@ -8492,44 +8492,6 @@ POWERPC_FAMILY(POWER5P)(ObjectClass *oc, void *data) > > pcc->l1_icache_size = 0x10000; > > } > > > > -/* > > - * The CPU used to have a "compat" property which set the > > - * compatibility mode PVR. However, this was conceptually broken - it > > - * only makes sense on the pseries machine type (otherwise the guest > > - * owns the PCR and can control the compatibility mode itself). It's > > - * been replaced with the 'max-cpu-compat' property on the pseries > > - * machine type. For backwards compatibility, pseries specially > > - * parses the -cpu parameter and converts old compat= parameters into > > - * the appropriate machine parameters. This stub implementation of > > - * the parameter catches any uses on explicitly created CPUs. > > - */ > > -static void getset_compat_deprecated(Object *obj, Visitor *v, const char *name, > > - void *opaque, Error **errp) > > -{ > > - QNull *null = NULL; > > - > > - if (!qtest_enabled()) { > > - warn_report("CPU 'compat' property is deprecated and has no effect; " > > - "use max-cpu-compat machine property instead"); > > - } > > - visit_type_null(v, name, &null, NULL); > > - qobject_unref(null); > > -} > > - > > -static const PropertyInfo ppc_compat_deprecated_propinfo = { > > - .name = "str", > > - .description = "compatibility mode (deprecated)", > > - .get = getset_compat_deprecated, > > - .set = getset_compat_deprecated, > > -}; > > -static Property powerpc_servercpu_properties[] = { > > - { > > - .name = "compat", > > - .info = &ppc_compat_deprecated_propinfo, > > - }, > > - DEFINE_PROP_END_OF_LIST(), > > -}; > > - > > static void init_proc_POWER7(CPUPPCState *env) > > { > > /* Common Registers */ > > @@ -8611,7 +8573,6 @@ POWERPC_FAMILY(POWER7)(ObjectClass *oc, void *data) > > > > dc->fw_name = "PowerPC,POWER7"; > > dc->desc = "POWER7"; > > - device_class_set_props(dc, powerpc_servercpu_properties); > > pcc->pvr_match = ppc_pvr_match_power7; > > pcc->pcr_mask = PCR_VEC_DIS | PCR_VSX_DIS | PCR_COMPAT_2_05; > > pcc->pcr_supported = PCR_COMPAT_2_06 | PCR_COMPAT_2_05; > > @@ -8776,7 +8737,6 @@ POWERPC_FAMILY(POWER8)(ObjectClass *oc, void *data) > > > > dc->fw_name = "PowerPC,POWER8"; > > dc->desc = "POWER8"; > > - device_class_set_props(dc, powerpc_servercpu_properties); > > pcc->pvr_match = ppc_pvr_match_power8; > > pcc->pcr_mask = PCR_TM_DIS | PCR_COMPAT_2_06 | PCR_COMPAT_2_05; > > pcc->pcr_supported = PCR_COMPAT_2_07 | PCR_COMPAT_2_06 | PCR_COMPAT_2_05; > > @@ -8988,7 +8948,6 @@ POWERPC_FAMILY(POWER9)(ObjectClass *oc, void *data) > > > > dc->fw_name = "PowerPC,POWER9"; > > dc->desc = "POWER9"; > > - device_class_set_props(dc, powerpc_servercpu_properties); > > pcc->pvr_match = ppc_pvr_match_power9; > > pcc->pcr_mask = PCR_COMPAT_2_05 | PCR_COMPAT_2_06 | PCR_COMPAT_2_07; > > pcc->pcr_supported = PCR_COMPAT_3_00 | PCR_COMPAT_2_07 | PCR_COMPAT_2_06 | > > @@ -9198,7 +9157,6 @@ POWERPC_FAMILY(POWER10)(ObjectClass *oc, void *data) > > > > dc->fw_name = "PowerPC,POWER10"; > > dc->desc = "POWER10"; > > - device_class_set_props(dc, powerpc_servercpu_properties); > > pcc->pvr_match = ppc_pvr_match_power10; > > pcc->pcr_mask = PCR_COMPAT_2_05 | PCR_COMPAT_2_06 | PCR_COMPAT_2_07 | > > PCR_COMPAT_3_00; > > @@ -10486,6 +10444,8 @@ static void ppc_cpu_parse_featurestr(const char *type, char *features, > > *s = '\0'; > > for (i = 0; inpieces[i]; i++) { > > if (g_str_has_prefix(inpieces[i], "compat=")) { > > + warn_report_once("CPU 'compat' property is deprecated; " > > + "use max-cpu-compat machine property instead"); > > compat_str = inpieces[i]; > > continue; > > } > > >
diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi index 66eca3a1dede..56a69400c14a 100644 --- a/qemu-deprecated.texi +++ b/qemu-deprecated.texi @@ -242,6 +242,12 @@ The RISC-V no MMU cpus have been depcreated. The two CPUs: ``rv32imacu-nommu`` a ``rv64imacu-nommu`` should no longer be used. Instead the MMU status can be specified via the CPU ``mmu`` option when using the ``rv32`` or ``rv64`` CPUs. +@subsection ``compat`` property of server class POWER CPUs (since 5.0) + +The ``compat`` property used to set backwards compatibility modes for +the processor has been deprecated. The ``max-cpu-compat`` property of +the ``pseries`` machine type should be used instead. + @section System emulator devices @subsection ide-drive (since 4.2) diff --git a/target/ppc/translate_init.inc.c b/target/ppc/translate_init.inc.c index 53995f62eab2..2f7125c51f35 100644 --- a/target/ppc/translate_init.inc.c +++ b/target/ppc/translate_init.inc.c @@ -8492,44 +8492,6 @@ POWERPC_FAMILY(POWER5P)(ObjectClass *oc, void *data) pcc->l1_icache_size = 0x10000; } -/* - * The CPU used to have a "compat" property which set the - * compatibility mode PVR. However, this was conceptually broken - it - * only makes sense on the pseries machine type (otherwise the guest - * owns the PCR and can control the compatibility mode itself). It's - * been replaced with the 'max-cpu-compat' property on the pseries - * machine type. For backwards compatibility, pseries specially - * parses the -cpu parameter and converts old compat= parameters into - * the appropriate machine parameters. This stub implementation of - * the parameter catches any uses on explicitly created CPUs. - */ -static void getset_compat_deprecated(Object *obj, Visitor *v, const char *name, - void *opaque, Error **errp) -{ - QNull *null = NULL; - - if (!qtest_enabled()) { - warn_report("CPU 'compat' property is deprecated and has no effect; " - "use max-cpu-compat machine property instead"); - } - visit_type_null(v, name, &null, NULL); - qobject_unref(null); -} - -static const PropertyInfo ppc_compat_deprecated_propinfo = { - .name = "str", - .description = "compatibility mode (deprecated)", - .get = getset_compat_deprecated, - .set = getset_compat_deprecated, -}; -static Property powerpc_servercpu_properties[] = { - { - .name = "compat", - .info = &ppc_compat_deprecated_propinfo, - }, - DEFINE_PROP_END_OF_LIST(), -}; - static void init_proc_POWER7(CPUPPCState *env) { /* Common Registers */ @@ -8611,7 +8573,6 @@ POWERPC_FAMILY(POWER7)(ObjectClass *oc, void *data) dc->fw_name = "PowerPC,POWER7"; dc->desc = "POWER7"; - device_class_set_props(dc, powerpc_servercpu_properties); pcc->pvr_match = ppc_pvr_match_power7; pcc->pcr_mask = PCR_VEC_DIS | PCR_VSX_DIS | PCR_COMPAT_2_05; pcc->pcr_supported = PCR_COMPAT_2_06 | PCR_COMPAT_2_05; @@ -8776,7 +8737,6 @@ POWERPC_FAMILY(POWER8)(ObjectClass *oc, void *data) dc->fw_name = "PowerPC,POWER8"; dc->desc = "POWER8"; - device_class_set_props(dc, powerpc_servercpu_properties); pcc->pvr_match = ppc_pvr_match_power8; pcc->pcr_mask = PCR_TM_DIS | PCR_COMPAT_2_06 | PCR_COMPAT_2_05; pcc->pcr_supported = PCR_COMPAT_2_07 | PCR_COMPAT_2_06 | PCR_COMPAT_2_05; @@ -8988,7 +8948,6 @@ POWERPC_FAMILY(POWER9)(ObjectClass *oc, void *data) dc->fw_name = "PowerPC,POWER9"; dc->desc = "POWER9"; - device_class_set_props(dc, powerpc_servercpu_properties); pcc->pvr_match = ppc_pvr_match_power9; pcc->pcr_mask = PCR_COMPAT_2_05 | PCR_COMPAT_2_06 | PCR_COMPAT_2_07; pcc->pcr_supported = PCR_COMPAT_3_00 | PCR_COMPAT_2_07 | PCR_COMPAT_2_06 | @@ -9198,7 +9157,6 @@ POWERPC_FAMILY(POWER10)(ObjectClass *oc, void *data) dc->fw_name = "PowerPC,POWER10"; dc->desc = "POWER10"; - device_class_set_props(dc, powerpc_servercpu_properties); pcc->pvr_match = ppc_pvr_match_power10; pcc->pcr_mask = PCR_COMPAT_2_05 | PCR_COMPAT_2_06 | PCR_COMPAT_2_07 | PCR_COMPAT_3_00; @@ -10486,6 +10444,8 @@ static void ppc_cpu_parse_featurestr(const char *type, char *features, *s = '\0'; for (i = 0; inpieces[i]; i++) { if (g_str_has_prefix(inpieces[i], "compat=")) { + warn_report_once("CPU 'compat' property is deprecated; " + "use max-cpu-compat machine property instead"); compat_str = inpieces[i]; continue; }
Server class POWER CPUs have a "compat" property, which was obsoleted by commit 7843c0d60d and replaced by a "max-cpu-compat" property on the pseries machine type. A hack was introduced so that passing "compat" to -cpu would still produce the desired effect, for the sake of backward compatibility : it strips the "compat" option from the CPU properties and applies internally it to the pseries machine. The accessors of the "compat" property were updated to do nothing but warn the user about the deprecated status when doing something like: $ qemu-system-ppc64 -global POWER9-family-powerpc64-cpu.compat=power9 qemu-system-ppc64: warning: CPU 'compat' property is deprecated and has no effect; use max-cpu-compat machine property instead This was merged during the QEMU 2.10 timeframe, a few weeks before we formalized our deprecation process. As a consequence, the "compat" property fell through the cracks and was never listed in the officialy deprecated features. We are now eight QEMU versions later, it is largely time to mention it in qemu-deprecated.texi. Also, since -global XXX-powerpc64-cpu.compat= has been emitting warnings since QEMU 2.10 and the usual way of setting CPU properties is with -cpu, completely remove the "compat" property. Keep the hack so that -cpu XXX,compat= stays functional some more time, as required by our deprecation process. The now empty powerpc_servercpu_properties[] list which was introduced for "compat" and never had any other use is removed on the way. We can re-add it in the future if the need for a server class POWER CPU specific property arises again. Signed-off-by: Greg Kurz <groug@kaod.org> --- qemu-deprecated.texi | 6 +++++ target/ppc/translate_init.inc.c | 44 ++------------------------------------- 2 files changed, 8 insertions(+), 42 deletions(-)