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
Subject: Re: [kvm-unit-tests PATCH v4 11/17] powerpc/ppc64: add hcall support and putchar
Date: Wed, 17 Feb 2016 02:04:25 +0000	[thread overview]
Message-ID: <20160217020425.GD5239@voom.redhat.com> (raw)
In-Reply-To: <1455544166-19766-12-git-send-email-drjones@redhat.com>

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

On Mon, Feb 15, 2016 at 02:49:20PM +0100, Andrew Jones wrote:
> Add broken sc1 detection and patching and an hcall for putchar,
> to use in puts. That, along with a couple more lines in start to
> prepare for C code, and a branch to main(), gets us "hello world".
> Run with
> 
> qemu-system-ppc64 -M pseries            \
>         -bios powerpc/boot_rom.bin      \
>         -display none -serial stdio     \
>         -kernel powerpc/selftest.elf
> 
> (We're still not relocating yet, that comes in a later patch. Thus,
>  testing hello-world at this point requires a hacked QEMU and linking
>  the unit test at QEMU's kernel load address.)
> 
> Signed-off-by: Andrew Jones <drjones@redhat.com>
> Tested-by: Laurent Vivier <lvivier@redhat.com>
> ---
>  lib/powerpc/asm/hcall.h | 46 ++++++++++++++++++++++++++++
>  lib/powerpc/hcall.c     | 79 +++++++++++++++++++++++++++++++++++++++++++++++++
>  lib/powerpc/io.c        | 15 ++++++++--
>  lib/ppc64/asm/hcall.h   |  1 +
>  powerpc/Makefile.common |  2 ++
>  powerpc/cstart64.S      | 21 +++++++++++++
>  6 files changed, 162 insertions(+), 2 deletions(-)
>  create mode 100644 lib/powerpc/asm/hcall.h
>  create mode 100644 lib/powerpc/hcall.c
>  create mode 100644 lib/ppc64/asm/hcall.h
> 
> diff --git a/lib/powerpc/asm/hcall.h b/lib/powerpc/asm/hcall.h
> new file mode 100644
> index 0000000000000..f861287ac2083
> --- /dev/null
> +++ b/lib/powerpc/asm/hcall.h
> @@ -0,0 +1,46 @@
> +#ifndef _ASMPOWERPC_HCALL_H_
> +#define _ASMPOWERPC_HCALL_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.
> + */
> +
> +#define SC1			0x44000022
> +#define SC1_REPLACEMENT		0x7c000268
> +
> +#define H_SUCCESS		0
> +#define H_HARDWARE		-1
> +#define H_FUNCTION		-2
> +#define H_PRIVILEGE		-3
> +#define H_PARAMETER		-4
> +
> +#define H_SET_DABR		0x28
> +#define H_PUT_TERM_CHAR		0x58
> +
> +#ifndef __ASSEMBLY__
> +#include <libcflat.h>
> +
> +/*
> + * hcall_have_broken_sc1 checks if we're on a host with a broken sc1.
> + * Returns true if we are.
> + */
> +extern bool hcall_have_broken_sc1(void);
> +
> +/*
> + * hcall_patch_broken_sc1 patches hcall's sc1 instruction, if needed,
> + * allowing all hypercalls built on it to work.
> + */
> +extern void hcall_patch_broken_sc1(void);
> +
> +/*
> + * hcall is the hypercall wrapper function. unittests may do what
> + * they like, but the framework should make all hypercalls through
> + * here to ensure they use a working sc1 instruction, and properly
> + * handle clobbered registers. @nr is the hypercall number.
> + */
> +extern unsigned long
> +hcall(unsigned long nr, unsigned long *in, unsigned long *out);
> +
> +#endif /* !__ASSEMBLY__ */
> +#endif /* _ASMPOWERPC_HCALL_H_ */
> diff --git a/lib/powerpc/hcall.c b/lib/powerpc/hcall.c
> new file mode 100644
> index 0000000000000..db99949352133
> --- /dev/null
> +++ b/lib/powerpc/hcall.c
> @@ -0,0 +1,79 @@
> +/*
> + * Hypercall helpers
> + *
> + * broken_sc1 probing/patching inspired by SLOF, see
> + *   SLOF:lib/libhvcall/brokensc1.c
> + *
> + * hcall() implementation inspired by Linux's epapr_hypercall, see
> + *   arch/powerpc/include/asm/epapr_hcalls.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>
> +#include <asm/hcall.h>
> +
> +static u32 sc1[];
> +
> +bool hcall_have_broken_sc1(void)
> +{
> +	register unsigned long r3 asm("r3") = H_SET_DABR;
> +	register unsigned long r4 asm("r4") = 0;
> +
> +	asm volatile("sc 1"
> +	: "=r" (r3)
> +	: "r" (r3), "r" (r4)
> +	: "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12");
> +	return r3 == (unsigned long)H_PRIVILEGE;
> +}
> +
> +void hcall_patch_broken_sc1(void)
> +{
> +	if (!hcall_have_broken_sc1())
> +		return;
> +	sc1[0] = SC1_REPLACEMENT;
> +}
> +
> +unsigned long hcall(unsigned long nr, unsigned long *in, unsigned long *out)
> +{
> +	register unsigned long r3 asm("r3") = nr;
> +	register unsigned long r4 asm("r4") = in[0];
> +	register unsigned long r5 asm("r5") = in[1];
> +	register unsigned long r6 asm("r6") = in[2];
> +	register unsigned long r7 asm("r7") = in[3];
> +	register unsigned long r8 asm("r8") = in[4];
> +	register unsigned long r9 asm("r9") = in[5];
> +	register unsigned long r10 asm("r10") = in[6];
> +	register unsigned long r11 asm("r11") = in[7];
> +
> +	asm volatile("bl sc1"
> +		: "=r"(r3), "=r"(r4), "=r"(r5), "=r"(r6), "=r"(r7),
> +		  "=r"(r8), "=r"(r9), "=r"(r10), "=r"(r11)
> +		: "r"(r3), "r"(r4), "r"(r5), "r"(r6), "r"(r7),
> +		  "r"(r8), "r"(r9), "r"(r10), "r"(r11)
> +		: "r12", "memory", "lr");
> +
> +	out[0] = r4;
> +	out[1] = r5;
> +	out[2] = r6;
> +	out[3] = r7;
> +	out[4] = r8;
> +	out[5] = r9;
> +	out[6] = r10;
> +	out[7] = r11;
> +
> +	return r3;

I'm not sure there's much advantage to having this in C, rather than
folding this and the sc1 symbol into a single asm implemented hcall
function.

Doing it that way might more easily allow you to avoid packing the
arguments into an array, before unpacking them into registers again,
which seems a bit perverse.

> +}
> +
> +void putchar(int c)
> +{
> +	unsigned long in[8], out[8];
> +
> +	in[0] = 0; /* default vty */
> +	in[1] = 1; /* just 1 byte */
> +	in[2] = (unsigned long)c << 56;
> +
> +	hcall(H_PUT_TERM_CHAR, in, out);
> +}
> diff --git a/lib/powerpc/io.c b/lib/powerpc/io.c
> index 0af45742fc900..5e1fa8dd96ab6 100644
> --- a/lib/powerpc/io.c
> +++ b/lib/powerpc/io.c
> @@ -6,15 +6,26 @@
>   * This work is licensed under the terms of the GNU LGPL, version 2.
>   */
>  #include <libcflat.h>
> +#include <asm/spinlock.h>
> +
> +extern void halt(int code);
> +extern void putchar(int c);
> +
> +static struct spinlock uart_lock;
>  
>  void io_init(void)
>  {
>  }
>  
> -void puts(const char *s __unused)
> +void puts(const char *s)
>  {
> +	spin_lock(&uart_lock);

The name uart_lock isn't really accurate, since it's a hypervisor
console rather than serial.

> +	while (*s)
> +		putchar(*s++);
> +	spin_unlock(&uart_lock);
>  }
>  
> -void exit(int code __unused)
> +void exit(int code)
>  {
> +	halt(code);
>  }
> diff --git a/lib/ppc64/asm/hcall.h b/lib/ppc64/asm/hcall.h
> new file mode 100644
> index 0000000000000..daabaca510cd4
> --- /dev/null
> +++ b/lib/ppc64/asm/hcall.h
> @@ -0,0 +1 @@
> +#include "../../powerpc/asm/hcall.h"
> diff --git a/powerpc/Makefile.common b/powerpc/Makefile.common
> index 0c3eaba0d3aab..89610b525f0c1 100644
> --- a/powerpc/Makefile.common
> +++ b/powerpc/Makefile.common
> @@ -21,6 +21,7 @@ CFLAGS += -ffreestanding
>  CFLAGS += -Wextra
>  CFLAGS += -O2
>  CFLAGS += -I lib -I lib/libfdt
> +CFLAGS += -Wa,-mregnames
>  
>  asm-offsets = lib/$(ARCH)/asm-offsets.h
>  include scripts/asm-offsets.mak
> @@ -29,6 +30,7 @@ cflatobjs += lib/util.o
>  cflatobjs += lib/alloc.o
>  cflatobjs += lib/devicetree.o
>  cflatobjs += lib/powerpc/io.o
> +cflatobjs += lib/powerpc/hcall.o
>  
>  libgcc := $(shell $(CC) $(machine) --print-libgcc-file-name)
>  start_addr := $(shell printf "%x\n" $$(( $(phys_base) + $(kernel_offset) )))
> diff --git a/powerpc/cstart64.S b/powerpc/cstart64.S
> index f90828dee1c19..623fd693b02d1 100644
> --- a/powerpc/cstart64.S
> +++ b/powerpc/cstart64.S
> @@ -7,13 +7,34 @@
>   */
>  #define __ASSEMBLY__
>  
> +#define LOAD_REG_IMMEDIATE(reg,expr)		\
> +	lis	reg,(expr)@highest;		\
> +	ori	reg,reg,(expr)@higher;		\
> +	rldicr	reg,reg,32,31;			\
> +	oris	reg,reg,(expr)@h;		\
> +	ori	reg,reg,(expr)@l;
> +
> +#define LOAD_REG_ADDR(reg,name)			\
> +	ld	reg,name@got(r2)
> +
>  .section .init
>  
>  .globl start
>  start:
> +	LOAD_REG_IMMEDIATE(r1, stackptr)
> +	LOAD_REG_IMMEDIATE(r2, tocptr)
> +	bl	hcall_patch_broken_sc1

Come to that, is there any point putting hcall_patch_broken_sc1 in C,
rather than just doing it inline here.

> +	bl	main
> +	bl	exit
>  	b	halt
>  
>  .text
> +.align 3
> +
> +.globl sc1
> +sc1:
> +	sc	1
> +	blr
>  
>  .globl halt
>  halt:

-- 
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
Subject: Re: [kvm-unit-tests PATCH v4 11/17] powerpc/ppc64: add hcall support and putchar
Date: Wed, 17 Feb 2016 13:04:25 +1100	[thread overview]
Message-ID: <20160217020425.GD5239@voom.redhat.com> (raw)
In-Reply-To: <1455544166-19766-12-git-send-email-drjones@redhat.com>

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

On Mon, Feb 15, 2016 at 02:49:20PM +0100, Andrew Jones wrote:
> Add broken sc1 detection and patching and an hcall for putchar,
> to use in puts. That, along with a couple more lines in start to
> prepare for C code, and a branch to main(), gets us "hello world".
> Run with
> 
> qemu-system-ppc64 -M pseries            \
>         -bios powerpc/boot_rom.bin      \
>         -display none -serial stdio     \
>         -kernel powerpc/selftest.elf
> 
> (We're still not relocating yet, that comes in a later patch. Thus,
>  testing hello-world at this point requires a hacked QEMU and linking
>  the unit test at QEMU's kernel load address.)
> 
> Signed-off-by: Andrew Jones <drjones@redhat.com>
> Tested-by: Laurent Vivier <lvivier@redhat.com>
> ---
>  lib/powerpc/asm/hcall.h | 46 ++++++++++++++++++++++++++++
>  lib/powerpc/hcall.c     | 79 +++++++++++++++++++++++++++++++++++++++++++++++++
>  lib/powerpc/io.c        | 15 ++++++++--
>  lib/ppc64/asm/hcall.h   |  1 +
>  powerpc/Makefile.common |  2 ++
>  powerpc/cstart64.S      | 21 +++++++++++++
>  6 files changed, 162 insertions(+), 2 deletions(-)
>  create mode 100644 lib/powerpc/asm/hcall.h
>  create mode 100644 lib/powerpc/hcall.c
>  create mode 100644 lib/ppc64/asm/hcall.h
> 
> diff --git a/lib/powerpc/asm/hcall.h b/lib/powerpc/asm/hcall.h
> new file mode 100644
> index 0000000000000..f861287ac2083
> --- /dev/null
> +++ b/lib/powerpc/asm/hcall.h
> @@ -0,0 +1,46 @@
> +#ifndef _ASMPOWERPC_HCALL_H_
> +#define _ASMPOWERPC_HCALL_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.
> + */
> +
> +#define SC1			0x44000022
> +#define SC1_REPLACEMENT		0x7c000268
> +
> +#define H_SUCCESS		0
> +#define H_HARDWARE		-1
> +#define H_FUNCTION		-2
> +#define H_PRIVILEGE		-3
> +#define H_PARAMETER		-4
> +
> +#define H_SET_DABR		0x28
> +#define H_PUT_TERM_CHAR		0x58
> +
> +#ifndef __ASSEMBLY__
> +#include <libcflat.h>
> +
> +/*
> + * hcall_have_broken_sc1 checks if we're on a host with a broken sc1.
> + * Returns true if we are.
> + */
> +extern bool hcall_have_broken_sc1(void);
> +
> +/*
> + * hcall_patch_broken_sc1 patches hcall's sc1 instruction, if needed,
> + * allowing all hypercalls built on it to work.
> + */
> +extern void hcall_patch_broken_sc1(void);
> +
> +/*
> + * hcall is the hypercall wrapper function. unittests may do what
> + * they like, but the framework should make all hypercalls through
> + * here to ensure they use a working sc1 instruction, and properly
> + * handle clobbered registers. @nr is the hypercall number.
> + */
> +extern unsigned long
> +hcall(unsigned long nr, unsigned long *in, unsigned long *out);
> +
> +#endif /* !__ASSEMBLY__ */
> +#endif /* _ASMPOWERPC_HCALL_H_ */
> diff --git a/lib/powerpc/hcall.c b/lib/powerpc/hcall.c
> new file mode 100644
> index 0000000000000..db99949352133
> --- /dev/null
> +++ b/lib/powerpc/hcall.c
> @@ -0,0 +1,79 @@
> +/*
> + * Hypercall helpers
> + *
> + * broken_sc1 probing/patching inspired by SLOF, see
> + *   SLOF:lib/libhvcall/brokensc1.c
> + *
> + * hcall() implementation inspired by Linux's epapr_hypercall, see
> + *   arch/powerpc/include/asm/epapr_hcalls.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>
> +#include <asm/hcall.h>
> +
> +static u32 sc1[];
> +
> +bool hcall_have_broken_sc1(void)
> +{
> +	register unsigned long r3 asm("r3") = H_SET_DABR;
> +	register unsigned long r4 asm("r4") = 0;
> +
> +	asm volatile("sc 1"
> +	: "=r" (r3)
> +	: "r" (r3), "r" (r4)
> +	: "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12");
> +	return r3 == (unsigned long)H_PRIVILEGE;
> +}
> +
> +void hcall_patch_broken_sc1(void)
> +{
> +	if (!hcall_have_broken_sc1())
> +		return;
> +	sc1[0] = SC1_REPLACEMENT;
> +}
> +
> +unsigned long hcall(unsigned long nr, unsigned long *in, unsigned long *out)
> +{
> +	register unsigned long r3 asm("r3") = nr;
> +	register unsigned long r4 asm("r4") = in[0];
> +	register unsigned long r5 asm("r5") = in[1];
> +	register unsigned long r6 asm("r6") = in[2];
> +	register unsigned long r7 asm("r7") = in[3];
> +	register unsigned long r8 asm("r8") = in[4];
> +	register unsigned long r9 asm("r9") = in[5];
> +	register unsigned long r10 asm("r10") = in[6];
> +	register unsigned long r11 asm("r11") = in[7];
> +
> +	asm volatile("bl sc1"
> +		: "=r"(r3), "=r"(r4), "=r"(r5), "=r"(r6), "=r"(r7),
> +		  "=r"(r8), "=r"(r9), "=r"(r10), "=r"(r11)
> +		: "r"(r3), "r"(r4), "r"(r5), "r"(r6), "r"(r7),
> +		  "r"(r8), "r"(r9), "r"(r10), "r"(r11)
> +		: "r12", "memory", "lr");
> +
> +	out[0] = r4;
> +	out[1] = r5;
> +	out[2] = r6;
> +	out[3] = r7;
> +	out[4] = r8;
> +	out[5] = r9;
> +	out[6] = r10;
> +	out[7] = r11;
> +
> +	return r3;

I'm not sure there's much advantage to having this in C, rather than
folding this and the sc1 symbol into a single asm implemented hcall
function.

Doing it that way might more easily allow you to avoid packing the
arguments into an array, before unpacking them into registers again,
which seems a bit perverse.

> +}
> +
> +void putchar(int c)
> +{
> +	unsigned long in[8], out[8];
> +
> +	in[0] = 0; /* default vty */
> +	in[1] = 1; /* just 1 byte */
> +	in[2] = (unsigned long)c << 56;
> +
> +	hcall(H_PUT_TERM_CHAR, in, out);
> +}
> diff --git a/lib/powerpc/io.c b/lib/powerpc/io.c
> index 0af45742fc900..5e1fa8dd96ab6 100644
> --- a/lib/powerpc/io.c
> +++ b/lib/powerpc/io.c
> @@ -6,15 +6,26 @@
>   * This work is licensed under the terms of the GNU LGPL, version 2.
>   */
>  #include <libcflat.h>
> +#include <asm/spinlock.h>
> +
> +extern void halt(int code);
> +extern void putchar(int c);
> +
> +static struct spinlock uart_lock;
>  
>  void io_init(void)
>  {
>  }
>  
> -void puts(const char *s __unused)
> +void puts(const char *s)
>  {
> +	spin_lock(&uart_lock);

The name uart_lock isn't really accurate, since it's a hypervisor
console rather than serial.

> +	while (*s)
> +		putchar(*s++);
> +	spin_unlock(&uart_lock);
>  }
>  
> -void exit(int code __unused)
> +void exit(int code)
>  {
> +	halt(code);
>  }
> diff --git a/lib/ppc64/asm/hcall.h b/lib/ppc64/asm/hcall.h
> new file mode 100644
> index 0000000000000..daabaca510cd4
> --- /dev/null
> +++ b/lib/ppc64/asm/hcall.h
> @@ -0,0 +1 @@
> +#include "../../powerpc/asm/hcall.h"
> diff --git a/powerpc/Makefile.common b/powerpc/Makefile.common
> index 0c3eaba0d3aab..89610b525f0c1 100644
> --- a/powerpc/Makefile.common
> +++ b/powerpc/Makefile.common
> @@ -21,6 +21,7 @@ CFLAGS += -ffreestanding
>  CFLAGS += -Wextra
>  CFLAGS += -O2
>  CFLAGS += -I lib -I lib/libfdt
> +CFLAGS += -Wa,-mregnames
>  
>  asm-offsets = lib/$(ARCH)/asm-offsets.h
>  include scripts/asm-offsets.mak
> @@ -29,6 +30,7 @@ cflatobjs += lib/util.o
>  cflatobjs += lib/alloc.o
>  cflatobjs += lib/devicetree.o
>  cflatobjs += lib/powerpc/io.o
> +cflatobjs += lib/powerpc/hcall.o
>  
>  libgcc := $(shell $(CC) $(machine) --print-libgcc-file-name)
>  start_addr := $(shell printf "%x\n" $$(( $(phys_base) + $(kernel_offset) )))
> diff --git a/powerpc/cstart64.S b/powerpc/cstart64.S
> index f90828dee1c19..623fd693b02d1 100644
> --- a/powerpc/cstart64.S
> +++ b/powerpc/cstart64.S
> @@ -7,13 +7,34 @@
>   */
>  #define __ASSEMBLY__
>  
> +#define LOAD_REG_IMMEDIATE(reg,expr)		\
> +	lis	reg,(expr)@highest;		\
> +	ori	reg,reg,(expr)@higher;		\
> +	rldicr	reg,reg,32,31;			\
> +	oris	reg,reg,(expr)@h;		\
> +	ori	reg,reg,(expr)@l;
> +
> +#define LOAD_REG_ADDR(reg,name)			\
> +	ld	reg,name@got(r2)
> +
>  .section .init
>  
>  .globl start
>  start:
> +	LOAD_REG_IMMEDIATE(r1, stackptr)
> +	LOAD_REG_IMMEDIATE(r2, tocptr)
> +	bl	hcall_patch_broken_sc1

Come to that, is there any point putting hcall_patch_broken_sc1 in C,
rather than just doing it inline here.

> +	bl	main
> +	bl	exit
>  	b	halt
>  
>  .text
> +.align 3
> +
> +.globl sc1
> +sc1:
> +	sc	1
> +	blr
>  
>  .globl halt
>  halt:

-- 
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-17  2:04 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-15 13:49 [kvm-unit-tests PATCH v4 00/17] ppc64: initial drop Andrew Jones
2016-02-15 13:49 ` Andrew Jones
2016-02-15 13:49 ` [kvm-unit-tests PATCH v4 01/17] arm/arm64: trivial: another assert fix Andrew Jones
2016-02-15 13:49   ` Andrew Jones
2016-02-15 13:49 ` [kvm-unit-tests PATCH v4 02/17] Makefile: cscope: also look in arch shared asm Andrew Jones
2016-02-15 13:49   ` Andrew Jones
2016-02-15 13:49 ` [kvm-unit-tests PATCH v4 03/17] lib: asm-generic: add missing casts Andrew Jones
2016-02-15 13:49   ` Andrew Jones
2016-02-15 13:49 ` [kvm-unit-tests PATCH v4 04/17] devicetree: fix dt_get_memory_params Andrew Jones
2016-02-15 13:49   ` Andrew Jones
2016-02-16  6:11   ` David Gibson
2016-02-16  6:11     ` David Gibson
2016-02-15 13:49 ` [kvm-unit-tests PATCH v4 05/17] arm/arm64: setup improvements Andrew Jones
2016-02-15 13:49   ` Andrew Jones
2016-02-16  6:15   ` David Gibson
2016-02-16  6:15     ` David Gibson
2016-02-15 13:49 ` [kvm-unit-tests PATCH v4 06/17] lib: share arm-selftest utility functions Andrew Jones
2016-02-15 13:49   ` Andrew Jones
2016-02-17  0:14   ` David Gibson
2016-02-17  0:14     ` David Gibson
2016-02-17 12:17     ` Andrew Jones
2016-02-17 12:17       ` Andrew Jones
2016-02-15 13:49 ` [kvm-unit-tests PATCH v4 07/17] config: no need to mix arch makefiles Andrew Jones
2016-02-15 13:49   ` Andrew Jones
2016-02-17  1:18   ` David Gibson
2016-02-17  1:18     ` David Gibson
2016-02-15 13:49 ` [kvm-unit-tests PATCH v4 08/17] powerpc/ppc64: start skeleton framework Andrew Jones
2016-02-15 13:49   ` Andrew Jones
2016-02-15 13:49 ` [kvm-unit-tests PATCH v4 09/17] powerpc/ppc64: ppc-ify makefiles and linker script Andrew Jones
2016-02-15 13:49   ` Andrew Jones
2016-02-17  1:45   ` David Gibson
2016-02-17  1:45     ` David Gibson
2016-02-17 12:21     ` Andrew Jones
2016-02-17 12:21       ` Andrew Jones
2016-02-15 13:49 ` [kvm-unit-tests PATCH v4 10/17] powerpc/ppc64: add a boot rom Andrew Jones
2016-02-15 13:49   ` Andrew Jones
2016-02-17  1:50   ` David Gibson
2016-02-17  1:50     ` David Gibson
2016-02-15 13:49 ` [kvm-unit-tests PATCH v4 11/17] powerpc/ppc64: add hcall support and putchar Andrew Jones
2016-02-15 13:49   ` Andrew Jones
2016-02-17  2:04   ` David Gibson [this message]
2016-02-17  2:04     ` David Gibson
2016-02-17 12:34     ` Andrew Jones
2016-02-17 12:34       ` Andrew Jones
2016-02-15 13:49 ` [kvm-unit-tests PATCH v4 12/17] powerpc/ppc64: adapt arm's setup Andrew Jones
2016-02-15 13:49   ` Andrew Jones
2016-02-17  2:11   ` David Gibson
2016-02-17  2:11     ` David Gibson
2016-02-17 12:45     ` Andrew Jones
2016-02-17 12:45       ` Andrew Jones
2016-02-17 17:34       ` Andrew Jones
2016-02-17 17:34         ` Andrew Jones
2016-02-18  0:05       ` David Gibson
2016-02-18  0:05         ` David Gibson
2016-02-15 13:49 ` [kvm-unit-tests PATCH v4 13/17] powerpc/ppc64: relocate linker VMAs Andrew Jones
2016-02-15 13:49   ` Andrew Jones
2016-02-17  2:14   ` David Gibson
2016-02-17  2:14     ` David Gibson
2016-02-15 13:49 ` [kvm-unit-tests PATCH v4 14/17] powerpc/ppc64: add run script and unittests.cfg Andrew Jones
2016-02-15 13:49   ` Andrew Jones
2016-02-15 13:49 ` [kvm-unit-tests PATCH v4 15/17] mkstandalone: add support for powerpc Andrew Jones
2016-02-15 13:49   ` Andrew Jones
2016-02-17 12:51   ` Andrew Jones
2016-02-17 12:51     ` Andrew Jones
2016-02-15 13:49 ` [kvm-unit-tests PATCH v4 16/17] powerpc/ppc64: add RTAS support Andrew Jones
2016-02-15 13:49   ` Andrew Jones
2016-02-15 13:49 ` [kvm-unit-tests PATCH v4 17/17] powerpc/ppc64: make a fake debug-exit Andrew Jones
2016-02-15 13:49   ` Andrew Jones
2016-02-16 17:32 ` [kvm-unit-tests PATCH v4 00/17] ppc64: initial drop Paolo Bonzini
2016-02-16 17:32   ` Paolo Bonzini
2016-02-16 17:44   ` Andrew Jones
2016-02-16 17:44     ` Andrew Jones

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=20160217020425.GD5239@voom.redhat.com \
    --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=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.