From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gregory Haskins Subject: [RFC PATCH 3/3] kvm: add pv_cpu_ops.hypercall support to the guest Date: Tue, 05 May 2009 09:24:48 -0400 Message-ID: <20090505132447.19891.22935.stgit@dev.haskins.net> References: <20090505132005.19891.78436.stgit@dev.haskins.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, avi@redhat.com To: linux-kernel@vger.kernel.org Return-path: Received: from victor.provo.novell.com ([137.65.250.26]:54443 "EHLO victor.provo.novell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752162AbZEENY5 (ORCPT ); Tue, 5 May 2009 09:24:57 -0400 In-Reply-To: <20090505132005.19891.78436.stgit@dev.haskins.net> Sender: kvm-owner@vger.kernel.org List-ID: Signed-off-by: Gregory Haskins --- arch/x86/kernel/kvm.c | 22 ++++++++++++++++++++++ 1 files changed, 22 insertions(+), 0 deletions(-) diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 33019dd..d299ed5 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -50,6 +50,26 @@ static void kvm_io_delay(void) { } +static long _kvm_hypercall(unsigned long nr, + unsigned long *args, + size_t count) +{ + switch (count) { + case 0: + return kvm_hypercall0(nr); + case 1: + return kvm_hypercall1(nr, args[0]); + case 2: + return kvm_hypercall2(nr, args[0], args[1]); + case 3: + return kvm_hypercall3(nr, args[0], args[1], args[2]); + case 4: + return kvm_hypercall4(nr, args[0], args[1], args[2], args[3]); + default: + return -EINVAL; + } +} + static void kvm_mmu_op(void *buffer, unsigned len) { int r; @@ -207,6 +227,8 @@ static void paravirt_ops_setup(void) if (kvm_para_has_feature(KVM_FEATURE_NOP_IO_DELAY)) pv_cpu_ops.io_delay = kvm_io_delay; + pv_cpu_ops.hypercall = _kvm_hypercall; + if (kvm_para_has_feature(KVM_FEATURE_MMU_OP)) { pv_mmu_ops.set_pte = kvm_set_pte; pv_mmu_ops.set_pte_at = kvm_set_pte_at;