Skip to content

Commit 5534f44

Browse files
committed
Revert "intel_idle: Add support for using intel_idle in a VM guest using just hlt"
This reverts commit 2f3d08f ("intel_idle: Add support for using intel_idle in a VM guest using just hlt"), because it causes functional issues to appear and it is not really useful without a related commit that got reverted previously. Link: https://lore.kernel.org/linux-pm/[email protected] Reported-by: Xiaoyao Li <[email protected]> Requested-by: Peter Zijlstra <[email protected]> Signed-off-by: Rafael J. Wysocki <[email protected]>
1 parent a5155c0 commit 5534f44

File tree

1 file changed

+1
-116
lines changed

1 file changed

+1
-116
lines changed

drivers/idle/intel_idle.c

Lines changed: 1 addition & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -199,43 +199,6 @@ static __cpuidle int intel_idle_xstate(struct cpuidle_device *dev,
199199
return __intel_idle(dev, drv, index);
200200
}
201201

202-
static __always_inline int __intel_idle_hlt(struct cpuidle_device *dev,
203-
struct cpuidle_driver *drv, int index)
204-
{
205-
raw_safe_halt();
206-
raw_local_irq_disable();
207-
return index;
208-
}
209-
210-
/**
211-
* intel_idle_hlt - Ask the processor to enter the given idle state using hlt.
212-
* @dev: cpuidle device of the target CPU.
213-
* @drv: cpuidle driver (assumed to point to intel_idle_driver).
214-
* @index: Target idle state index.
215-
*
216-
* Use the HLT instruction to notify the processor that the CPU represented by
217-
* @dev is idle and it can try to enter the idle state corresponding to @index.
218-
*
219-
* Must be called under local_irq_disable().
220-
*/
221-
static __cpuidle int intel_idle_hlt(struct cpuidle_device *dev,
222-
struct cpuidle_driver *drv, int index)
223-
{
224-
return __intel_idle_hlt(dev, drv, index);
225-
}
226-
227-
static __cpuidle int intel_idle_hlt_irq_on(struct cpuidle_device *dev,
228-
struct cpuidle_driver *drv, int index)
229-
{
230-
int ret;
231-
232-
raw_local_irq_enable();
233-
ret = __intel_idle_hlt(dev, drv, index);
234-
raw_local_irq_disable();
235-
236-
return ret;
237-
}
238-
239202
/**
240203
* intel_idle_s2idle - Ask the processor to enter the given idle state.
241204
* @dev: cpuidle device of the target CPU.
@@ -1279,18 +1242,6 @@ static struct cpuidle_state snr_cstates[] __initdata = {
12791242
.enter = NULL }
12801243
};
12811244

1282-
static struct cpuidle_state vmguest_cstates[] __initdata = {
1283-
{
1284-
.name = "C1",
1285-
.desc = "HLT",
1286-
.flags = MWAIT2flg(0x00) | CPUIDLE_FLAG_IRQ_ENABLE,
1287-
.exit_latency = 5,
1288-
.target_residency = 10,
1289-
.enter = &intel_idle_hlt, },
1290-
{
1291-
.enter = NULL }
1292-
};
1293-
12941245
static const struct idle_cpu idle_cpu_nehalem __initconst = {
12951246
.state_table = nehalem_cstates,
12961247
.auto_demotion_disable_flags = NHM_C1_AUTO_DEMOTE | NHM_C3_AUTO_DEMOTE,
@@ -1890,16 +1841,6 @@ static bool __init intel_idle_verify_cstate(unsigned int mwait_hint)
18901841

18911842
static void state_update_enter_method(struct cpuidle_state *state, int cstate)
18921843
{
1893-
if (state->enter == intel_idle_hlt) {
1894-
if (force_irq_on) {
1895-
pr_info("forced intel_idle_irq for state %d\n", cstate);
1896-
state->enter = intel_idle_hlt_irq_on;
1897-
}
1898-
return;
1899-
}
1900-
if (state->enter == intel_idle_hlt_irq_on)
1901-
return; /* no update scenarios */
1902-
19031844
if (state->flags & CPUIDLE_FLAG_INIT_XSTATE) {
19041845
/*
19051846
* Combining with XSTATE with IBRS or IRQ_ENABLE flags
@@ -1933,21 +1874,6 @@ static void state_update_enter_method(struct cpuidle_state *state, int cstate)
19331874
}
19341875
}
19351876

1936-
/*
1937-
* For mwait based states, we want to verify the cpuid data to see if the state
1938-
* is actually supported by this specific CPU.
1939-
* For non-mwait based states, this check should be skipped.
1940-
*/
1941-
static bool should_verify_mwait(struct cpuidle_state *state)
1942-
{
1943-
if (state->enter == intel_idle_hlt)
1944-
return false;
1945-
if (state->enter == intel_idle_hlt_irq_on)
1946-
return false;
1947-
1948-
return true;
1949-
}
1950-
19511877
static void __init intel_idle_init_cstates_icpu(struct cpuidle_driver *drv)
19521878
{
19531879
int cstate;
@@ -1996,7 +1922,7 @@ static void __init intel_idle_init_cstates_icpu(struct cpuidle_driver *drv)
19961922
}
19971923

19981924
mwait_hint = flg2MWAIT(cpuidle_state_table[cstate].flags);
1999-
if (should_verify_mwait(&cpuidle_state_table[cstate]) && !intel_idle_verify_cstate(mwait_hint))
1925+
if (!intel_idle_verify_cstate(mwait_hint))
20001926
continue;
20011927

20021928
/* Structure copy. */
@@ -2130,45 +2056,6 @@ static void __init intel_idle_cpuidle_devices_uninit(void)
21302056
cpuidle_unregister_device(per_cpu_ptr(intel_idle_cpuidle_devices, i));
21312057
}
21322058

2133-
static int __init intel_idle_vminit(const struct x86_cpu_id *id)
2134-
{
2135-
int retval;
2136-
2137-
cpuidle_state_table = vmguest_cstates;
2138-
2139-
icpu = (const struct idle_cpu *)id->driver_data;
2140-
2141-
pr_debug("v" INTEL_IDLE_VERSION " model 0x%X\n",
2142-
boot_cpu_data.x86_model);
2143-
2144-
intel_idle_cpuidle_devices = alloc_percpu(struct cpuidle_device);
2145-
if (!intel_idle_cpuidle_devices)
2146-
return -ENOMEM;
2147-
2148-
intel_idle_cpuidle_driver_init(&intel_idle_driver);
2149-
2150-
retval = cpuidle_register_driver(&intel_idle_driver);
2151-
if (retval) {
2152-
struct cpuidle_driver *drv = cpuidle_get_driver();
2153-
printk(KERN_DEBUG pr_fmt("intel_idle yielding to %s\n"),
2154-
drv ? drv->name : "none");
2155-
goto init_driver_fail;
2156-
}
2157-
2158-
retval = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "idle/intel:online",
2159-
intel_idle_cpu_online, NULL);
2160-
if (retval < 0)
2161-
goto hp_setup_fail;
2162-
2163-
return 0;
2164-
hp_setup_fail:
2165-
intel_idle_cpuidle_devices_uninit();
2166-
cpuidle_unregister_driver(&intel_idle_driver);
2167-
init_driver_fail:
2168-
free_percpu(intel_idle_cpuidle_devices);
2169-
return retval;
2170-
}
2171-
21722059
static int __init intel_idle_init(void)
21732060
{
21742061
const struct x86_cpu_id *id;
@@ -2187,8 +2074,6 @@ static int __init intel_idle_init(void)
21872074
id = x86_match_cpu(intel_idle_ids);
21882075
if (id) {
21892076
if (!boot_cpu_has(X86_FEATURE_MWAIT)) {
2190-
if (boot_cpu_has(X86_FEATURE_HYPERVISOR))
2191-
return intel_idle_vminit(id);
21922077
pr_debug("Please enable MWAIT in BIOS SETUP\n");
21932078
return -ENODEV;
21942079
}

0 commit comments

Comments
 (0)