From patchwork Tue May 5 13:24:48 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gregory Haskins X-Patchwork-Id: 21864 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n45DQHuu018729 for ; Tue, 5 May 2009 13:26:17 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753702AbZEENZD (ORCPT ); Tue, 5 May 2009 09:25:03 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753054AbZEENZB (ORCPT ); Tue, 5 May 2009 09:25:01 -0400 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 Received: from dev.haskins.net (prv-ext-foundry1.gns.novell.com [137.65.251.240]) by victor.provo.novell.com with ESMTP (TLS encrypted); Tue, 05 May 2009 07:24:49 -0600 Received: from dev.haskins.net (localhost [127.0.0.1]) by dev.haskins.net (Postfix) with ESMTP id 11D764641E6; Tue, 5 May 2009 09:24:48 -0400 (EDT) From: Gregory Haskins Subject: [RFC PATCH 3/3] kvm: add pv_cpu_ops.hypercall support to the guest To: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org, avi@redhat.com Date: Tue, 05 May 2009 09:24:48 -0400 Message-ID: <20090505132447.19891.22935.stgit@dev.haskins.net> In-Reply-To: <20090505132005.19891.78436.stgit@dev.haskins.net> References: <20090505132005.19891.78436.stgit@dev.haskins.net> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Signed-off-by: Gregory Haskins --- arch/x86/kernel/kvm.c | 22 ++++++++++++++++++++++ 1 files changed, 22 insertions(+), 0 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html 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;