From patchwork Wed Nov 18 00:13:12 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Graf X-Patchwork-Id: 60868 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 nAI0DQfL029092 for ; Wed, 18 Nov 2009 00:13:27 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756208AbZKRANP (ORCPT ); Tue, 17 Nov 2009 19:13:15 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754034AbZKRANP (ORCPT ); Tue, 17 Nov 2009 19:13:15 -0500 Received: from cantor.suse.de ([195.135.220.2]:58869 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756169AbZKRANL (ORCPT ); Tue, 17 Nov 2009 19:13:11 -0500 Received: from relay1.suse.de (mail2.suse.de [195.135.221.8]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.suse.de (Postfix) with ESMTP id 474CC8D893; Wed, 18 Nov 2009 01:13:15 +0100 (CET) From: Alexander Graf To: kvm list Cc: virtualization@lists.linux-foundation.org, Glauber Costa , Avi Kivity , Nick Piggin Subject: [PATCH 3/3] Split the KVM pv-ops support by feature Date: Wed, 18 Nov 2009 01:13:12 +0100 Message-Id: <1258503192-14246-4-git-send-email-agraf@suse.de> X-Mailer: git-send-email 1.6.0.2 In-Reply-To: <1258503192-14246-1-git-send-email-agraf@suse.de> References: <1258503192-14246-1-git-send-email-agraf@suse.de> Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 8c150b6..97d4f92 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -522,11 +522,38 @@ config KVM_CLOCK config KVM_GUEST bool "KVM Guest support" - select PARAVIRT_ALL + select PARAVIRT ---help--- This option enables various optimizations for running under the KVM hypervisor. +config KVM_IODELAY + bool "KVM IO-delay support" + depends on KVM_GUEST + select PARAVIRT_CPU + ---help--- + Usually we wait for PIO access to complete. When inside KVM there's + no need to do that, as we know that we're not going through a bus, + but process PIO requests instantly. + + This option disables PIO waits, but drags in CPU-bound pv-ops. Thus + you will probably get more speed loss than speedup using this option. + + If in doubt, say N. + +config KVM_MMU + bool "KVM PV MMU support" + depends on KVM_GUEST + select PARAVIRT_MMU + ---help--- + This option enables the paravirtualized MMU for KVM. In most cases + it's pretty useless and shouldn't be used. + + It will only cost you performance, because it drags in pv-ops for + memory management. + + If in doubt, say N. + source "arch/x86/lguest/Kconfig" config PARAVIRT diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 63b0ec8..7e0207f 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -29,6 +29,16 @@ #include #include +#ifdef CONFIG_KVM_IODELAY +/* + * No need for any "IO delay" on KVM + */ +static void kvm_io_delay(void) +{ +} +#endif /* CONFIG_KVM_IODELAY */ + +#ifdef CONFIG_KVM_MMU #define MMU_QUEUE_SIZE 1024 struct kvm_para_state { @@ -43,13 +53,6 @@ static struct kvm_para_state *kvm_para_state(void) return &per_cpu(para_state, raw_smp_processor_id()); } -/* - * No need for any "IO delay" on KVM - */ -static void kvm_io_delay(void) -{ -} - static void kvm_mmu_op(void *buffer, unsigned len) { int r; @@ -194,15 +197,19 @@ static void kvm_leave_lazy_mmu(void) mmu_queue_flush(state); paravirt_leave_lazy_mmu(); } +#endif /* CONFIG_KVM_MMU */ static void __init paravirt_ops_setup(void) { pv_info.name = "KVM"; pv_info.paravirt_enabled = 1; +#ifdef CONFIG_KVM_IODELAY if (kvm_para_has_feature(KVM_FEATURE_NOP_IO_DELAY)) pv_cpu_ops.io_delay = kvm_io_delay; +#endif +#ifdef CONFIG_KVM_MMU 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; @@ -226,6 +233,7 @@ static void __init paravirt_ops_setup(void) pv_mmu_ops.lazy_mode.enter = kvm_enter_lazy_mmu; pv_mmu_ops.lazy_mode.leave = kvm_leave_lazy_mmu; } +#endif /* CONFIG_KVM_MMU */ #ifdef CONFIG_X86_IO_APIC no_timer_check = 1; #endif