|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] x86/mwait_idle: Allow setting the max cstate to C1
From: Ross Lagerwall <rosslagerwall@xxxxxxxxxx>
Following 91413b519631 ("x86/mwait_idle: export both C1 and C1E"), when
setting the max cstate to C1, the C1E cstate is used as well. This is
because MWAIT_HINT2CSTATE returns the same value for C1 and C1E.
Instead, when limiting the cstate, compare max_cstate with the position
in the states array, as the acpi cpu_idle driver does.
Without this patch, there's no way of setting the max cstate to C1 when using
the mwait_idle driver.
Signed-off-by: Ross Lagerwall <rosslagerwall@xxxxxxxxxx>
---
xen/arch/x86/cpu/mwait-idle.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/xen/arch/x86/cpu/mwait-idle.c b/xen/arch/x86/cpu/mwait-idle.c
index 72a7abf..e4cfc16 100644
--- a/xen/arch/x86/cpu/mwait-idle.c
+++ b/xen/arch/x86/cpu/mwait-idle.c
@@ -328,11 +328,9 @@ static void mwait_idle(void)
if (max_cstate > 0 && power && !sched_has_urgent_vcpu() &&
(next_state = cpuidle_current_governor->select(power)) > 0) {
- do {
- cx = &power->states[next_state];
- } while (cx->type > max_cstate && --next_state);
- if (!next_state)
- cx = NULL;
+ cx = &power->states[next_state];
+ if (cx->idx > max_cstate)
+ cx = &power->states[max_cstate];
menu_get_trace_data(&exp, &pred);
}
if (!cx) {
@@ -585,6 +583,7 @@ static int mwait_idle_cpu_init(struct notifier_block *nfb,
setup_clear_cpu_cap(X86_FEATURE_TSC_RELIABLE);
cx = dev->states + dev->count;
+ cx->idx = dev->count;
cx->type = state;
cx->address = hint;
cx->entry_method = ACPI_CSTATE_EM_FFH;
--
1.9.3
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |