Currently we use pv-ops to tell linux not to do anything on io_delay.
While the basic idea is good IMHO, I don't see why we would need pv-ops
for that. The io delay function already has a switch that can do nothing
if you're so inclined.
So here's a patch (stacked on top of the previous pv-ops series) that
removes the io delay pv-ops hook and just sets the native io delay
variable instead.
Signed-off-by: Alexander Graf <agraf at suse.de>
---
arch/x86/Kconfig | 14 --------------
arch/x86/kernel/kvm.c | 16 +++-------------
2 files changed, 3 insertions(+), 27 deletions(-)
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 97d4f92..ebed686 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -527,20 +527,6 @@ config KVM_GUEST
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
diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
index 7e0207f..be182e6 100644
--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
@@ -29,15 +29,6 @@
#include <linux/hardirq.h>
#include <asm/timer.h>
-#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
@@ -201,13 +192,12 @@ static void kvm_leave_lazy_mmu(void)
static void __init paravirt_ops_setup(void)
{
+ extern int io_delay_type;
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
+ /* Disable IO delay */
+ io_delay_type = CONFIG_IO_DELAY_TYPE_NONE;
#ifdef CONFIG_KVM_MMU
if (kvm_para_has_feature(KVM_FEATURE_MMU_OP)) {
--
1.6.0.2
Jeremy Fitzhardinge
2009-Nov-19 22:55 UTC
[PATCH] Replace kvm io delay pv-ops with linux magic
On 11/18/09 20:56, Alexander Graf wrote:> Currently we use pv-ops to tell linux not to do anything on io_delay. > > While the basic idea is good IMHO, I don't see why we would need pv-ops > for that. The io delay function already has a switch that can do nothing > if you're so inclined. > > So here's a patch (stacked on top of the previous pv-ops series) that > removes the io delay pv-ops hook and just sets the native io delay > variable instead. >Can you just get rid of the io_delay op altogether? If KVM doesn't need it, then nobody does. J> Signed-off-by: Alexander Graf <agraf at suse.de> > --- > arch/x86/Kconfig | 14 -------------- > arch/x86/kernel/kvm.c | 16 +++------------- > 2 files changed, 3 insertions(+), 27 deletions(-) > > diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig > index 97d4f92..ebed686 100644 > --- a/arch/x86/Kconfig > +++ b/arch/x86/Kconfig > @@ -527,20 +527,6 @@ config KVM_GUEST > 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 > diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c > index 7e0207f..be182e6 100644 > --- a/arch/x86/kernel/kvm.c > +++ b/arch/x86/kernel/kvm.c > @@ -29,15 +29,6 @@ > #include <linux/hardirq.h> > #include <asm/timer.h> > > -#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 > > @@ -201,13 +192,12 @@ static void kvm_leave_lazy_mmu(void) > > static void __init paravirt_ops_setup(void) > { > + extern int io_delay_type; > 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 > + /* Disable IO delay */ > + io_delay_type = CONFIG_IO_DELAY_TYPE_NONE; > > #ifdef CONFIG_KVM_MMU > if (kvm_para_has_feature(KVM_FEATURE_MMU_OP)) { >