[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFCv2 10/12] pseries: Move CPU compatibility property
From: |
Greg Kurz |
Subject: |
Re: [Qemu-devel] [RFCv2 10/12] pseries: Move CPU compatibility property to machine |
Date: |
Sat, 19 Nov 2016 09:27:38 +0100 |
Hi David,
I've started to go through the testing you suggest in the cover letter. QEMU
crashes when trying to use the deprecated "compat" CPU property.
On Wed, 16 Nov 2016 09:17:53 +1100
David Gibson <address@hidden> wrote:
> Server class POWER CPUs have a "compat" property, which is used to set the
> backwards compatibility mode for the processor. However, this only makes
> sense for machine types which don't give the guest access to hypervisor
> privilege - otherwise the compatibility level is under the guest's control.
>
> To reflect this, this removes the CPU 'compat' property and instead
> creates a 'max-cpu-compat' property on the pseries machine. Strictly
> speaking this breaks compatibility, but AFAIK the 'compat' option was
> never (directly) used with -device or device_add.
>
> The option was used with -cpu. So, to maintain compatibility, this patch
> adds a hack to the cpu option parsing to strip out any compat options
> supplied with -cpu and set them on the machine property instead of the new
> removed cpu property.
>
> Signed-off-by: David Gibson <address@hidden>
> ---
[...]
> +static void getset_compat_deprecated(Object *obj, Visitor *v, const char
> *name,
> + void *opaque, Error **errp)
> {
> - Error *error = NULL;
> - char *value = NULL;
> - Property *prop = opaque;
> - uint32_t *max_compat = qdev_get_prop_ptr(DEVICE(obj), prop);
> -
> - visit_type_str(v, name, &value, &error);
> - if (error) {
> - error_propagate(errp, error);
> - return;
> - }
> -
> - if (strcmp(value, "power6") == 0) {
> - *max_compat = CPU_POWERPC_LOGICAL_2_05;
> - } else if (strcmp(value, "power7") == 0) {
> - *max_compat = CPU_POWERPC_LOGICAL_2_06;
> - } else if (strcmp(value, "power8") == 0) {
> - *max_compat = CPU_POWERPC_LOGICAL_2_07;
> - } else {
> - error_setg(errp, "Invalid compatibility mode \"%s\"", value);
> - }
> -
> - g_free(value);
> + error_report("CPU 'compat' property is deprecated and has no effect; use
> max-cpu-compat machine property instead");
> + visit_type_null(v, name, errp);
The string input and output visitors don't support explicit null yet. I have
a tentative patch for that.
Cheers.
--
Greg
> }
>
> -static PropertyInfo powerpc_compat_propinfo = {
> +static PropertyInfo ppc_compat_deprecated_propinfo = {
> .name = "str",
> - .description = "compatibility mode, power6/power7/power8",
> - .get = powerpc_get_compat,
> - .set = powerpc_set_compat,
> + .description = "compatibility mode (deprecated)",
> + .get = getset_compat_deprecated,
> + .set = getset_compat_deprecated,
> };
> -
> -#define DEFINE_PROP_POWERPC_COMPAT(_n, _s, _f) \
> - DEFINE_PROP(_n, _s, _f, powerpc_compat_propinfo, uint32_t)
> -
> static Property powerpc_servercpu_properties[] = {
> - DEFINE_PROP_POWERPC_COMPAT("compat", PowerPCCPU, max_compat),
> + {
> + .name = "compat",
> + .info = &ppc_compat_deprecated_propinfo,
> + },
> DEFINE_PROP_END_OF_LIST(),
> };
>
- [Qemu-devel] [RFCv2 06/12] ppc: Rewrite ppc_get_compat_smt_threads(), (continued)
- [Qemu-devel] [RFCv2 06/12] ppc: Rewrite ppc_get_compat_smt_threads(), David Gibson, 2016/11/15
- [Qemu-devel] [RFCv2 02/12] pseries: Make cpu_update during CAS unconditional, David Gibson, 2016/11/15
- [Qemu-devel] [RFCv2 01/12] pseries: Always use core objects for CPU construction, David Gibson, 2016/11/15
- [Qemu-devel] [RFCv2 03/12] ppc: Clean up and QOMify hypercall emulation, David Gibson, 2016/11/15
- [Qemu-devel] [RFCv2 08/12] pseries: Rewrite CAS PVR compatibility logic, David Gibson, 2016/11/15
- [Qemu-devel] [RFCv2 05/12] ppc: Rewrite ppc_set_compat(), David Gibson, 2016/11/15
- [Qemu-devel] [RFCv2 07/12] ppc: Validate compatibility modes when setting, David Gibson, 2016/11/15
- [Qemu-devel] [RFCv2 12/12] ppc: Rework CPU compatibility testing across migration, David Gibson, 2016/11/15
- [Qemu-devel] [RFCv2 10/12] pseries: Move CPU compatibility property to machine, David Gibson, 2016/11/15
- Re: [Qemu-devel] [RFCv2 10/12] pseries: Move CPU compatibility property to machine,
Greg Kurz <=
- Re: [Qemu-devel] [RFCv2 00/12] Clean up compatibility mode handling, no-reply, 2016/11/15
- Re: [Qemu-devel] [RFCv2 00/12] Clean up compatibility mode handling, Greg Kurz, 2016/11/25