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: Mon, 22 Feb 2016 03:26:28 +0000 [thread overview]
Message-ID: <20160222032628.GE2808@voom.fritz.box> (raw)
In-Reply-To: <1455897503-11835-18-git-send-email-drjones@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 7704 bytes --]
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.
> +#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.
> +}
> +
> +int rtas_token(const char *service)
> +{
> + const struct fdt_property *prop;
> + u32 *token;
> +
> + prop = fdt_get_property(dt_fdt(), rtas_node(), service, NULL);
> + if (prop) {
> + token = (u32 *)prop->data;
> + return fdt32_to_cpu(*token);
> + }
> + return RTAS_UNKNOWN_SERVICE;
> +}
> +
> +int rtas_call(int token, int nargs, int nret, int *outputs, ...)
> +{
> + va_list list;
> + int ret, i;
> +
> + spin_lock(&rtas_lock);
> +
> + rtas_args.token = cpu_to_be32(token);
> + rtas_args.nargs = cpu_to_be32(nargs);
> + rtas_args.nret = cpu_to_be32(nret);
> + rtas_args.rets = &rtas_args.args[nargs];
> +
> + va_start(list, outputs);
> + for (i = 0; i < nargs; ++i)
> + rtas_args.args[i] = cpu_to_be32(va_arg(list, u32));
> + va_end(list);
> +
> + for (i = 0; i < nret; ++i)
> + rtas_args.rets[i] = 0;
> +
> + enter_rtas(__pa(&rtas_args));
> +
> + if (nret > 1 && outputs != NULL)
> + for (i = 0; i < nret - 1; ++i)
> + outputs[i] = be32_to_cpu(rtas_args.rets[i + 1]);
> +
> + ret = nret > 0 ? be32_to_cpu(rtas_args.rets[0]) : 0;
> +
> + spin_unlock(&rtas_lock);
> + return ret;
> +}
> +
> +void rtas_power_off(void)
> +{
> + int ret = rtas_call(rtas_token("power-off"), 2, 1, NULL, -1, -1);
> + printf("RTAS power-off returned %d\n", ret);
abort here?
> +}
> diff --git a/lib/ppc64/asm/rtas.h b/lib/ppc64/asm/rtas.h
> new file mode 100644
> index 0000000000000..fe77f635cd860
> --- /dev/null
> +++ b/lib/ppc64/asm/rtas.h
> @@ -0,0 +1 @@
> +#include "../../powerpc/asm/rtas.h"
> diff --git a/powerpc/Makefile.common b/powerpc/Makefile.common
> index 07ba135f77110..cad728ecbe269 100644
> --- a/powerpc/Makefile.common
> +++ b/powerpc/Makefile.common
> @@ -28,6 +28,7 @@ cflatobjs += lib/devicetree.o
> cflatobjs += lib/powerpc/io.o
> cflatobjs += lib/powerpc/hcall.o
> cflatobjs += lib/powerpc/setup.o
> +cflatobjs += lib/powerpc/rtas.o
>
> libgcc := $(shell $(CC) $(machine) --print-libgcc-file-name)
>
--
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: Mon, 22 Feb 2016 14:26:28 +1100 [thread overview]
Message-ID: <20160222032628.GE2808@voom.fritz.box> (raw)
In-Reply-To: <1455897503-11835-18-git-send-email-drjones@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 7704 bytes --]
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.
> +#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.
> +}
> +
> +int rtas_token(const char *service)
> +{
> + const struct fdt_property *prop;
> + u32 *token;
> +
> + prop = fdt_get_property(dt_fdt(), rtas_node(), service, NULL);
> + if (prop) {
> + token = (u32 *)prop->data;
> + return fdt32_to_cpu(*token);
> + }
> + return RTAS_UNKNOWN_SERVICE;
> +}
> +
> +int rtas_call(int token, int nargs, int nret, int *outputs, ...)
> +{
> + va_list list;
> + int ret, i;
> +
> + spin_lock(&rtas_lock);
> +
> + rtas_args.token = cpu_to_be32(token);
> + rtas_args.nargs = cpu_to_be32(nargs);
> + rtas_args.nret = cpu_to_be32(nret);
> + rtas_args.rets = &rtas_args.args[nargs];
> +
> + va_start(list, outputs);
> + for (i = 0; i < nargs; ++i)
> + rtas_args.args[i] = cpu_to_be32(va_arg(list, u32));
> + va_end(list);
> +
> + for (i = 0; i < nret; ++i)
> + rtas_args.rets[i] = 0;
> +
> + enter_rtas(__pa(&rtas_args));
> +
> + if (nret > 1 && outputs != NULL)
> + for (i = 0; i < nret - 1; ++i)
> + outputs[i] = be32_to_cpu(rtas_args.rets[i + 1]);
> +
> + ret = nret > 0 ? be32_to_cpu(rtas_args.rets[0]) : 0;
> +
> + spin_unlock(&rtas_lock);
> + return ret;
> +}
> +
> +void rtas_power_off(void)
> +{
> + int ret = rtas_call(rtas_token("power-off"), 2, 1, NULL, -1, -1);
> + printf("RTAS power-off returned %d\n", ret);
abort here?
> +}
> diff --git a/lib/ppc64/asm/rtas.h b/lib/ppc64/asm/rtas.h
> new file mode 100644
> index 0000000000000..fe77f635cd860
> --- /dev/null
> +++ b/lib/ppc64/asm/rtas.h
> @@ -0,0 +1 @@
> +#include "../../powerpc/asm/rtas.h"
> diff --git a/powerpc/Makefile.common b/powerpc/Makefile.common
> index 07ba135f77110..cad728ecbe269 100644
> --- a/powerpc/Makefile.common
> +++ b/powerpc/Makefile.common
> @@ -28,6 +28,7 @@ cflatobjs += lib/devicetree.o
> cflatobjs += lib/powerpc/io.o
> cflatobjs += lib/powerpc/hcall.o
> cflatobjs += lib/powerpc/setup.o
> +cflatobjs += lib/powerpc/rtas.o
>
> libgcc := $(shell $(CC) $(machine) --print-libgcc-file-name)
>
--
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-02-22 3:26 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 [this message]
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
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=20160222032628.GE2808@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.