Message ID | 20230106040342.46570-1-lirongqing@baidu.com |
---|---|
State | Accepted |
Commit | 716ff71ae234fd3ef1286aac8d8a19a0ed2d509d |
Headers | show |
Series | [v3] cpuidle-haltpoll: Replace default_idle with arch_cpu_idle | expand |
On Fri, Jan 6, 2023 at 5:03 AM Li RongQing <lirongqing@baidu.com> wrote: > > When KVM guest has MWAIT and mwait_idle is used as default idle function, > but once cpuidle-haltpoll is loaded, default_idle in default_enter_idle is > used, which is using HLT, and maybe cause a performance regression, as the > commit aebef63cf7ff ("x86: Remove vendor checks from prefer_mwait_c1_over_halt") > explains that mwait is preferred > > so replace default_idle with arch_cpu_idle which can using MWAIT > optimization. > > Suggested-by: Thomas Gleixner <tglx@linutronix.de> > Suggested-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > Signed-off-by: Li RongQing <lirongqing@baidu.com> > --- > v3: using EXPORT_SYMBOL_GPL > v2: not disable haltpoll, using arch_cpu_idle when guest has mwait > > arch/x86/kernel/process.c | 1 + > drivers/cpuidle/cpuidle-haltpoll.c | 2 +- > 2 files changed, 2 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c > index 40d156a..00a831d 100644 > --- a/arch/x86/kernel/process.c > +++ b/arch/x86/kernel/process.c > @@ -721,6 +721,7 @@ void arch_cpu_idle(void) > { > x86_idle(); > } > +EXPORT_SYMBOL_GPL(arch_cpu_idle); > > /* > * We use this if we don't have any better idle routine.. > diff --git a/drivers/cpuidle/cpuidle-haltpoll.c b/drivers/cpuidle/cpuidle-haltpoll.c > index 3a39a7f..e66df22 100644 > --- a/drivers/cpuidle/cpuidle-haltpoll.c > +++ b/drivers/cpuidle/cpuidle-haltpoll.c > @@ -32,7 +32,7 @@ static int default_enter_idle(struct cpuidle_device *dev, > local_irq_enable(); > return index; > } > - default_idle(); > + arch_cpu_idle(); > return index; > } > > -- The patch is not objectionable IMO, so I've applied it as 6.3 material, but I have rewritten its changelog. Thanks!
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index 40d156a..00a831d 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -721,6 +721,7 @@ void arch_cpu_idle(void) { x86_idle(); } +EXPORT_SYMBOL_GPL(arch_cpu_idle); /* * We use this if we don't have any better idle routine.. diff --git a/drivers/cpuidle/cpuidle-haltpoll.c b/drivers/cpuidle/cpuidle-haltpoll.c index 3a39a7f..e66df22 100644 --- a/drivers/cpuidle/cpuidle-haltpoll.c +++ b/drivers/cpuidle/cpuidle-haltpoll.c @@ -32,7 +32,7 @@ static int default_enter_idle(struct cpuidle_device *dev, local_irq_enable(); return index; } - default_idle(); + arch_cpu_idle(); return index; }
When KVM guest has MWAIT and mwait_idle is used as default idle function, but once cpuidle-haltpoll is loaded, default_idle in default_enter_idle is used, which is using HLT, and maybe cause a performance regression, as the commit aebef63cf7ff ("x86: Remove vendor checks from prefer_mwait_c1_over_halt") explains that mwait is preferred so replace default_idle with arch_cpu_idle which can using MWAIT optimization. Suggested-by: Thomas Gleixner <tglx@linutronix.de> Suggested-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Signed-off-by: Li RongQing <lirongqing@baidu.com> --- v3: using EXPORT_SYMBOL_GPL v2: not disable haltpoll, using arch_cpu_idle when guest has mwait arch/x86/kernel/process.c | 1 + drivers/cpuidle/cpuidle-haltpoll.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-)