Commit 0cf1bfd2 authored by Marcelo Tosatti's avatar Marcelo Tosatti Committed by Avi Kivity

x86: KVM guest: add basic paravirt support

Add basic KVM paravirt support. Avoid vm-exits on IO delays.
Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: default avatarAvi Kivity <avi@qumranet.com>
parent a28e4f5a
...@@ -384,6 +384,14 @@ config KVM_CLOCK ...@@ -384,6 +384,14 @@ config KVM_CLOCK
provides the guest with timing infrastructure such as time of day, and provides the guest with timing infrastructure such as time of day, and
system time system time
config KVM_GUEST
bool "KVM Guest support"
select PARAVIRT
depends on !(X86_VISWS || X86_VOYAGER)
help
This option enables various optimizations for running under the KVM
hypervisor.
source "arch/x86/lguest/Kconfig" source "arch/x86/lguest/Kconfig"
config PARAVIRT config PARAVIRT
......
...@@ -80,6 +80,7 @@ obj-$(CONFIG_DEBUG_RODATA_TEST) += test_rodata.o ...@@ -80,6 +80,7 @@ obj-$(CONFIG_DEBUG_RODATA_TEST) += test_rodata.o
obj-$(CONFIG_DEBUG_NX_TEST) += test_nx.o obj-$(CONFIG_DEBUG_NX_TEST) += test_nx.o
obj-$(CONFIG_VMI) += vmi_32.o vmiclock_32.o obj-$(CONFIG_VMI) += vmi_32.o vmiclock_32.o
obj-$(CONFIG_KVM_GUEST) += kvm.o
obj-$(CONFIG_KVM_CLOCK) += kvmclock.o obj-$(CONFIG_KVM_CLOCK) += kvmclock.o
obj-$(CONFIG_PARAVIRT) += paravirt.o paravirt_patch_$(BITS).o obj-$(CONFIG_PARAVIRT) += paravirt.o paravirt_patch_$(BITS).o
......
/*
* KVM paravirt_ops implementation
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* 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 (C) 2007, Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
* Copyright IBM Corporation, 2007
* Authors: Anthony Liguori <aliguori@us.ibm.com>
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/kvm_para.h>
#include <linux/cpu.h>
#include <linux/mm.h>
/*
* No need for any "IO delay" on KVM
*/
static void kvm_io_delay(void)
{
}
static void paravirt_ops_setup(void)
{
pv_info.name = "KVM";
pv_info.paravirt_enabled = 1;
if (kvm_para_has_feature(KVM_FEATURE_NOP_IO_DELAY))
pv_cpu_ops.io_delay = kvm_io_delay;
}
void __init kvm_guest_init(void)
{
if (!kvm_para_available())
return;
paravirt_ops_setup();
}
...@@ -832,6 +832,7 @@ void __init setup_arch(char **cmdline_p) ...@@ -832,6 +832,7 @@ void __init setup_arch(char **cmdline_p)
*/ */
vmi_init(); vmi_init();
#endif #endif
kvm_guest_init();
/* /*
* NOTE: before this point _nobody_ is allowed to allocate * NOTE: before this point _nobody_ is allowed to allocate
......
...@@ -493,6 +493,8 @@ void __init setup_arch(char **cmdline_p) ...@@ -493,6 +493,8 @@ void __init setup_arch(char **cmdline_p)
init_apic_mappings(); init_apic_mappings();
ioapic_init_mappings(); ioapic_init_mappings();
kvm_guest_init();
/* /*
* We trust e820 completely. No explicit ROM probing in memory. * We trust e820 completely. No explicit ROM probing in memory.
*/ */
......
...@@ -20,6 +20,12 @@ ...@@ -20,6 +20,12 @@
#include <asm/kvm_para.h> #include <asm/kvm_para.h>
#ifdef __KERNEL__ #ifdef __KERNEL__
#ifdef CONFIG_KVM_GUEST
void __init kvm_guest_init(void);
#else
#define kvm_guest_init() do { } while (0)
#endif
static inline int kvm_para_has_feature(unsigned int feature) static inline int kvm_para_has_feature(unsigned int feature)
{ {
if (kvm_arch_para_features() & (1UL << feature)) if (kvm_arch_para_features() & (1UL << feature))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment