Skip to contentSkip to conversation

KVM for PowerPC 440

PATCH In review Hollis Blanchard 4 participants 18 messages Apr 7, 2008 – Apr 10, 2008

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 KVM for PowerPC 440

Implement initial support for KVM for PowerPC 440. There are just two small prerequisite patches, and then the bulk of the code can't be split easily.

Please review; I would like to submit these for 2.6.26. There is plenty of work to do, both functional and optimization, but this code is sufficient to run unmodified 440 Linux guests on a 440 Linux host. What's your favorite bike shed color?

(Note for current users: since KVM_EXIT_DCR changed, you must rebuild your userspace to match this kernel.)

#1 lore raw

PATCH 1/1 Export tlb_44x_hwater for KVM

1 file changed, 2 insertions(+)

include/asm-powerpc/mmu-44x.h | 2 ++

PowerPC 440 KVM needs to know how many TLB entries are used for the host kernel linear mapping (it does not modify these mappings when switching between guest and host execution).

include/asm-powerpc/mmu-44x.h +2 -0
@@ -53,6 +53,8 @@
 
 #ifndef __ASSEMBLY__
 
+extern unsigned int tlb_44x_hwater;
+
 typedef unsigned long long phys_addr_t;
 
 typedef struct {
Acked-by on v1 1/1
#2 lore raw

Re: [PATCH 1 of 3] [POWERPC 44x] Export tlb_44x_hwater for KVM

Quoted 9 lines · On Mon, 07 Apr 2008 15:53:32 -0500 Hollis Blanchard <[email protected]> wrote:
1 file changed, 2 insertions(+)

include/asm-powerpc/mmu-44x.h | 2 ++

PowerPC 440 KVM needs to know how many TLB entries are used for the host kernel linear mapping (it does not modify these mappings when switching between guest and host execution).

Quoted 17 lines
include/asm-powerpc/mmu-44x.h +2 -0
@@ -53,6 +53,8 @@
 
 #ifndef __ASSEMBLY__
 
+extern unsigned int tlb_44x_hwater;
+
 typedef unsigned long long phys_addr_t;
 
 typedef struct {

_______________________________________________
Linuxppc-dev mailing list
[email protected]
https://ozlabs.org/mailman/listinfo/linuxppc-dev

#3 lore raw

PATCH 1/1 Add DCR access information to struct kvm_run

In reply to Hollis Blanchard
1 file changed, 7 insertions(+)

include/linux/kvm.h | 7 +++++++

Device Control Registers are essentially another address space found on PowerPC 4xx processors, analogous to PIO on x86. DCRs are always 32 bits, and are identified by a 32-bit number. We forward DCR accesses to userspace for emulation.

include/linux/kvm.h +7 -0
@@ -76,6 +76,7 @@
 #define KVM_EXIT_TPR_ACCESS       12
 #define KVM_EXIT_S390_SIEIC       13
 #define KVM_EXIT_S390_RESET       14
+#define KVM_EXIT_DCR              15
 
 /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
 struct kvm_run {
@@ -155,6 +156,12 @@
 #define KVM_S390_RESET_CPU_INIT  8
 #define KVM_S390_RESET_IPL       16
 		__u64 s390_reset_flags;
+		/* KVM_EXIT_DCR */
+		struct {
+			__u32 dcrn;
+			__u32 data;
+			__u8  is_write;
+		} dcr;
 		/* Fix the size of the union. */
 		char padding[256];
 	};
#4 lore raw

Re: [PATCH 2 of 3] [KVM] Add DCR access information to struct kvm_run

Quoted 7 lines · Hollis Blanchard
1 file changed, 7 insertions(+)

include/linux/kvm.h | 7 +++++++

Device Control Registers are essentially another address space found on PowerPC 4xx processors, analogous to PIO on x86. DCRs are always 32 bits, and are identified by a 32-bit number.

Well... 10-bit, actually.

Signature · 4 lines
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
#5 lore raw

Re: [PATCH 2 of 3] [KVM] Add DCR access information to struct kvm_run

Quoted 10 lines · On Monday 07 April 2008 20:11:28 David Gibson wrote:
Quoted 7 lines · Hollis Blanchard
1 file changed, 7 insertions(+)

include/linux/kvm.h | 7 +++++++

Device Control Registers are essentially another address space found on PowerPC 4xx processors, analogous to PIO on x86. DCRs are always 32 bits, and are identified by a 32-bit number.

Well... 10-bit, actually.

The mtdcrux description in the ppc440x6 user manual says the following:

Let the contents of register RA denote a Device Control Register. The contents of GPR[RS] are placed into the designated Device Control
Register.

I take that to mean that we must worry about 32 bits worth of DCR numbers. Perhaps I should say "no more than" rather than "always".

Signature · 8 lines
Hollis Blanchard
IBM Linux Technology Center

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Register now and save $200. Hurry, offer ends at 11:59 p.m., 
Monday, April 7! Use priority code J8TLD2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
#6 lore raw

Re: [PATCH 2 of 3] [KVM] Add DCR access information to struct kvm_run

Quoted 12 lines · Hollis Blanchard
Quoted 10 lines · On Monday 07 April 2008 20:11:28 David Gibson wrote:
Quoted 7 lines · Hollis Blanchard
1 file changed, 7 insertions(+)

include/linux/kvm.h | 7 +++++++

Device Control Registers are essentially another address space found on PowerPC 4xx processors, analogous to PIO on x86. DCRs are always 32 bits, and are identified by a 32-bit number.

Well... 10-bit, actually.

Quoted 8 lines

The mtdcrux description in the ppc440x6 user manual says the following:

Let the contents of register RA denote a Device Control Register. The contents of GPR[RS] are placed into the designated Device Control
Register.

I take that to mean that we must worry about 32 bits worth of DCR numbers. Perhaps I should say "no more than" rather than "always".

I think that's less misleading. mtdcrux is very new, anything which only has the mtdcr instruction certainly can't take DCR numbers above 10 bits, and I would expect that even on chips with mtdcrux the DCR bus is probably still only 10-bits, although it could be extended.

Signature · 10 lines
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

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Register now and save $200. Hurry, offer ends at 11:59 p.m., 
Monday, April 7! Use priority code J8TLD2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
#7 lore raw

Re: [PATCH 2 of 3] [KVM] Add DCR access information to struct kvm_run

Quoted 19 lines · On Monday 07 April 2008 22:54:41 David Gibson wrote:
Quoted 18 lines · Hollis Blanchard
Quoted 10 lines · On Monday 07 April 2008 20:11:28 David Gibson wrote:
Quoted 7 lines · Hollis Blanchard
1 file changed, 7 insertions(+)

include/linux/kvm.h | 7 +++++++

Device Control Registers are essentially another address space found on PowerPC 4xx processors, analogous to PIO on x86. DCRs are always 32 bits, and are identified by a 32-bit number.

Well... 10-bit, actually.

The mtdcrux description in the ppc440x6 user manual says the following:

Let the contents of register RA denote a Device Control Register. The contents of GPR[RS] are placed into the designated Device Control
Register.

Quoted 7 lines
Quoted 2 lines

I take that to mean that we must worry about 32 bits worth of DCR numbers. Perhaps I should say "no more than" rather than "always".

I think that's less misleading. mtdcrux is very new, anything which only has the mtdcr instruction certainly can't take DCR numbers above 10 bits, and I would expect that even on chips with mtdcrux the DCR bus is probably still only 10-bits, although it could be extended.

We're defining a kernel/userspace interface here, and since the hardware is capable of 32-bit DCR numbers, I don't think it makes any sense to not support that. Also, we would just end up placing that number into a u32 anyways, so... :)

Signature · 2 lines
Hollis Blanchard
IBM Linux Technology Center
#8 lore raw

Re: [PATCH 2 of 3] [KVM] Add DCR access information to struct kvm_run

Quoted 28 lines · Hollis Blanchard
Quoted 19 lines · On Monday 07 April 2008 22:54:41 David Gibson wrote:
Quoted 18 lines · Hollis Blanchard
Quoted 10 lines · On Monday 07 April 2008 20:11:28 David Gibson wrote:
Quoted 7 lines · Hollis Blanchard
1 file changed, 7 insertions(+)

include/linux/kvm.h | 7 +++++++

Device Control Registers are essentially another address space found on PowerPC 4xx processors, analogous to PIO on x86. DCRs are always 32 bits, and are identified by a 32-bit number.

Well... 10-bit, actually.

The mtdcrux description in the ppc440x6 user manual says the following:

Let the contents of register RA denote a Device Control Register. The contents of GPR[RS] are placed into the designated Device Control
Register.

Quoted 7 lines
Quoted 2 lines

I take that to mean that we must worry about 32 bits worth of DCR numbers. Perhaps I should say "no more than" rather than "always".

I think that's less misleading. mtdcrux is very new, anything which only has the mtdcr instruction certainly can't take DCR numbers above 10 bits, and I would expect that even on chips with mtdcrux the DCR bus is probably still only 10-bits, although it could be extended.

Quoted 4 lines

We're defining a kernel/userspace interface here, and since the hardware is capable of 32-bit DCR numbers, I don't think it makes any sense to not support that. Also, we would just end up placing that number into a u32 anyways, so... :)

Oh, of course you should represent it as a u32 and support 32-bit addresses, it's only the patch comment I'm objecting to.

Signature · 4 lines
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
#9 lore raw

Re: [PATCH 2 of 3] [KVM] Add DCR access information to struct kvm_run

In reply to David Gibson
Quoted 19 lines · On Tue, 8 Apr 2008 13:54:41 +1000 David Gibson <[email protected]> wrote:
Quoted 18 lines · Hollis Blanchard
Quoted 10 lines · On Monday 07 April 2008 20:11:28 David Gibson wrote:
Quoted 7 lines · Hollis Blanchard
1 file changed, 7 insertions(+)

include/linux/kvm.h | 7 +++++++

Device Control Registers are essentially another address space found on PowerPC 4xx processors, analogous to PIO on x86. DCRs are always 32 bits, and are identified by a 32-bit number.

Well... 10-bit, actually.

The mtdcrux description in the ppc440x6 user manual says the following:

Let the contents of register RA denote a Device Control Register. The contents of GPR[RS] are placed into the designated Device Control
Register.

Quoted 7 lines
Quoted 2 lines

I take that to mean that we must worry about 32 bits worth of DCR numbers. Perhaps I should say "no more than" rather than "always".

I think that's less misleading. mtdcrux is very new, anything which only has the mtdcr instruction certainly can't take DCR numbers above 10 bits, and I would expect that even on chips with mtdcrux the DCR bus is probably still only 10-bits, although it could be extended.

http://www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/C94B06BE313211B887257110006EFFBD/$file/460migrate.pdf

page 4. "DCR Address Space Increased to 32 bits".

I realize that the above is for 460 cores, but I would not be surprised at all if that shows up in a future 440 core. 440x6 already seems to be a conglomeration of some of the features 460 has.

josh

#10 lore raw

PATCH 1/1 PowerPC 440 KVM implementation

In reply to Hollis Blanchard
17 files changed, 3022 insertions(+), 2 deletions(-)
MAINTAINERS                         |    7 
arch/powerpc/Kconfig                |    1 
arch/powerpc/Kconfig.debug          |    1 
arch/powerpc/Makefile               |    1 
arch/powerpc/kernel/asm-offsets.c   |   26 
arch/powerpc/kvm/44x_tlb.c          |  224 +++++++
arch/powerpc/kvm/44x_tlb.h          |   91 +++
arch/powerpc/kvm/Kconfig            |   54 +
arch/powerpc/kvm/Makefile           |   15 
arch/powerpc/kvm/booke_interrupts.S |  436 ++++++++++++++
arch/powerpc/kvm/emulate.c          |  753 +++++++++++++++++++++++++
arch/powerpc/kvm/powerpc.c          | 1031 +++++++++++++++++++++++++++++++++++
include/asm-powerpc/kvm.h           |   53 +
include/asm-powerpc/kvm_asm.h       |   55 +
include/asm-powerpc/kvm_host.h      |  152 +++++
include/asm-powerpc/kvm_para.h      |   38 +
include/asm-powerpc/kvm_ppc.h       |   86 ++

Currently supports only PowerPC 440 Linux guests on 440 hosts. (Only tested with 440EP "Bamboo" guests so far, but with appropriate userspace support other SoC/board combinations should work.)

Interrupt handling: We use IVPR to hijack the host interrupt vectors while running the guest, but hand off decrementer and external interrupts for normal guest processing.

Address spaces: We take advantage of the fact that Linux doesn't use the AS=1 address space (in host or guest), which gives us virtual address space to use for guest mappings. While the guest is running, the host kernel remains mapped in AS=0, but the guest can only use AS=1 mappings.

TLB entries: The TLB entries covering the host linear address space remain present while running the guest (which reduces the overhead of lightweight exits). We keep three copies of the TLB:
- guest TLB: contents of the TLB as the guest sees it
- shadow TLB: the TLB that is actually in hardware while guest is running
- host TLB: to restore TLB state when context switching guest -> host
When a TLB miss occurs because a mapping was not present in the shadow TLB, but was present in the guest TLB, KVM handles the fault without invoking the guest. Large guest pages are backed by multiple 4KB shadow pages through this mechanism.

Instruction emulation: The guest kernel executes at user level, so executing privileged instructions trap into KVM, where we decode and emulate them. Future performance work will focus on reducing the overhead and frequency of these traps.

IO: MMIO and DCR accesses are emulated by userspace. We use virtio for network and block IO, so those drivers must be enabled in the guest. It's possible that some qemu device emulation (e.g. e1000 or rtl8139) may also work with little effort.

MAINTAINERS +7 -0
@@ -2302,6 +2302,13 @@
 W:	kvm.sourceforge.net
 S:	Supported
 
+KERNEL VIRTUAL MACHINE (KVM) FOR POWERPC
+P:	Hollis Blanchard
+M:	[email protected]
+L:	[email protected]
+W:	kvm.sourceforge.net
+S:	Supported
+
 KERNEL VIRTUAL MACHINE For Itanium(KVM/IA64)
 P:	Anthony Xu
 M:	[email protected]
arch/powerpc/Kconfig +1 -0
@@ -722,3 +722,4 @@
 config PPC_LIB_RHEAP
 	bool
 
+source "arch/powerpc/kvm/Kconfig"
arch/powerpc/Kconfig.debug +1 -0
@@ -151,6 +151,7 @@
 
 config PPC_EARLY_DEBUG
 	bool "Early debugging (dangerous)"
+	depends on !KVM
 	help
 	  Say Y to enable some early debugging facilities that may be available
 	  for your processor/board combination. Those facilities are hacks
arch/powerpc/Makefile +1 -0
@@ -147,6 +147,7 @@
 				   arch/powerpc/platforms/
 core-$(CONFIG_MATH_EMULATION)	+= arch/powerpc/math-emu/
 core-$(CONFIG_XMON)		+= arch/powerpc/xmon/
+core-$(CONFIG_KVM) 		+= arch/powerpc/kvm/
 
 drivers-$(CONFIG_OPROFILE)	+= arch/powerpc/oprofile/
 
arch/powerpc/kernel/asm-offsets.c +26 -0
@@ -23,6 +23,7 @@
 #include <linux/mm.h>
 #include <linux/suspend.h>
 #include <linux/hrtimer.h>
+#include <linux/kvm_host.h>
 #ifdef CONFIG_PPC64
 #include <linux/time.h>
 #include <linux/hardirq.h>
@@ -329,5 +330,30 @@
 
 	DEFINE(PGD_TABLE_SIZE, PGD_TABLE_SIZE);
 
+#ifdef CONFIG_KVM
+	DEFINE(TLBE_BYTES, sizeof(struct tlbe));
+
+	DEFINE(VCPU_HOST_STACK, offsetof(struct kvm_vcpu, arch.host_stack));
+	DEFINE(VCPU_HOST_PID, offsetof(struct kvm_vcpu, arch.host_pid));
+	DEFINE(VCPU_HOST_TLB, offsetof(struct kvm_vcpu, arch.host_tlb));
+	DEFINE(VCPU_SHADOW_TLB, offsetof(struct kvm_vcpu, arch.shadow_tlb));
+	DEFINE(VCPU_GPRS, offsetof(struct kvm_vcpu, arch.gpr));
+	DEFINE(VCPU_LR, offsetof(struct kvm_vcpu, arch.lr));
+	DEFINE(VCPU_CR, offsetof(struct kvm_vcpu, arch.cr));
+	DEFINE(VCPU_XER, offsetof(struct kvm_vcpu, arch.xer));
+	DEFINE(VCPU_CTR, offsetof(struct kvm_vcpu, arch.ctr));
+	DEFINE(VCPU_PC, offsetof(struct kvm_vcpu, arch.pc));
+	DEFINE(VCPU_MSR, offsetof(struct kvm_vcpu, arch.msr));
+	DEFINE(VCPU_SPRG4, offsetof(struct kvm_vcpu, arch.sprg4));
+	DEFINE(VCPU_SPRG5, offsetof(struct kvm_vcpu, arch.sprg5));
+	DEFINE(VCPU_SPRG6, offsetof(struct kvm_vcpu, arch.sprg6));
+	DEFINE(VCPU_SPRG7, offsetof(struct kvm_vcpu, arch.sprg7));
+	DEFINE(VCPU_PID, offsetof(struct kvm_vcpu, arch.pid));
+
+	DEFINE(VCPU_LAST_INST, offsetof(struct kvm_vcpu, arch.last_inst));
+	DEFINE(VCPU_FAULT_DEAR, offsetof(struct kvm_vcpu, arch.fault_dear));
+	DEFINE(VCPU_FAULT_ESR, offsetof(struct kvm_vcpu, arch.fault_esr));
+#endif
+
 	return 0;
 }
arch/powerpc/kvm/44x_tlb.c new file +224 -0

224 lines not on this page · raw message

arch/powerpc/kvm/44x_tlb.h new file +91 -0

91 lines not on this page · raw message

arch/powerpc/kvm/Kconfig new file +54 -0

54 lines not on this page · raw message

arch/powerpc/kvm/Makefile new file +15 -0
new file mode 100644
@@ -0,0 +1,15 @@
+#
+# Makefile for Kernel-based Virtual Machine module
+#
+
+EXTRA_CFLAGS += -Ivirt/kvm -Iarch/powerpc/kvm
+
+common-objs = $(addprefix ../../../virt/kvm/, kvm_main.o)
+
+kvm-objs := $(common-objs)
+obj-$(CONFIG_KVM) += kvm.o
+
+kvm-powerpc-objs := powerpc.o emulate.o 44x_tlb.o booke_interrupts.o
+obj-$(CONFIG_KVM_POWERPC) += kvm-powerpc.o
+
+AFLAGS_booke_interrupts.o := -I$(obj)
arch/powerpc/kvm/booke_interrupts.S new file +436 -0

436 lines not on this page · raw message

arch/powerpc/kvm/emulate.c new file +753 -0

753 lines not on this page · raw message

arch/powerpc/kvm/powerpc.c new file +1031 -0

1,031 lines not on this page · raw message

include/asm-powerpc/kvm.h +51 -2

57 lines not on this page · raw message

include/asm-powerpc/kvm_asm.h new file +55 -0

55 lines not on this page · raw message

include/asm-powerpc/kvm_host.h new file +152 -0

152 lines not on this page · raw message

include/asm-powerpc/kvm_para.h new file +38 -0
new file mode 100644
@@ -0,0 +1,38 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ * Copyright IBM Corp. 2008
+ *
+ * Authors: Hollis Blanchard <[email protected]>
+ */
+
+#ifndef __POWERPC_KVM_PARA_H__
+#define __POWERPC_KVM_PARA_H__
+
+#ifdef __KERNEL__
+
+static inline int kvm_para_available(void)
+{
+	return 0;
+}
+
+static inline unsigned int kvm_arch_para_features(void)
+{
+	return 0;
+}
+
+#endif /* __KERNEL__ */
+
+#endif /* __POWERPC_KVM_PARA_H__ */
+
include/asm-powerpc/kvm_ppc.h new file +86 -0

26 lines not on this page · raw message

The rest of this diff is not shown. View the raw message.

Part of the diff is not shown here. View the raw message.

#11 lore raw

Re: [PATCH 3 of 3] [KVM POWERPC] PowerPC 440 KVM implementation

Quoted 3 lines · On Mon, 07 Apr 2008 15:53:34 -0500 Hollis Blanchard <[email protected]> wrote:

Currently supports only PowerPC 440 Linux guests on 440 hosts. (Only tested with 440EP "Bamboo" guests so far, but with appropriate userspace support other SoC/board combinations should work.)

I haven't reviewed the whole patch yet, but lots of it looks pretty clean. A couple comments on some things that made me scratch my head below.

Quoted 25 lines

Interrupt handling: We use IVPR to hijack the host interrupt vectors while running the guest, but hand off decrementer and external interrupts for normal guest processing.

Address spaces: We take advantage of the fact that Linux doesn't use the AS=1 address space (in host or guest), which gives us virtual address space to use for guest mappings. While the guest is running, the host kernel remains mapped in AS=0, but the guest can only use AS=1 mappings.

TLB entries: The TLB entries covering the host linear address space remain present while running the guest (which reduces the overhead of lightweight exits). We keep three copies of the TLB:
- guest TLB: contents of the TLB as the guest sees it
- shadow TLB: the TLB that is actually in hardware while guest is running
- host TLB: to restore TLB state when context switching guest -> host
When a TLB miss occurs because a mapping was not present in the shadow TLB, but was present in the guest TLB, KVM handles the fault without invoking the guest. Large guest pages are backed by multiple 4KB shadow pages through this mechanism.

Instruction emulation: The guest kernel executes at user level, so executing privileged instructions trap into KVM, where we decode and emulate them. Future performance work will focus on reducing the overhead and frequency of these traps.

Quoted 6 lines

IO: MMIO and DCR accesses are emulated by userspace. We use virtio for network and block IO, so those drivers must be enabled in the guest. It's possible that some qemu device emulation (e.g. e1000 or rtl8139) may also work with little effort.

As Olof pointed out, having this in Documentation might be nice.

arch/powerpc/Kconfig.debug line 157

Quoted 11 lines
arch/powerpc/Kconfig.debug +1 -0
@@ -151,6 +151,7 @@
 
 config PPC_EARLY_DEBUG
 	bool "Early debugging (dangerous)"
+	depends on !KVM
 	help
 	  Say Y to enable some early debugging facilities that may be available
 	  for your processor/board combination. Those facilities are hacks

Might want to add a brief explanation as to why this doesn't work with KVM due to the AS conflict.

Quoted 32 lines
arch/powerpc/kvm/44x_tlb.c new file +27 -0
new file mode 100644
@@ -0,0 +1,224 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ * Copyright IBM Corp. 2007
+ *
+ * Authors: Hollis Blanchard <[email protected]>
+ */
+
+#include <linux/types.h>
+#include <linux/string.h>
+#include <linux/kvm_host.h>
+#include <linux/highmem.h>
+#include <asm/mmu-44x.h>
+#include <asm/kvm_ppc.h>
+
+#include "44x_tlb.h"

arch/powerpc/kvm/44x_tlb.c line 37

Quoted 10 lines
arch/powerpc/kvm/44x_tlb.c new file +10 -0
+
+#define PPC44x_TLB_USER_PERM_MASK (PPC44x_TLB_UX|PPC44x_TLB_UR|PPC44x_TLB_UW)
+#define PPC44x_TLB_SUPER_PERM_MASK (PPC44x_TLB_SX|PPC44x_TLB_SR|PPC44x_TLB_SW)
+
+static unsigned int kvmppc_tlb_44x_pos;
+
+static u32 kvmppc_44x_tlb_shadow_attrib(u32 attrib, int usermode)
+{
+	/* XXX remove mask when Linux is fixed */
+	attrib &= 0xf03f;

What does that mean? Is this the "44x TLB handler writes to reserved fields" issue? If so, could you comment that a little more verbosely?

Or you could just send a patch to fix Linux... ;).

Quoted 14 lines
arch/powerpc/kvm/44x_tlb.c new file +14 -0
+
+	if (!usermode) {
+		/* Guest is in supervisor mode, so we need to translate guest
+		 * supervisor permissions into user permissions. */
+		attrib &= ~PPC44x_TLB_USER_PERM_MASK;
+		attrib |= (attrib & PPC44x_TLB_SUPER_PERM_MASK) << 3;
+	}
+
+	/* Make sure host can always access this memory. */
+	attrib |= PPC44x_TLB_SX|PPC44x_TLB_SR|PPC44x_TLB_SW;
+
+	return attrib;
+}
+

<snip>

Quoted 24 lines
arch/powerpc/kvm/emulate.c new file +19 -0
new file mode 100644
@@ -0,0 +1,753 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ * Copyright IBM Corp. 2007
+ *
+ * Authors: Hollis Blanchard <[email protected]>
+ */
+

arch/powerpc/kvm/emulate.c line 29

Quoted 10 lines
arch/powerpc/kvm/emulate.c new file +10 -0
+#include <linux/jiffies.h>
+#include <linux/timer.h>
+#include <linux/types.h>
+#include <linux/string.h>
+#include <linux/kvm_host.h>
+
+#include <asm/dcr.h>
+#include <asm/time.h>
+#include <asm/byteorder.h>
+#include <asm/kvm_ppc.h>

#include <asm/dcr-regs.h>

arch/powerpc/kvm/emulate.c line 34

Quoted 5 lines
arch/powerpc/kvm/emulate.c new file +5 -0
+
+#include "44x_tlb.h"
+
+#define DCRN_CPR0_CFGADDR	0xc
+#define DCRN_CPR0_CFGDATA	0xd

Remove these.

<snip>

Quoted 15 lines
arch/powerpc/kvm/emulate.c new file +15 -0
+int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
+{
+	u32 inst = vcpu->arch.last_inst;
+	u32 ea;
+	int ra;
+	int rb;
+	int rc;
+	int rs;
+	int rt;
+	int sprn;
+	int dcrn;
+	enum emulation_result emulated = EMULATE_DONE;
+	int advance = 1;
+
+	switch (get_op(inst)) {

<snip>

Quoted 26 lines
arch/powerpc/kvm/emulate.c new file +26 -0
+		case 323:                                       /* mfdcr */
+			dcrn = get_dcrn(inst);
+			rt = get_rt(inst);
+
+			/* emulate some access in kernel */
+			switch (dcrn) {
+			case DCRN_CPR0_CFGADDR:
+				vcpu->arch.gpr[rt] = vcpu->arch.cpr0_cfgaddr;
+				break;
+			case DCRN_CPR0_CFGDATA:
+				local_irq_disable();
+				mtdcr(DCRN_CPR0_CFGADDR,
+				      vcpu->arch.cpr0_cfgaddr);
+				vcpu->arch.gpr[rt] = mfdcr(DCRN_CPR0_CFGDATA);
+				local_irq_enable();
+				break;
+			default:
+				run->dcr.dcrn = dcrn;
+				run->dcr.data =  0;
+				run->dcr.is_write = 0;
+				vcpu->arch.io_gpr = rt;
+				vcpu->arch.dcr_needed = 1;
+				emulated = EMULATE_DO_DCR;
+			}
+
+			break;

<snip>

Quoted 8 lines
arch/powerpc/kvm/emulate.c new file +8 -0
+		case 451:                                       /* mtdcr */
+			dcrn = get_dcrn(inst);
+			rs = get_rs(inst);
+
+			/* emulate some access in kernel */
+			switch (dcrn) {
+			case DCRN_CPR0_CFGADDR:
+				vcpu->arch.cpr0_cfgaddr = vcpu->arch.gpr[rs];

arch/powerpc/kvm/emulate.c line 475

Quoted 10 lines
arch/powerpc/kvm/emulate.c new file +10 -0
+				break;
+			default:
+				run->dcr.dcrn = dcrn;
+				run->dcr.data = vcpu->arch.gpr[rs];
+				run->dcr.is_write = 1;
+				vcpu->arch.dcr_needed = 1;
+				emulated = EMULATE_DO_DCR;
+			}
+
+			break;

What exactly are those doing? I'm confused as to why the CPR0 DCRs are special cased. Also, you don't seem to actually be doing much on storing guest DCRs, so can I assume they aren't really needed at runtime?

josh

#12 lore raw

Re: [PATCH 3 of 3] [KVM POWERPC] PowerPC 440 KVM implementation

Quoted 36 lines · On Monday 07 April 2008 21:12:40 Josh Boyer wrote:

On Mon, 07 Apr 2008 15:53:34 -0500

Quoted 3 lines · Hollis Blanchard

Currently supports only PowerPC 440 Linux guests on 440 hosts. (Only tested with 440EP "Bamboo" guests so far, but with appropriate userspace support other SoC/board combinations should work.)

I haven't reviewed the whole patch yet, but lots of it looks pretty clean. A couple comments on some things that made me scratch my head below.

Quoted 25 lines

Interrupt handling: We use IVPR to hijack the host interrupt vectors while running the guest, but hand off decrementer and external interrupts for normal guest processing.

Address spaces: We take advantage of the fact that Linux doesn't use the AS=1 address space (in host or guest), which gives us virtual address space to use for guest mappings. While the guest is running, the host kernel remains mapped in AS=0, but the guest can only use AS=1 mappings.

TLB entries: The TLB entries covering the host linear address space remain present while running the guest (which reduces the overhead of lightweight exits). We keep three copies of the TLB:
- guest TLB: contents of the TLB as the guest sees it
- shadow TLB: the TLB that is actually in hardware while guest is
running - host TLB: to restore TLB state when context switching guest -> host When a TLB miss occurs because a mapping was not present in the shadow TLB, but was present in the guest TLB, KVM handles the fault without invoking the guest. Large guest pages are backed by multiple 4KB shadow pages through this mechanism.

Instruction emulation: The guest kernel executes at user level, so executing privileged instructions trap into KVM, where we decode and emulate them. Future performance work will focus on reducing the overhead and frequency of these traps.

Quoted 8 lines
Quoted 6 lines

IO: MMIO and DCR accesses are emulated by userspace. We use virtio for network and block IO, so those drivers must be enabled in the guest. It's possible that some qemu device emulation (e.g. e1000 or rtl8139) may also work with little effort.

As Olof pointed out, having this in Documentation might be nice.

Yeah, the trouble is that a book could be written on the subject. (OK, a short book. At least a paper.) Anyways, I will provide something...

Quoted 5 lines
Quoted 5 lines
arch/powerpc/Kconfig.debug +0 -0
@@ -151,6 +151,7 @@
 
Quoted 9 lines

arch/powerpc/Kconfig.debug line 157

Quoted 6 lines
arch/powerpc/Kconfig.debug +1 -0
 config PPC_EARLY_DEBUG
 	bool "Early debugging (dangerous)"
+	depends on !KVM
 	help
 	  Say Y to enable some early debugging facilities that may be available
 	  for your processor/board combination. Those facilities are hacks

Might want to add a brief explanation as to why this doesn't work with KVM due to the AS conflict.

Will do.

Quoted 37 lines
Quoted 37 lines
arch/powerpc/kvm/44x_tlb.c new file +13 -0
new file mode 100644
@@ -0,0 +1,224 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,

USA. + *
+ * Copyright IBM Corp. 2007
+ *
+ * Authors: Hollis Blanchard <[email protected]>
+ */

arch/powerpc/kvm/44x_tlb.c new file +11 -0
+
+#include <linux/types.h>
+#include <linux/string.h>
+#include <linux/kvm_host.h>
+#include <linux/highmem.h>
+#include <asm/mmu-44x.h>
+#include <asm/kvm_ppc.h>
+
+#include "44x_tlb.h"
+
+#define PPC44x_TLB_USER_PERM_MASK

(PPC44x_TLB_UX|PPC44x_TLB_UR|PPC44x_TLB_UW) +#define PPC44x_TLB_SUPER_PERM_MASK (PPC44x_TLB_SX|PPC44x_TLB_SR|PPC44x_TLB_SW) + +static unsigned int kvmppc_tlb_44x_pos;

Quoted 8 lines

arch/powerpc/kvm/44x_tlb.c line 37

Quoted 5 lines
arch/powerpc/kvm/44x_tlb.c new file +5 -0
+
+static u32 kvmppc_44x_tlb_shadow_attrib(u32 attrib, int usermode)
+{
+	/* XXX remove mask when Linux is fixed */
+	attrib &= 0xf03f;

What does that mean? Is this the "44x TLB handler writes to reserved fields" issue? If so, could you comment that a little more verbosely?

Yup, you're right. Actually, what I should really do is this:

	attrib &= PPC44x_TLB_ATTR_MASK | PPC44x_TLB_PERM_MASK;
Quoted 1 line

Or you could just send a patch to fix Linux... ;).

I had a look at it once, but didn't have time to grok the assembly bit manipulations. I guess nobody else has either. :)

Quoted 54 lines
Quoted 14 lines
arch/powerpc/kvm/44x_tlb.c new file +14 -0
+
+	if (!usermode) {
+		/* Guest is in supervisor mode, so we need to translate guest
+		 * supervisor permissions into user permissions. */
+		attrib &= ~PPC44x_TLB_USER_PERM_MASK;
+		attrib |= (attrib & PPC44x_TLB_SUPER_PERM_MASK) << 3;
+	}
+
+	/* Make sure host can always access this memory. */
+	attrib |= PPC44x_TLB_SX|PPC44x_TLB_SR|PPC44x_TLB_SW;
+
+	return attrib;
+}
+

<snip>

Quoted 24 lines
arch/powerpc/kvm/emulate.c new file +13 -0
new file mode 100644
@@ -0,0 +1,753 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,

USA. + *
+ * Copyright IBM Corp. 2007
+ *
+ * Authors: Hollis Blanchard <[email protected]>
+ */

arch/powerpc/kvm/emulate.c new file +1 -0
+

arch/powerpc/kvm/emulate.c line 29

Quoted 10 lines
arch/powerpc/kvm/emulate.c new file +10 -0
+#include <linux/jiffies.h>
+#include <linux/timer.h>
+#include <linux/types.h>
+#include <linux/string.h>
+#include <linux/kvm_host.h>
+
+#include <asm/dcr.h>
+#include <asm/time.h>
+#include <asm/byteorder.h>
+#include <asm/kvm_ppc.h>

#include <asm/dcr-regs.h>

Quoted 7 lines

arch/powerpc/kvm/emulate.c line 34

Quoted 5 lines
arch/powerpc/kvm/emulate.c new file +5 -0
+
+#include "44x_tlb.h"
+
+#define DCRN_CPR0_CFGADDR	0xc
+#define DCRN_CPR0_CFGDATA	0xd

Remove these.

OK.

Quoted 64 lines

<snip>

Quoted 15 lines

+int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu) +{

arch/powerpc/kvm/emulate.c new file +13 -0
+	u32 inst = vcpu->arch.last_inst;
+	u32 ea;
+	int ra;
+	int rb;
+	int rc;
+	int rs;
+	int rt;
+	int sprn;
+	int dcrn;
+	enum emulation_result emulated = EMULATE_DONE;
+	int advance = 1;
+
+	switch (get_op(inst)) {

<snip>

Quoted 26 lines
arch/powerpc/kvm/emulate.c new file +26 -0
+		case 323:                                       /* mfdcr */
+			dcrn = get_dcrn(inst);
+			rt = get_rt(inst);
+
+			/* emulate some access in kernel */
+			switch (dcrn) {
+			case DCRN_CPR0_CFGADDR:
+				vcpu->arch.gpr[rt] = vcpu->arch.cpr0_cfgaddr;
+				break;
+			case DCRN_CPR0_CFGDATA:
+				local_irq_disable();
+				mtdcr(DCRN_CPR0_CFGADDR,
+				      vcpu->arch.cpr0_cfgaddr);
+				vcpu->arch.gpr[rt] = mfdcr(DCRN_CPR0_CFGDATA);
+				local_irq_enable();
+				break;
+			default:
+				run->dcr.dcrn = dcrn;
+				run->dcr.data =  0;
+				run->dcr.is_write = 0;
+				vcpu->arch.io_gpr = rt;
+				vcpu->arch.dcr_needed = 1;
+				emulated = EMULATE_DO_DCR;
+			}
+
+			break;

<snip>

Quoted 15 lines
arch/powerpc/kvm/emulate.c new file +15 -0
+		case 451:                                       /* mtdcr */
+			dcrn = get_dcrn(inst);
+			rs = get_rs(inst);
+
+			/* emulate some access in kernel */
+			switch (dcrn) {
+			case DCRN_CPR0_CFGADDR:
+				vcpu->arch.cpr0_cfgaddr = vcpu->arch.gpr[rs];
+				break;
+			default:
+				run->dcr.dcrn = dcrn;
+				run->dcr.data = vcpu->arch.gpr[rs];
+				run->dcr.is_write = 1;
+				vcpu->arch.dcr_needed = 1;
+				emulated = EMULATE_DO_DCR;
Quoted 8 lines

arch/powerpc/kvm/emulate.c line 149

Quoted 3 lines
arch/powerpc/kvm/emulate.c new file +3 -0
+			}
+
+			break;

What exactly are those doing? I'm confused as to why the CPR0 DCRs are special cased. Also, you don't seem to actually be doing much on storing guest DCRs, so can I assume they aren't really needed at runtime?

A 440 cuImage accesses CPR0 DCRs to determine the timebase frequency. Ordinarily, these DCR accesses would be handed to userspace (qemu) to emulate.

To emulate this in userspace, we could extract the TB freq from the host's /proc/device-tree (userspace can't directly access DCRs), but honestly I didn't want to deal with the math necessary to decompose that back into the various CPR0 register fields. So instead I special-case CPR0 reads in the kernel.

The guest needs to know the real/host timebase frequency anyways, since it can execute mftb without host involvement, and will get very confused if the timebase increments at a different frequency than it expects.

Signature · 8 lines
Hollis Blanchard
IBM Linux Technology Center

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Register now and save $200. Hurry, offer ends at 11:59 p.m., 
Monday, April 7! Use priority code J8TLD2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
#13 lore raw

Re: [PATCH 3 of 3] [KVM POWERPC] PowerPC 440 KVM implementation

In reply to Hollis Blanchard
Quoted 50 lines · Hollis Blanchard
include/asm-powerpc/kvm.h +19 -0
@@ -1,6 +1,55 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ * Copyright IBM Corp. 2007
+ *
+ * Authors: Hollis Blanchard <[email protected]>
+ */
+
  #ifndef __LINUX_KVM_POWERPC_H
  #define __LINUX_KVM_POWERPC_H

include/asm-powerpc/kvm.h +1 -1
-/* powerpc does not support KVM */
+#include <asm/types.h>

include/asm-powerpc/kvm.h +21 -1
-#endif
+struct kvm_regs {
+       __u32 pc;
+       __u32 cr;
+       __u32 ctr;
+       __u32 lr;
+       __u32 xer;
+       __u32 msr;
+       __u32 srr0;
+       __u32 srr1;
+       __u32 pid;
+
+       __u32 sprg0;
+       __u32 sprg1;
+       __u32 sprg2;
+       __u32 sprg3;
+       __u32 sprg4;
+       __u32 sprg5;
+       __u32 sprg6;
+       __u32 sprg7;
+
+       __u64 fpr[32];

include/asm-powerpc/kvm.h line 55

Quoted 10 lines
include/asm-powerpc/kvm.h +10 -0
+       __u32 gpr[32];
+};
+
+struct kvm_sregs {
+};
+
+struct kvm_fpu {
+};
+
+#endif /* __LINUX_KVM_POWERPC_H */

Since this defines part of the ABI, it would be nice if it's possible to have it in a platform independent way. Most of the registers here should probably become "unsigned long" instead of "__u32" so that the definition can be used for a potential 64 bit port.

Also, I noticed that you lump everything into kvm_regs, instead of using sregs for stuff like srr0 and kvm_fpu for the fprs. What is the reason for that?

	Arnd <><

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Register now and save $200. Hurry, offer ends at 11:59 p.m., Monday, April 7! Use priority code J8TLD2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone

#14 lore raw

Re: [PATCH 3 of 3] [KVM POWERPC] PowerPC 440 KVM implementation

Quoted 58 lines · On Monday 07 April 2008 21:58:17 Arnd Bergmann wrote:
Quoted 57 lines · Hollis Blanchard
include/asm-powerpc/kvm.h +13 -0
@@ -1,6 +1,55 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,

USA. + *
+ * Copyright IBM Corp. 2007
+ *
+ * Authors: Hollis Blanchard <[email protected]>
+ */
+
 #ifndef __LINUX_KVM_POWERPC_H
 #define __LINUX_KVM_POWERPC_H

include/asm-powerpc/kvm.h +1 -1
-/* powerpc does not support KVM */
+#include <asm/types.h>

include/asm-powerpc/kvm.h +28 -1
-#endif
+struct kvm_regs {
+       __u32 pc;
+       __u32 cr;
+       __u32 ctr;
+       __u32 lr;
+       __u32 xer;
+       __u32 msr;
+       __u32 srr0;
+       __u32 srr1;
+       __u32 pid;
+
+       __u32 sprg0;
+       __u32 sprg1;
+       __u32 sprg2;
+       __u32 sprg3;
+       __u32 sprg4;
+       __u32 sprg5;
+       __u32 sprg6;
+       __u32 sprg7;
+
+       __u64 fpr[32];
+       __u32 gpr[32];
+};
+
+struct kvm_sregs {
+};
+
+struct kvm_fpu {
Quoted 8 lines

include/asm-powerpc/kvm.h line 55

Quoted 3 lines
include/asm-powerpc/kvm.h +3 -0
+};
+
+#endif /* __LINUX_KVM_POWERPC_H */

Since this defines part of the ABI, it would be nice if it's possible to have it in a platform independent way. Most of the registers here should probably become "unsigned long" instead of "__u32" so that the definition can be used for a potential 64 bit port.

If there is one thing I have learned in my various porting efforts, it's that using a variable-sized type in an interface is just begging for trouble.

x86 uses fixed 64-bit variables here (even with x86-32), so that might be the right solution here.

Quoted 3 lines

Also, I noticed that you lump everything into kvm_regs, instead of using sregs for stuff like srr0 and kvm_fpu for the fprs. What is the reason for that?

The FPRs and SPRs are only really useful for two things here: debugger support and migration. We don't really support either at the moment, so this part of the user/kernel ABI will need change as we implement those.

I will move the FPR stuff into kvm_fpu though. (I think when I originally wrote this, kvm_fpu was defined to be x86 stuff, but it obviously isn't now...)

Signature · 8 lines
Hollis Blanchard
IBM Linux Technology Center

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Register now and save $200. Hurry, offer ends at 11:59 p.m., 
Monday, April 7! Use priority code J8TLD2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
#15 lore raw

Re: [kvm-ppc-devel] [PATCH 3 of 3] [KVM POWERPC] PowerPC 440 KVM implementation

Quoted 5 lines · Hollis Blanchard

If there is one thing I have learned in my various porting efforts, it's that using a variable-sized type in an interface is just begging for trouble.

x86 uses fixed 64-bit variables here (even with x86-32), so that might be the right solution here.

Right, I think there was even a conference presentation about this topic done by one of us, right?

	Arnd <><

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Register now and save $200. Hurry, offer ends at 11:59 p.m., Monday, April 7! Use priority code J8TLD2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone

#16 lore raw
In reply to Hollis Blanchard
Quoted 7 lines · On Mon, 07 Apr 2008 15:53:31 -0500 Hollis Blanchard <[email protected]> wrote:

Implement initial support for KVM for PowerPC 440. There are just two small prerequisite patches, and then the bulk of the code can't be split easily.

Please review; I would like to submit these for 2.6.26. There is plenty of work to do, both functional and optimization, but this code is sufficient to run unmodified 440 Linux guests on a 440 Linux host. What's your favorite bike shed color?

Who's tree are you looking to get this patch set into?

josh

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone

#17 lore raw
Quoted 7 lines · On Thursday 10 April 2008 06:55:18 Josh Boyer wrote:

On Mon, 07 Apr 2008 15:53:31 -0500

Quoted 4 lines · Hollis Blanchard

Implement initial support for KVM for PowerPC 440. There are just two small prerequisite patches, and then the bulk of the code can't be split easily.

Quoted 6 lines
Quoted 4 lines

Please review; I would like to submit these for 2.6.26. There is plenty of work to do, both functional and optimization, but this code is sufficient to run unmodified 440 Linux guests on a 440 Linux host. What's your favorite bike shed color?

Who's tree are you looking to get this patch set into?

Since the only PPC-specific change is patch 1, if I can get your Acked-by for it I will send it via Avi.

Signature · 2 lines
Hollis Blanchard
IBM Linux Technology Center