All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: Andrew Jones <drjones@redhat.com>
Cc: kvm@vger.kernel.org, kvm-ppc@vger.kernel.org, thuth@redhat.com,
	dgibson@redhat.com, agraf@suse.de, lvivier@redhat.com,
	pbonzini@redhat.com, rkrcmar@redhat.com
Subject: Re: [kvm-unit-tests PATCH v6 17/18] powerpc/ppc64: add RTAS support
Date: Wed, 24 Feb 2016 00:30:04 +0000	[thread overview]
Message-ID: <20160224003004.GY2808@voom.fritz.box> (raw)
In-Reply-To: <20160223150355.kedljlbofrzufpzb@hawk.localdomain>

[-- Attachment #1: Type: text/plain, Size: 7375 bytes --]

On Tue, Feb 23, 2016 at 04:03:55PM +0100, Andrew Jones wrote:
> On Mon, Feb 22, 2016 at 02:26:28PM +1100, David Gibson wrote:
> > On Fri, Feb 19, 2016 at 04:58:22PM +0100, Andrew Jones wrote:
> > > Add enough RTAS support to start adding RTAS commands. Just add
> > > power-off for now.
> > > 
> > > Signed-off-by: Andrew Jones <drjones@redhat.com>
> > > Reviewed-by: Thomas Huth <thuth@redhat.com>
> > > Tested-by: Laurent Vivier <lvivier@redhat.com>
> > > Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
> > > ---
> > >  lib/powerpc/asm/rtas.h  |  26 +++++++++
> > >  lib/powerpc/io.c        |   2 +
> > >  lib/powerpc/rtas.c      | 139 ++++++++++++++++++++++++++++++++++++++++++++++++
> > >  lib/ppc64/asm/rtas.h    |   1 +
> > >  powerpc/Makefile.common |   1 +
> > >  5 files changed, 169 insertions(+)
> > >  create mode 100644 lib/powerpc/asm/rtas.h
> > >  create mode 100644 lib/powerpc/rtas.c
> > >  create mode 100644 lib/ppc64/asm/rtas.h
> > > 
> > > diff --git a/lib/powerpc/asm/rtas.h b/lib/powerpc/asm/rtas.h
> > > new file mode 100644
> > > index 0000000000000..522225bcb6de3
> > > --- /dev/null
> > > +++ b/lib/powerpc/asm/rtas.h
> > > @@ -0,0 +1,26 @@
> > > +#ifndef _ASMPOWERPC_RTAS_H_
> > > +#define _ASMPOWERPC_RTAS_H_
> > > +/*
> > > + * Copyright (C) 2016, Red Hat Inc, Andrew Jones <drjones@redhat.com>
> > > + *
> > > + * This work is licensed under the terms of the GNU LGPL, version 2.
> > > + */
> > > +#include <libcflat.h>
> > > +
> > > +#define RTAS_UNKNOWN_SERVICE	(-1)
> > > +
> > > +struct rtas_args {
> > > +	u32 token;
> > > +	u32 nargs;
> > > +	u32 nret;
> > > +	u32 args[16];
> > > +	u32 *rets;
> > > +};
> > > +
> > > +extern void rtas_init(void);
> > > +extern int rtas_token(const char *service);
> > > +extern int rtas_call(int token, int nargs, int nret, int *outputs, ...);
> > > +
> > > +extern void rtas_power_off(void);
> > > +
> > > +#endif /* _ASMPOWERPC_RTAS_H_ */
> > > diff --git a/lib/powerpc/io.c b/lib/powerpc/io.c
> > > index ef90946fb1131..c4c61ea8ac1cf 100644
> > > --- a/lib/powerpc/io.c
> > > +++ b/lib/powerpc/io.c
> > > @@ -7,6 +7,7 @@
> > >   */
> > >  #include <libcflat.h>
> > >  #include <asm/spinlock.h>
> > > +#include <asm/rtas.h>
> > >  
> > >  extern void halt(int code);
> > >  extern void putchar(int c);
> > > @@ -15,6 +16,7 @@ static struct spinlock print_lock;
> > >  
> > >  void io_init(void)
> > >  {
> > > +	rtas_init();
> > >  }
> > >  
> > >  void puts(const char *s)
> > > diff --git a/lib/powerpc/rtas.c b/lib/powerpc/rtas.c
> > > new file mode 100644
> > > index 0000000000000..464d066d3c220
> > > --- /dev/null
> > > +++ b/lib/powerpc/rtas.c
> > > @@ -0,0 +1,139 @@
> > > +/*
> > > + * powerpc RTAS
> > > + *
> > > + * Copyright (C) 2016, Red Hat Inc, Andrew Jones <drjones@redhat.com>
> > > + *
> > > + * This work is licensed under the terms of the GNU LGPL, version 2.
> > > + */
> > > +#include <libcflat.h>
> > > +#include <libfdt/libfdt.h>
> > > +#include <devicetree.h>
> > > +#include <asm/spinlock.h>
> > > +#include <asm/hcall.h>
> > > +#include <asm/io.h>
> > > +#include <asm/rtas.h>
> > > +
> > > +#define RTAS_BLOB_WORDS 8
> > > +
> > > +#if defined(__powerpc64__)
> > > +struct func_ptr {
> > > +	unsigned long ptr;
> > > +	unsigned long toc;
> > > +};
> > > +static struct func_ptr rtas_entry_funcptr;
> > > +#endif
> > > +static u32 rtas_blob[RTAS_BLOB_WORDS];
> > > +typedef void (*rtas_entry_t)(unsigned long);
> > > +static rtas_entry_t enter_rtas;
> > > +static struct rtas_args rtas_args;
> > > +static struct spinlock rtas_lock;
> > > +
> > > +static int rtas_node(void)
> > > +{
> > > +	int node = fdt_path_offset(dt_fdt(), "/rtas");
> > > +
> > > +	if (node < 0) {
> > > +		printf("%s: /rtas: %s\n", __func__, fdt_strerror(node));
> > > +		abort();
> > > +	}
> > > +
> > > +	return node;
> > > +}
> > > +
> > > +void rtas_init(void)
> > > +{
> > > +	bool broken_sc1 = hcall_have_broken_sc1();
> > > +	int node = rtas_node(), len, words, i;
> > > +	const struct fdt_property *prop;
> > > +	u32 *data, *insns;
> > > +
> > > +	if (!dt_available()) {
> > > +		printf("%s: No device tree!\n", __func__);
> > > +		abort();
> > > +	}
> > > +
> > > +	prop = fdt_get_property(dt_fdt(), node,
> > > +				"linux,rtas-entry", &len);
> > > +	if (!prop) {
> > > +		printf("%s: /rtas/linux,rtas-entry: %s\n",
> > > +				__func__, fdt_strerror(len));
> > > +		abort();
> > > +	}
> > > +
> > > +	data = (u32 *)prop->data;
> > > +	insns = (u32 *)(unsigned long)fdt32_to_cpu(*data);
> > > +
> > > +	prop = fdt_get_property(dt_fdt(), node, "rtas-size", &len);
> > > +	if (!prop) {
> > > +		printf("%s: /rtas/rtas-size: %s\n",
> > > +				__func__, fdt_strerror(len));
> > > +		abort();
> > > +	}
> > > +	data = (u32 *)prop->data;
> > > +	words = (int)fdt32_to_cpu(*data)/4;
> > > +	assert(words <= RTAS_BLOB_WORDS);
> > > +
> > > +	for (i = 0; i < words; ++i) {
> > > +		rtas_blob[i] = be32_to_cpu(insns[i]);
> > > +		if (broken_sc1 && rtas_blob[i] == SC1)
> > > +			rtas_blob[i] = SC1_REPLACEMENT;
> > > +	}
> > 
> > Hmm.. in general it's not guaranteed that you can copy around the RTAS
> > blob and have it still work.  But.. you're working essentially at the
> > same level as SLOF here, rather than a "normal" OS and I think SLOF
> > must make the same assumption.  So I guess it's ok.
> 
> I can edit the instructions in place, like I was doing before, as now...

I don't think it really matters.

> > 
> > > +#if defined(__powerpc64__)
> > 
> > Technically this ifdef should be based on the ABI version, rather than
> > __powerpc64__, but I'm not sure if there are standard #defines for that.
> > 
> > > +	rtas_entry_funcptr.ptr = (unsigned long)rtas_blob;
> > > +	enter_rtas = (rtas_entry_t)&rtas_entry_funcptr;
> > > +#else
> > > +	enter_rtas = (rtas_entry_t)rtas_blob;
> > > +#endif
> > 
> > I think you may want to have an actual coded enter_rtas function,
> > rather than just constructing a function pointer around the raw blob.
> > For one thing it should reduce the ugly ABI version #ifdefs.  More
> > importantly though, you can use it to set up the correct MSR state for
> > entry into RTAS (IR, DR, EE off, big-endian, ..).  At the moment all
> > your code runs in a suitable MSR state to call directly into RTAS, but
> > that will probably change fairly soon.
> 
> ...I see I don't need to edit all instructions wrt to endianness. The
> "call RTAS with BE state", even if running LE, was something I had
> missed, which means the above code (converting the BE blob to cpu
> endian) was the wrong thing to do. I've now added an assembler enter_rtas
> function, which doesn't do anything special yet, but I think I know what
> needs to be done with it, at least for LE enablement.

Right.  The RTAS blob needs to be entered in BE mode, and technically
in 32-bit mode as well, although the one we use in KVM will work fine
in 64-bit mode as well.  That does also mean it can technically
clobber the upper halves of a lot of registers - see the kernel
enter_rtas().

-- 
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 --]

WARNING: multiple messages have this Message-ID (diff)
From: David Gibson <david@gibson.dropbear.id.au>
To: Andrew Jones <drjones@redhat.com>
Cc: kvm@vger.kernel.org, kvm-ppc@vger.kernel.org, thuth@redhat.com,
	dgibson@redhat.com, agraf@suse.de, lvivier@redhat.com,
	pbonzini@redhat.com, rkrcmar@redhat.com
Subject: Re: [kvm-unit-tests PATCH v6 17/18] powerpc/ppc64: add RTAS support
Date: Wed, 24 Feb 2016 11:30:04 +1100	[thread overview]
Message-ID: <20160224003004.GY2808@voom.fritz.box> (raw)
In-Reply-To: <20160223150355.kedljlbofrzufpzb@hawk.localdomain>

[-- Attachment #1: Type: text/plain, Size: 7375 bytes --]

On Tue, Feb 23, 2016 at 04:03:55PM +0100, Andrew Jones wrote:
> On Mon, Feb 22, 2016 at 02:26:28PM +1100, David Gibson wrote:
> > On Fri, Feb 19, 2016 at 04:58:22PM +0100, Andrew Jones wrote:
> > > Add enough RTAS support to start adding RTAS commands. Just add
> > > power-off for now.
> > > 
> > > Signed-off-by: Andrew Jones <drjones@redhat.com>
> > > Reviewed-by: Thomas Huth <thuth@redhat.com>
> > > Tested-by: Laurent Vivier <lvivier@redhat.com>
> > > Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
> > > ---
> > >  lib/powerpc/asm/rtas.h  |  26 +++++++++
> > >  lib/powerpc/io.c        |   2 +
> > >  lib/powerpc/rtas.c      | 139 ++++++++++++++++++++++++++++++++++++++++++++++++
> > >  lib/ppc64/asm/rtas.h    |   1 +
> > >  powerpc/Makefile.common |   1 +
> > >  5 files changed, 169 insertions(+)
> > >  create mode 100644 lib/powerpc/asm/rtas.h
> > >  create mode 100644 lib/powerpc/rtas.c
> > >  create mode 100644 lib/ppc64/asm/rtas.h
> > > 
> > > diff --git a/lib/powerpc/asm/rtas.h b/lib/powerpc/asm/rtas.h
> > > new file mode 100644
> > > index 0000000000000..522225bcb6de3
> > > --- /dev/null
> > > +++ b/lib/powerpc/asm/rtas.h
> > > @@ -0,0 +1,26 @@
> > > +#ifndef _ASMPOWERPC_RTAS_H_
> > > +#define _ASMPOWERPC_RTAS_H_
> > > +/*
> > > + * Copyright (C) 2016, Red Hat Inc, Andrew Jones <drjones@redhat.com>
> > > + *
> > > + * This work is licensed under the terms of the GNU LGPL, version 2.
> > > + */
> > > +#include <libcflat.h>
> > > +
> > > +#define RTAS_UNKNOWN_SERVICE	(-1)
> > > +
> > > +struct rtas_args {
> > > +	u32 token;
> > > +	u32 nargs;
> > > +	u32 nret;
> > > +	u32 args[16];
> > > +	u32 *rets;
> > > +};
> > > +
> > > +extern void rtas_init(void);
> > > +extern int rtas_token(const char *service);
> > > +extern int rtas_call(int token, int nargs, int nret, int *outputs, ...);
> > > +
> > > +extern void rtas_power_off(void);
> > > +
> > > +#endif /* _ASMPOWERPC_RTAS_H_ */
> > > diff --git a/lib/powerpc/io.c b/lib/powerpc/io.c
> > > index ef90946fb1131..c4c61ea8ac1cf 100644
> > > --- a/lib/powerpc/io.c
> > > +++ b/lib/powerpc/io.c
> > > @@ -7,6 +7,7 @@
> > >   */
> > >  #include <libcflat.h>
> > >  #include <asm/spinlock.h>
> > > +#include <asm/rtas.h>
> > >  
> > >  extern void halt(int code);
> > >  extern void putchar(int c);
> > > @@ -15,6 +16,7 @@ static struct spinlock print_lock;
> > >  
> > >  void io_init(void)
> > >  {
> > > +	rtas_init();
> > >  }
> > >  
> > >  void puts(const char *s)
> > > diff --git a/lib/powerpc/rtas.c b/lib/powerpc/rtas.c
> > > new file mode 100644
> > > index 0000000000000..464d066d3c220
> > > --- /dev/null
> > > +++ b/lib/powerpc/rtas.c
> > > @@ -0,0 +1,139 @@
> > > +/*
> > > + * powerpc RTAS
> > > + *
> > > + * Copyright (C) 2016, Red Hat Inc, Andrew Jones <drjones@redhat.com>
> > > + *
> > > + * This work is licensed under the terms of the GNU LGPL, version 2.
> > > + */
> > > +#include <libcflat.h>
> > > +#include <libfdt/libfdt.h>
> > > +#include <devicetree.h>
> > > +#include <asm/spinlock.h>
> > > +#include <asm/hcall.h>
> > > +#include <asm/io.h>
> > > +#include <asm/rtas.h>
> > > +
> > > +#define RTAS_BLOB_WORDS 8
> > > +
> > > +#if defined(__powerpc64__)
> > > +struct func_ptr {
> > > +	unsigned long ptr;
> > > +	unsigned long toc;
> > > +};
> > > +static struct func_ptr rtas_entry_funcptr;
> > > +#endif
> > > +static u32 rtas_blob[RTAS_BLOB_WORDS];
> > > +typedef void (*rtas_entry_t)(unsigned long);
> > > +static rtas_entry_t enter_rtas;
> > > +static struct rtas_args rtas_args;
> > > +static struct spinlock rtas_lock;
> > > +
> > > +static int rtas_node(void)
> > > +{
> > > +	int node = fdt_path_offset(dt_fdt(), "/rtas");
> > > +
> > > +	if (node < 0) {
> > > +		printf("%s: /rtas: %s\n", __func__, fdt_strerror(node));
> > > +		abort();
> > > +	}
> > > +
> > > +	return node;
> > > +}
> > > +
> > > +void rtas_init(void)
> > > +{
> > > +	bool broken_sc1 = hcall_have_broken_sc1();
> > > +	int node = rtas_node(), len, words, i;
> > > +	const struct fdt_property *prop;
> > > +	u32 *data, *insns;
> > > +
> > > +	if (!dt_available()) {
> > > +		printf("%s: No device tree!\n", __func__);
> > > +		abort();
> > > +	}
> > > +
> > > +	prop = fdt_get_property(dt_fdt(), node,
> > > +				"linux,rtas-entry", &len);
> > > +	if (!prop) {
> > > +		printf("%s: /rtas/linux,rtas-entry: %s\n",
> > > +				__func__, fdt_strerror(len));
> > > +		abort();
> > > +	}
> > > +
> > > +	data = (u32 *)prop->data;
> > > +	insns = (u32 *)(unsigned long)fdt32_to_cpu(*data);
> > > +
> > > +	prop = fdt_get_property(dt_fdt(), node, "rtas-size", &len);
> > > +	if (!prop) {
> > > +		printf("%s: /rtas/rtas-size: %s\n",
> > > +				__func__, fdt_strerror(len));
> > > +		abort();
> > > +	}
> > > +	data = (u32 *)prop->data;
> > > +	words = (int)fdt32_to_cpu(*data)/4;
> > > +	assert(words <= RTAS_BLOB_WORDS);
> > > +
> > > +	for (i = 0; i < words; ++i) {
> > > +		rtas_blob[i] = be32_to_cpu(insns[i]);
> > > +		if (broken_sc1 && rtas_blob[i] == SC1)
> > > +			rtas_blob[i] = SC1_REPLACEMENT;
> > > +	}
> > 
> > Hmm.. in general it's not guaranteed that you can copy around the RTAS
> > blob and have it still work.  But.. you're working essentially at the
> > same level as SLOF here, rather than a "normal" OS and I think SLOF
> > must make the same assumption.  So I guess it's ok.
> 
> I can edit the instructions in place, like I was doing before, as now...

I don't think it really matters.

> > 
> > > +#if defined(__powerpc64__)
> > 
> > Technically this ifdef should be based on the ABI version, rather than
> > __powerpc64__, but I'm not sure if there are standard #defines for that.
> > 
> > > +	rtas_entry_funcptr.ptr = (unsigned long)rtas_blob;
> > > +	enter_rtas = (rtas_entry_t)&rtas_entry_funcptr;
> > > +#else
> > > +	enter_rtas = (rtas_entry_t)rtas_blob;
> > > +#endif
> > 
> > I think you may want to have an actual coded enter_rtas function,
> > rather than just constructing a function pointer around the raw blob.
> > For one thing it should reduce the ugly ABI version #ifdefs.  More
> > importantly though, you can use it to set up the correct MSR state for
> > entry into RTAS (IR, DR, EE off, big-endian, ..).  At the moment all
> > your code runs in a suitable MSR state to call directly into RTAS, but
> > that will probably change fairly soon.
> 
> ...I see I don't need to edit all instructions wrt to endianness. The
> "call RTAS with BE state", even if running LE, was something I had
> missed, which means the above code (converting the BE blob to cpu
> endian) was the wrong thing to do. I've now added an assembler enter_rtas
> function, which doesn't do anything special yet, but I think I know what
> needs to be done with it, at least for LE enablement.

Right.  The RTAS blob needs to be entered in BE mode, and technically
in 32-bit mode as well, although the one we use in KVM will work fine
in 64-bit mode as well.  That does also mean it can technically
clobber the upper halves of a lot of registers - see the kernel
enter_rtas().

-- 
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 --]

  reply	other threads:[~2016-02-24  0:30 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-19 15:58 [kvm-unit-tests PATCH v6 00/18] ppc64: initial drop Andrew Jones
2016-02-19 15:58 ` Andrew Jones
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 01/18] arm/arm64: trivial: another assert fix Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 02/18] Makefile: cscope: also look in arch shared asm Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 03/18] lib: asm-generic: add missing casts Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 04/18] devicetree: fix dt_get_memory_params Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 05/18] arm/arm64: setup improvements Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 06/18] lib: add vprintf Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 07/18] lib: share arm-selftest utility functions Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 08/18] config: no need to mix arch makefiles Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 09/18] powerpc/ppc64: start skeleton framework Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 10/18] powerpc/ppc64: ppc-ify makefiles and linker script Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-23 15:07   ` Laurent Vivier
2016-02-23 15:07     ` Laurent Vivier
2016-02-23 15:45     ` Andrew Jones
2016-02-23 15:45       ` Andrew Jones
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 11/18] powerpc/ppc64: add a boot rom Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 12/18] powerpc/ppc64: add hcall support and putchar Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 13/18] powerpc/ppc64: adapt arm's setup Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-23 15:04   ` Andrew Jones
2016-02-23 15:04     ` Andrew Jones
2016-02-24  0:31     ` David Gibson
2016-02-24  0:31       ` David Gibson
2016-02-26 13:08       ` Andrew Jones
2016-02-26 13:08         ` Andrew Jones
2016-02-29  0:54         ` David Gibson
2016-02-29  0:54           ` David Gibson
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 14/18] powerpc/ppc64: relocate linker VMAs Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 15/18] powerpc/ppc64: add run script and unittests.cfg Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 16/18] mkstandalone: add support for powerpc Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 17/18] powerpc/ppc64: add RTAS support Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-19 16:10   ` Andrew Jones
2016-02-19 16:10     ` Andrew Jones
2016-02-22  3:26   ` David Gibson
2016-02-22  3:26     ` David Gibson
2016-02-22  7:39     ` Thomas Huth
2016-02-22  7:39       ` Thomas Huth
2016-02-22  7:56       ` David Gibson
2016-02-22  7:56         ` David Gibson
2016-02-23 15:03     ` Andrew Jones
2016-02-23 15:03       ` Andrew Jones
2016-02-24  0:30       ` David Gibson [this message]
2016-02-24  0:30         ` David Gibson
2016-02-19 15:58 ` [kvm-unit-tests PATCH v6 18/18] powerpc/ppc64: make a fake debug-exit Andrew Jones
2016-02-19 15:58   ` Andrew Jones
2016-02-25 15:10 ` [kvm-unit-tests PATCH v6 00/18] ppc64: initial drop Laurent Vivier
2016-02-25 15:10   ` Laurent Vivier
2016-02-26  4:24   ` David Gibson
2016-02-26  4:24     ` David Gibson
2016-02-26 13:05     ` Andrew Jones
2016-02-26 13:05       ` Andrew Jones
2016-02-26 13:15       ` Laurent Vivier
2016-02-26 13:15         ` Laurent Vivier
2016-02-26 13:41       ` David Gibson
2016-02-26 13:41         ` David Gibson
2016-02-26 13:47         ` Laurent Vivier
2016-02-26 13:47           ` Laurent Vivier

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=20160224003004.GY2808@voom.fritz.box \
    --to=david@gibson.dropbear.id.au \
    --cc=agraf@suse.de \
    --cc=dgibson@redhat.com \
    --cc=drjones@redhat.com \
    --cc=kvm-ppc@vger.kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=lvivier@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=rkrcmar@redhat.com \
    --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.