cpuidle: Move polling state initialization code to separate file
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 23 Aug 2017 21:21:07 +0000 (23:21 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 30 Aug 2017 01:06:27 +0000 (03:06 +0200)
Move the polling state initialization code to a separate file built
conditionally on CONFIG_ARCH_HAS_CPU_RELAX to get rid of the #ifdef
in driver.c.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Tested-by: Sudeep Holla <sudeep.holla@arm.com>
Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
drivers/cpuidle/Makefile
drivers/cpuidle/driver.c
drivers/cpuidle/poll_state.c [new file with mode: 0644]
include/linux/cpuidle.h

index 3ba81b1..0b67a05 100644 (file)
@@ -5,6 +5,7 @@
 obj-y += cpuidle.o driver.o governor.o sysfs.o governors/
 obj-$(CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED) += coupled.o
 obj-$(CONFIG_DT_IDLE_STATES)             += dt_idle_states.o
+obj-$(CONFIG_ARCH_HAS_CPU_RELAX)         += poll_state.o
 
 ##################################################################################
 # ARM SoC drivers
index e942f8e..6f694c8 100644 (file)
@@ -179,37 +179,6 @@ static void __cpuidle_driver_init(struct cpuidle_driver *drv)
        }
 }
 
-#ifdef CONFIG_ARCH_HAS_CPU_RELAX
-static int __cpuidle poll_idle(struct cpuidle_device *dev,
-                              struct cpuidle_driver *drv, int index)
-{
-       local_irq_enable();
-       if (!current_set_polling_and_test()) {
-               while (!need_resched())
-                       cpu_relax();
-       }
-       current_clr_polling();
-
-       return index;
-}
-
-static void poll_idle_init(struct cpuidle_driver *drv)
-{
-       struct cpuidle_state *state = &drv->states[0];
-
-       snprintf(state->name, CPUIDLE_NAME_LEN, "POLL");
-       snprintf(state->desc, CPUIDLE_DESC_LEN, "CPUIDLE CORE POLL IDLE");
-       state->exit_latency = 0;
-       state->target_residency = 0;
-       state->power_usage = -1;
-       state->enter = poll_idle;
-       state->disabled = false;
-       state->flags = CPUIDLE_FLAG_POLLING;
-}
-#else
-static void poll_idle_init(struct cpuidle_driver *drv) {}
-#endif /* !CONFIG_ARCH_HAS_CPU_RELAX */
-
 /**
  * __cpuidle_register_driver: register the driver
  * @drv: a valid pointer to a struct cpuidle_driver
diff --git a/drivers/cpuidle/poll_state.c b/drivers/cpuidle/poll_state.c
new file mode 100644 (file)
index 0000000..0db4f72
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * poll_state.c - Polling idle state
+ *
+ * This file is released under the GPLv2.
+ */
+
+#include <linux/cpuidle.h>
+#include <linux/sched.h>
+#include <linux/sched/idle.h>
+
+static int __cpuidle poll_idle(struct cpuidle_device *dev,
+                              struct cpuidle_driver *drv, int index)
+{
+       local_irq_enable();
+       if (!current_set_polling_and_test()) {
+               while (!need_resched())
+                       cpu_relax();
+       }
+       current_clr_polling();
+
+       return index;
+}
+
+void poll_idle_init(struct cpuidle_driver *drv)
+{
+       struct cpuidle_state *state = &drv->states[0];
+
+       snprintf(state->name, CPUIDLE_NAME_LEN, "POLL");
+       snprintf(state->desc, CPUIDLE_DESC_LEN, "CPUIDLE CORE POLL IDLE");
+       state->exit_latency = 0;
+       state->target_residency = 0;
+       state->power_usage = -1;
+       state->enter = poll_idle;
+       state->disabled = false;
+       state->flags = CPUIDLE_FLAG_POLLING;
+}
index b58d952..561bc53 100644 (file)
@@ -225,6 +225,12 @@ static inline void cpuidle_coupled_parallel_barrier(struct cpuidle_device *dev,
 }
 #endif
 
+#ifdef CONFIG_ARCH_HAS_CPU_RELAX
+void poll_idle_init(struct cpuidle_driver *drv);
+#else
+static void poll_idle_init(struct cpuidle_driver *drv) {}
+#endif
+
 /******************************
  * CPUIDLE GOVERNOR INTERFACE *
  ******************************/