From mboxrd@z Thu Jan 1 00:00:00 1970 From: ehrhardt@linux.vnet.ibm.com Date: Wed, 30 Jan 2008 12:31:56 +0000 Subject: [kvm-ppc-devel] [PATCH] [2/4] Add per guest pvr (userspace) Message-Id: <12016963192977-git-send-email-ehrhardt@linux.vnet.ibm.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: kvm-ppc@vger.kernel.org Subject: [PATCH] [2/4] Add per guest pvr (userspace) From: Christian Ehrhardt This adds a per VM variable called pvr in imitation of the hardware spr. It also adds a interface to get/set this variable to the vm ioctl. Atm it uses non-real pvr values to allow us to differ on runtime e.g. between ppc440 and e500 guests. Signed-off-by: Christian Ehrhardt --- libkvm/libkvm-powerpc.c | 21 ++++++++++++++++++++- libkvm/libkvm.h | 4 ++++ qemu/vl.c | 7 +++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/libkvm/libkvm-powerpc.c b/libkvm/libkvm-powerpc.c --- a/libkvm/libkvm-powerpc.c +++ b/libkvm/libkvm-powerpc.c @@ -25,6 +25,10 @@ #include "kvm-powerpc.h" #include #include +#include + +/* need to be available prior to kvm_arch_create and prior to qemu env setup */ +static struct kvm_pvr kvm_guest_pvr; int handle_dcr(struct kvm_run *run, kvm_context_t kvm, int vcpu) { @@ -85,10 +89,25 @@ void kvm_show_regs(kvm_context_t kvm, in fflush(stdout); } +void kvm_init_guest_pvr(uint32_t guest_pvr) +{ + kvm_guest_pvr.pvr = guest_pvr; +} + int kvm_arch_create(kvm_context_t kvm, unsigned long phys_mem_bytes, void **vm_mem) { - return 0; + int r = 0; + + if (kvm_guest_pvr.pvr = 0) + /* we might want to set a useful default here */ + fprintf(stderr, "%s warning - pvr not set\n", __func__); + + r = ioctl(kvm->vm_fd, KVM_SET_GUEST_PVR, &kvm_guest_pvr); + if (r) + fprintf(stderr, "%s failed (r='%d')\n", __func__, r); + + return r; } int kvm_arch_create_default_phys_mem(kvm_context_t kvm, diff --git a/libkvm/libkvm.h b/libkvm/libkvm.h --- a/libkvm/libkvm.h +++ b/libkvm/libkvm.h @@ -556,4 +556,8 @@ int kvm_enable_vapic(kvm_context_t kvm, #endif +#if defined(__powerpc__) +void kvm_init_guest_pvr(uint32_t guest_pvr); #endif + +#endif diff --git a/qemu/vl.c b/qemu/vl.c --- a/qemu/vl.c +++ b/qemu/vl.c @@ -9319,6 +9319,13 @@ int main(int argc, char **argv) #else #define KVM_EXTRA_PAGES 0 #endif + +#ifdef TARGET_PPC +/* initialize wanted pvr in libkvm prior to first create call */ +if (machine = &bamboo_machine) + kvm_init_guest_pvr(KVM_PPC_PVR_PPC44X); +#endif + if (kvm_allowed) { phys_ram_size += KVM_EXTRA_PAGES * TARGET_PAGE_SIZE; if (kvm_qemu_create_context() < 0) { ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ kvm-ppc-devel mailing list kvm-ppc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel