Re: [PATCH 1/3] cpuidle: Add enable_cpuidle() interface
From: lihuisong (C)
Date: Thu Jan 29 2026 - 20:59:57 EST
Hi Rafael,
On 1/15/2026 8:18 PM, lihuisong (C) wrote:
I verified that disable_cpuidle() effectively prevents all CPUs from entering any idle states and the cpuidle function is correctly restored after calling enable_cpuidle().
On 1/15/2026 3:18 AM, Rafael J. Wysocki wrote:
On Tue, Nov 25, 2025 at 8:29 AM Huisong Li <lihuisong@xxxxxxxxxx> wrote:I think it would be work.
The global switch of cpuidle can be turned back on in some case.No, this is not going to work. The "off" switch only affects
So add enable_cpuidle().
initialization AFAICS.
The cpuidle_not_available() also see the "off" on do_idle().
And cpuidle_idle_call() check this function first and then select idle state.
Cpuidle doesn't select and enter idle state if this fuction return true.
What do you think?
Best,
/Huisong
Signed-off-by: Huisong Li <lihuisong@xxxxxxxxxx>
---
drivers/cpuidle/cpuidle.c | 5 ++++-
include/linux/cpuidle.h | 2 ++
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
index 56132e843c99..980ddfd3d930 100644
--- a/drivers/cpuidle/cpuidle.c
+++ b/drivers/cpuidle/cpuidle.c
@@ -48,7 +48,10 @@ void disable_cpuidle(void)
{
off = 1;
}
-
+void enable_cpuidle(void)
+{
+ off = 0;
+}
bool cpuidle_not_available(struct cpuidle_driver *drv,
struct cpuidle_device *dev)
{
diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h
index a9ee4fe55dcf..94c030748af3 100644
--- a/include/linux/cpuidle.h
+++ b/include/linux/cpuidle.h
@@ -168,6 +168,7 @@ struct cpuidle_driver {
};
#ifdef CONFIG_CPU_IDLE
+extern void enable_cpuidle(void);
extern void disable_cpuidle(void);
extern bool cpuidle_not_available(struct cpuidle_driver *drv,
struct cpuidle_device *dev);
@@ -203,6 +204,7 @@ extern struct cpuidle_driver *cpuidle_get_cpu_driver(struct cpuidle_device *dev)
static inline struct cpuidle_device *cpuidle_get_device(void)
{return __this_cpu_read(cpuidle_devices); }
#else
+static inline void enable_cpuidle(void) { }
static inline void disable_cpuidle(void) { }
static inline bool cpuidle_not_available(struct cpuidle_driver *drv,
struct cpuidle_device *dev)
--
2.33.0