From: David Gibson <david@gibson.dropbear.id.au>
To: Alexey Kardashevskiy <aik@ozlabs.ru>
Cc: nikunj@linux.vnet.ibm.com, mdroth@linux.vnet.ibm.com,
thuth@redhat.com, lvivier@redhat.com, qemu-ppc@nongnu.org,
qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC 13/17] pseries: Move CPU compatibility property to machine
Date: Tue, 8 Nov 2016 16:26:31 +1100 [thread overview]
Message-ID: <20161108052631.GU28688@umbus.fritz.box> (raw)
In-Reply-To: <eaccf202-0fba-a07c-963c-d09275681697@ozlabs.ru>
[-- Attachment #1: Type: text/plain, Size: 17649 bytes --]
On Fri, Nov 04, 2016 at 06:43:52PM +1100, Alexey Kardashevskiy wrote:
> On 30/10/16 22:12, David Gibson 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 <david@gibson.dropbear.id.au>
> > ---
> > hw/ppc/spapr.c | 6 +++-
> > hw/ppc/spapr_cpu_core.c | 47 +++++++++++++++++++++++++++--
> > hw/ppc/spapr_hcall.c | 2 +-
> > include/hw/ppc/spapr.h | 10 +++++--
> > target-ppc/compat.c | 65 ++++++++++++++++++++++++++++++++++++++++
> > target-ppc/cpu.h | 6 ++--
> > target-ppc/translate_init.c | 73 ---------------------------------------------
> > 7 files changed, 127 insertions(+), 82 deletions(-)
> >
> > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> > index 6c78889..b983faa 100644
> > --- a/hw/ppc/spapr.c
> > +++ b/hw/ppc/spapr.c
> > @@ -1849,7 +1849,7 @@ static void ppc_spapr_init(MachineState *machine)
> > machine->cpu_model = kvm_enabled() ? "host" : smc->tcg_default_cpu;
> > }
> >
> > - ppc_cpu_parse_features(machine->cpu_model);
> > + spapr_cpu_parse_features(spapr);
> >
> > spapr_init_cpus(spapr);
> >
> > @@ -2191,6 +2191,10 @@ static void spapr_machine_initfn(Object *obj)
> > " place of standard EPOW events when possible"
> > " (required for memory hot-unplug support)",
> > NULL);
> > +
> > + object_property_add(obj, "max-cpu-compat", "str",
> > + ppc_compat_prop_get, ppc_compat_prop_set,
> > + NULL, &spapr->max_compat_pvr, &error_fatal);
> > }
> >
> > static void spapr_machine_finalizefn(Object *obj)
> > diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
> > index ee5cd14..0319516 100644
> > --- a/hw/ppc/spapr_cpu_core.c
> > +++ b/hw/ppc/spapr_cpu_core.c
> > @@ -18,6 +18,49 @@
> > #include "target-ppc/mmu-hash64.h"
> > #include "sysemu/numa.h"
> >
> > +void spapr_cpu_parse_features(sPAPRMachineState *spapr)
> > +{
> > + /*
> > + * Backwards compatibility hack:
> > +
> > + * CPUs had a "compat=" property which didn't make sense for
> > + * anything except pseries. It was replaced by "max-cpu-compat"
> > + * machine option. This supports old command lines like
> > + * -cpu POWER8,compat=power7
> > + * By stripping the compat option and applying it to the machine
> > + * before passing it on to the cpu level parser.
> > + */
> > + gchar **inpieces, **outpieces;
> > + int n, i, j;
> > + gchar *compat_str = NULL;
> > + gchar *filtered_model;
> > +
> > + inpieces = g_strsplit(MACHINE(spapr)->cpu_model, ",", 0);
> > + n = g_strv_length(inpieces);
> > + outpieces = g_new0(gchar *, g_strv_length(inpieces));
> > +
> > + /* inpieces[0] is the actual model string */
> > + for (i = 0, j = 0; i < n; i++) {
> > + if (g_str_has_prefix(inpieces[i], "compat=")) {
> > + compat_str = inpieces[i];
> > + } else {
> > + outpieces[j++] = g_strdup(inpieces[i]);
> > + }
> > + }
> > +
> > + if (compat_str) {
> > + char *val = compat_str + strlen("compat=");
> > + object_property_set_str(OBJECT(spapr), val, "max-cpu-compat",
> > + &error_fatal);
>
> This part is ok.
>
> > + }
> > +
> > + filtered_model = g_strjoinv(",", outpieces);
> > + ppc_cpu_parse_features(filtered_model);
>
>
> Rather than reducing the CPU parameters string from the command line, I'd
> keep "dc->props = powerpc_servercpu_properties" and make them noop + warn
> to use the machine option instead. One day QEMU may start calling the CPU
> features parser itself and somebody will have to hack this thing
> again.
Hrm. A deprecation message like that only works if a human is reading
it. Usually qemu will be invoked by libvirt and the message will
probably disappear into some log file to scare someone unnecessarily.
Meanwhile, what will the actual behaviour be? Pulling the CPU's
property value into the machine instead would be really ugly.
Ignoring it would break users with existing libvirt.
The hack above is nasty, but I'm not really seeing a better option.
>
>
> > +
> > + g_strfreev(inpieces);
> > + g_strfreev(outpieces);
> > +}
> > +
> > static void spapr_cpu_reset(void *opaque)
> > {
> > sPAPRMachineState *spapr = SPAPR_MACHINE(qdev_get_machine());
> > @@ -60,10 +103,10 @@ static void spapr_cpu_init(sPAPRMachineState *spapr, PowerPCCPU *cpu,
> > cpu_ppc_set_vhyp(cpu, PPC_VIRTUAL_HYPERVISOR(spapr));
> > cpu_ppc_set_papr(cpu);
> >
> > - if (cpu->max_compat) {
> > + if (spapr->max_compat_pvr) {
> > Error *local_err = NULL;
> >
> > - ppc_set_compat(cpu, cpu->max_compat, &local_err);
> > + ppc_set_compat(cpu, spapr->max_compat_pvr, &local_err);
> > if (local_err) {
> > error_propagate(errp, local_err);
> > return;
> > diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
> > index 4eaf9a6..5efa57f 100644
> > --- a/hw/ppc/spapr_hcall.c
> > +++ b/hw/ppc/spapr_hcall.c
> > @@ -889,7 +889,7 @@ static target_ulong h_client_architecture_support(PowerPCCPU *cpu,
> > target_ulong list = ppc64_phys_to_real(args[0]);
> > target_ulong ov_table;
> > bool explicit_match = false; /* Matched the CPU's real PVR */
> > - uint32_t max_compat = cpu->max_compat;
> > + uint32_t max_compat = spapr->max_compat_pvr;
> > uint32_t best_compat = 0;
> > int i;
> > sPAPROptionVector *ov5_guest, *ov5_cas_old, *ov5_updates;
> > diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> > index 04d2821..d2a40e9 100644
> > --- a/include/hw/ppc/spapr.h
> > +++ b/include/hw/ppc/spapr.h
> > @@ -74,15 +74,18 @@ struct sPAPRMachineState {
> > uint64_t rtc_offset; /* Now used only during incoming migration */
> > struct PPCTimebase tb;
> > bool has_graphics;
> > - sPAPROptionVector *ov5; /* QEMU-supported option vectors */
> > - sPAPROptionVector *ov5_cas; /* negotiated (via CAS) option vectors */
> > - bool cas_reboot;
> >
> > Notifier epow_notifier;
> > QTAILQ_HEAD(, sPAPREventLogEntry) pending_events;
> > bool use_hotplug_event_source;
> > sPAPREventSource *event_sources;
> >
> > + /* ibm,client-architecture-support option negotiation */
> > + bool cas_reboot;
> > + sPAPROptionVector *ov5; /* QEMU-supported option vectors */
> > + sPAPROptionVector *ov5_cas; /* negotiated (via CAS) option vectors */
> > + uint32_t max_compat_pvr;
> > +
>
> Nit: 3 of 5 lines were just moved while you could just add max_compat_pvr
> and the comment before ov5. QEMU already has too many patches moving lines
> around, sometime it is getting annoying while browsing with git blame.
>
>
>
> > /* Migration state */
> > int htab_save_index;
> > bool htab_first_pass;
> > @@ -613,6 +616,7 @@ void spapr_hotplug_req_add_by_count_indexed(sPAPRDRConnectorType drc_type,
> > uint32_t count, uint32_t index);
> > void spapr_hotplug_req_remove_by_count_indexed(sPAPRDRConnectorType drc_type,
> > uint32_t count, uint32_t index);
> > +void spapr_cpu_parse_features(sPAPRMachineState *spapr);
> > void *spapr_populate_hotplug_cpu_dt(CPUState *cs, int *fdt_offset,
> > sPAPRMachineState *spapr);
> >
> > diff --git a/target-ppc/compat.c b/target-ppc/compat.c
> > index 0b12b58..c3ae52d 100644
> > --- a/target-ppc/compat.c
> > +++ b/target-ppc/compat.c
> > @@ -23,9 +23,11 @@
> > #include "sysemu/cpus.h"
> > #include "qemu/error-report.h"
> > #include "qapi/error.h"
> > +#include "qapi/visitor.h"
> > #include "cpu-models.h"
> >
> > typedef struct {
> > + const char *name;
> > uint32_t pvr;
> > uint64_t pcr;
> > uint64_t pcr_level;
> > @@ -37,6 +39,7 @@ static const CompatInfo compat_table[] = {
> > * Ordered from oldest to newest - the code relies on this
> > */
> > { /* POWER6, ISA2.05 */
> > + .name = "power6",
> > .pvr = CPU_POWERPC_LOGICAL_2_05,
> > .pcr = PCR_COMPAT_2_07 | PCR_COMPAT_2_06 | PCR_COMPAT_2_05
> > | PCR_TM_DIS | PCR_VSX_DIS,
> > @@ -44,18 +47,21 @@ static const CompatInfo compat_table[] = {
> > .max_threads = 2,
> > },
> > { /* POWER7, ISA2.06 */
> > + .name = "power7",
> > .pvr = CPU_POWERPC_LOGICAL_2_06,
> > .pcr = PCR_COMPAT_2_07 | PCR_COMPAT_2_06 | PCR_TM_DIS,
> > .pcr_level = PCR_COMPAT_2_06,
> > .max_threads = 4,
> > },
> > {
> > + .name = "power7+",
> > .pvr = CPU_POWERPC_LOGICAL_2_06_PLUS,
> > .pcr = PCR_COMPAT_2_07 | PCR_COMPAT_2_06 | PCR_TM_DIS,
> > .pcr_level = PCR_COMPAT_2_06,
> > .max_threads = 4,
> > },
> > { /* POWER8, ISA2.07 */
> > + .name = "power8",
> > .pvr = CPU_POWERPC_LOGICAL_2_07,
> > .pcr = PCR_COMPAT_2_07,
> > .pcr_level = PCR_COMPAT_2_07,
> > @@ -184,3 +190,62 @@ int ppc_compat_max_threads(PowerPCCPU *cpu)
> >
> > return n_threads;
> > }
> > +
> > +void ppc_compat_prop_get(Object *obj, Visitor *v, const char *name,
> > + void *opaque, Error **errp)
> > +{
> > + uint32_t compat_pvr = *((uint32_t *)opaque);
> > + const char *value;
> > +
> > + if (!compat_pvr) {
> > + value = "";
> > + } else {
> > + const CompatInfo *compat = compat_by_pvr(compat_pvr);
> > +
> > + g_assert(compat);
> > +
> > + value = compat->name;
> > + }
> > +
> > + visit_type_str(v, name, (char **)&value, errp);
> > +}
> > +
> > +void ppc_compat_prop_set(Object *obj, Visitor *v, const char *name,
> > + void *opaque, Error **errp)
> > +{
> > + Error *error = NULL;
> > + char *value;
> > + uint32_t compat_pvr;
> > +
> > + visit_type_str(v, name, &value, &error);
> > + if (error) {
> > + error_propagate(errp, error);
> > + return;
> > + }
> > +
> > + if (strcmp(value, "") == 0) {
> > + compat_pvr = 0;
> > + } else {
> > + int i;
> > + const CompatInfo *compat = NULL;
> > +
> > + for (i = 0; i < ARRAY_SIZE(compat_table); i++) {
> > + if (strcmp(value, compat_table[i].name) == 0) {
> > + compat = &compat_table[i];
> > + break;
> > +
> > + }
> > + }
> > +
> > + if (!compat) {
> > + error_setg(errp, "Invalid compatibility mode \"%s\"", value);
> > + goto out;
> > + }
> > + compat_pvr = compat->pvr;
> > + }
> > +
> > + *((uint32_t *)opaque) = compat_pvr;
> > +
> > +out:
> > + g_free(value);
> > +}
> > diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h
> > index 201a655..51d21bb 100644
> > --- a/target-ppc/cpu.h
> > +++ b/target-ppc/cpu.h
> > @@ -1155,7 +1155,6 @@ typedef struct PPCVirtualHypervisorClass PPCVirtualHypervisorClass;
> > * PowerPCCPU:
> > * @env: #CPUPPCState
> > * @cpu_dt_id: CPU index used in the device tree. KVM uses this index too
> > - * @max_compat: Maximal supported logical PVR from the command line
> > * @compat_pvr: Current logical PVR, zero if in "raw" mode
> > *
> > * A PowerPC CPU.
> > @@ -1167,7 +1166,6 @@ struct PowerPCCPU {
> >
> > CPUPPCState env;
> > int cpu_dt_id;
> > - uint32_t max_compat;
> > uint32_t compat_pvr;
> > PPCVirtualHypervisor *vhyp;
> > };
> > @@ -1321,6 +1319,10 @@ void ppc_set_compat(PowerPCCPU *cpu, uint32_t compat_pvr, Error **errp);
> > void ppc_set_compat_all(uint32_t compat_pvr, Error **errp);
> > #endif
> > int ppc_compat_max_threads(PowerPCCPU *cpu);
> > +void ppc_compat_prop_get(Object *obj, Visitor *v,
> > + const char *name, void *opaque, Error **err);
> > +void ppc_compat_prop_set(Object *obj, Visitor *v,
> > + const char *name, void *opaque, Error **err);
> > #endif /* defined(TARGET_PPC64) */
> >
> > #include "exec/cpu-all.h"
> > diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
> > index ba48242..40abd23 100644
> > --- a/target-ppc/translate_init.c
> > +++ b/target-ppc/translate_init.c
> > @@ -8428,76 +8428,6 @@ POWERPC_FAMILY(POWER5P)(ObjectClass *oc, void *data)
> > pcc->l1_icache_size = 0x10000;
> > }
> >
> > -static void powerpc_get_compat(Object *obj, Visitor *v, const char *name,
> > - void *opaque, Error **errp)
> > -{
> > - char *value = (char *)"";
> > - Property *prop = opaque;
> > - uint32_t *max_compat = qdev_get_prop_ptr(DEVICE(obj), prop);
> > -
> > - switch (*max_compat) {
> > - case CPU_POWERPC_LOGICAL_2_05:
> > - value = (char *)"power6";
> > - break;
> > - case CPU_POWERPC_LOGICAL_2_06:
> > - value = (char *)"power7";
> > - break;
> > - case CPU_POWERPC_LOGICAL_2_07:
> > - value = (char *)"power8";
> > - break;
> > - case 0:
> > - break;
> > - default:
> > - error_report("Internal error: compat is set to %x", *max_compat);
> > - abort();
> > - break;
> > - }
> > -
> > - visit_type_str(v, name, &value, errp);
> > -}
> > -
> > -static void powerpc_set_compat(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);
> > -}
> > -
> > -static PropertyInfo powerpc_compat_propinfo = {
> > - .name = "str",
> > - .description = "compatibility mode, power6/power7/power8",
> > - .get = powerpc_get_compat,
> > - .set = powerpc_set_compat,
> > -};
> > -
> > -#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),
> > - DEFINE_PROP_END_OF_LIST(),
> > -};
> > -
> > #ifdef CONFIG_SOFTMMU
> > static const struct ppc_segment_page_sizes POWER7_POWER8_sps = {
> > .sps = {
> > @@ -8586,7 +8516,6 @@ POWERPC_FAMILY(POWER7)(ObjectClass *oc, void *data)
> >
> > dc->fw_name = "PowerPC,POWER7";
> > dc->desc = "POWER7";
> > - dc->props = 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;
> > @@ -8713,7 +8642,6 @@ POWERPC_FAMILY(POWER8)(ObjectClass *oc, void *data)
> >
> > dc->fw_name = "PowerPC,POWER8";
> > dc->desc = "POWER8";
> > - dc->props = 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;
> > @@ -8794,7 +8722,6 @@ POWERPC_FAMILY(POWER9)(ObjectClass *oc, void *data)
> >
> > dc->fw_name = "PowerPC,POWER9";
> > dc->desc = "POWER9";
> > - dc->props = 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->init_proc = init_proc_POWER9;
> >
>
>
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2016-11-08 5:35 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-30 11:11 [Qemu-devel] [RFC 00/17] Clean up compatibility mode handling David Gibson
2016-10-30 11:11 ` [Qemu-devel] [RFC 01/17] ppc: Remove some stub POWER6 models David Gibson
2016-10-31 7:38 ` Thomas Huth
2016-10-31 8:37 ` David Gibson
2016-11-08 3:40 ` David Gibson
2016-10-30 11:11 ` [Qemu-devel] [RFC 02/17] powernv: CPU compatibility modes don't make sense for powernv David Gibson
2016-10-31 7:46 ` Thomas Huth
2016-10-31 8:38 ` David Gibson
2016-10-31 10:35 ` Greg Kurz
2016-10-30 11:11 ` [Qemu-devel] [RFC 03/17] pseries: Always use core objects for CPU construction David Gibson
2016-11-03 8:11 ` Alexey Kardashevskiy
2016-11-04 9:51 ` [Qemu-devel] [Qemu-ppc] " Greg Kurz
2016-11-08 5:34 ` David Gibson
2016-10-30 11:11 ` [Qemu-devel] [RFC 04/17] pseries: Make cpu_update during CAS unconditional David Gibson
2016-11-03 8:24 ` Alexey Kardashevskiy
2016-11-04 10:45 ` Thomas Huth
2016-11-08 3:44 ` David Gibson
2016-10-30 11:11 ` [Qemu-devel] [RFC 05/17] ppc: Clean up and QOMify hypercall emulation David Gibson
2016-11-03 8:50 ` Alexey Kardashevskiy
2016-10-30 11:11 ` [Qemu-devel] [RFC 06/17] ppc: Rename cpu_version to compat_pvr David Gibson
2016-11-04 2:26 ` Alexey Kardashevskiy
2016-11-08 3:48 ` David Gibson
2016-11-04 10:51 ` Thomas Huth
2016-10-30 11:11 ` [Qemu-devel] [RFC 07/17] ppc: Rewrite ppc_set_compat() David Gibson
2016-11-04 2:57 ` Alexey Kardashevskiy
2016-11-08 3:49 ` David Gibson
2016-10-30 11:11 ` [Qemu-devel] [RFC 08/17] ppc: Rewrite ppc_get_compat_smt_threads() David Gibson
2016-11-04 3:37 ` Alexey Kardashevskiy
2016-11-08 5:13 ` David Gibson
2016-10-30 11:12 ` [Qemu-devel] [RFC 09/17] ppc: Validate compatibility modes when setting David Gibson
2016-10-31 5:55 ` Alexey Kardashevskiy
2016-10-31 8:39 ` David Gibson
2016-11-04 3:45 ` Alexey Kardashevskiy
2016-11-08 5:14 ` David Gibson
2016-10-30 11:12 ` [Qemu-devel] [RFC 10/17] pseries: Rewrite CAS PVR compatibility logic David Gibson
2016-10-31 5:00 ` Alexey Kardashevskiy
2016-10-31 5:44 ` David Gibson
2016-11-10 17:54 ` Michael Roth
2016-11-10 23:50 ` David Gibson
2016-10-30 11:12 ` [Qemu-devel] [RFC 11/17] ppc: Add ppc_set_compat_all() David Gibson
2016-11-04 4:01 ` Alexey Kardashevskiy
2016-11-08 5:18 ` David Gibson
2016-11-09 1:27 ` Alexey Kardashevskiy
2016-11-09 3:52 ` David Gibson
2016-11-09 5:18 ` Alexey Kardashevskiy
2016-11-10 3:13 ` David Gibson
2016-10-30 11:12 ` [Qemu-devel] [RFC 12/17] ppc: Migrate compatibility mode David Gibson
2016-11-04 5:58 ` Alexey Kardashevskiy
2016-11-08 5:19 ` David Gibson
2016-11-08 5:51 ` Alexey Kardashevskiy
2016-11-10 1:59 ` David Gibson
2016-11-10 23:55 ` Michael Roth
2016-11-14 1:15 ` David Gibson
2016-10-30 11:12 ` [Qemu-devel] [RFC 13/17] pseries: Move CPU compatibility property to machine David Gibson
2016-11-04 7:43 ` Alexey Kardashevskiy
2016-11-08 5:26 ` David Gibson [this message]
2016-11-08 5:56 ` Alexey Kardashevskiy
2016-11-09 4:41 ` David Gibson
2016-10-30 11:12 ` [Qemu-devel] [RFC 14/17] pseries: Reset CPU compatibility mode David Gibson
2016-11-04 7:50 ` Alexey Kardashevskiy
2016-10-30 11:12 ` [Qemu-devel] [RFC 15/17] ppc: Check that CPU model stays consistent across migration David Gibson
2016-11-04 7:54 ` Alexey Kardashevskiy
2016-11-08 5:29 ` David Gibson
2016-11-08 6:03 ` Alexey Kardashevskiy
2016-11-09 4:24 ` David Gibson
2016-11-09 6:06 ` Alexey Kardashevskiy
2016-11-09 6:40 ` David Gibson
2016-10-30 11:12 ` [Qemu-devel] [RFC 16/17] ppc: Remove counter-productive "sanity checks" in migration David Gibson
2016-11-04 5:52 ` Alexey Kardashevskiy
2016-11-08 5:31 ` David Gibson
2016-11-11 18:13 ` [Qemu-devel] [Qemu-ppc] " Greg Kurz
2016-11-14 2:34 ` Alexey Kardashevskiy
2016-11-14 6:08 ` David Gibson
2016-10-30 11:12 ` [Qemu-devel] [RFC 17/17] pseries: Default to POWER8 compatibility mode David Gibson
2016-10-30 11:58 ` David Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161108052631.GU28688@umbus.fritz.box \
--to=david@gibson.dropbear.id.au \
--cc=aik@ozlabs.ru \
--cc=lvivier@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=nikunj@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.