History

Merge branch 'pm-cpuidle'

* pm-cpuidle: cpuidle-haltpoll: Enable kvm guest polling when dedicated physical CPUs are available cpuidle-haltpoll: do not set an owner to allow modunload cpuidle-haltpoll: return -ENODEV on modinit failure cpuidle-haltpoll: set haltpoll as preferred governor cpuidle: allow governor switch on cpuidle_register_driver() powercap: idle_inject: Use higher resolution for idle injection cpuidle: play_idle: Increase the resolution to usec cpuidle-haltpoll: vcpu hotplug support cpuidle: teo: Get rid of redundant check in teo_update() cpuidle: teo: Allow tick to be stopped if PM QoS is used cpuidle: menu: Allow tick to be stopped if PM QoS is used cpuidle: header file stubs must be "static inline" cpuidle-haltpoll: disable host side polling when kvm virtualized cpuidle: add haltpoll governor governors: unify last_state_idx cpuidle: add poll_limit_ns to cpuidle_device structure add cpuidle-haltpoll driver

Rafael J. Wysocki committed 7 years ago

Commit 2cdd5cc2 parents d281706 1328edc26 files · +613 −107Browse files

Showing the changes to include/linux (4 of 26 files). Show all

Unified · Split

4 files
  1. include/linux/cpu.h +1 −1
  2. include/linux/cpuidle.h +10 −0
  3. include/linux/cpuidle_haltpoll.h +16 −0
  4. include/linux/idle_inject.h +4 −4
include/linux/cpu.h+1−1
@@ -179,7 +179,7 @@ void arch_cpu_idle_dead(void); · 178 unmodified lines
179179 int cpu_report_state(int cpu);
180180 int cpu_check_up_prepare(int cpu);
181181 void cpu_set_state_online(int cpu);
182−void play_idle(unsigned long duration_ms);
182+void play_idle(unsigned long duration_us);
183183
184184 #ifdef CONFIG_HOTPLUG_CPU
185185 bool cpu_wait_death(unsigned int cpu, int seconds);
include/linux/cpuidle.h+10−0
@@ -85,7 +85,9 @@ struct cpuidle_device { · 84 unmodified lines
8585 unsigned int cpu;
8686 ktime_t next_hrtimer;
8787
88+ int last_state_idx;
8889 int last_residency;
90+ u64 poll_limit_ns;
8991 struct cpuidle_state_usage states_usage[CPUIDLE_STATE_MAX];
9092 struct cpuidle_state_kobj *kobjs[CPUIDLE_STATE_MAX];
9193 struct cpuidle_driver_kobj *kobj_driver;
@@ -119,6 +121,9 @@ struct cpuidle_driver { · 27 unmodified lines
119121
120122 /* the driver handles the cpus in cpumask */
121123 struct cpumask *cpumask;
124+
125+ /* preferred governor to switch at register time */
126+ const char *governor;
122127 };
123128
124129 #ifdef CONFIG_CPU_IDLE
@@ -132,6 +137,8 @@ extern int cpuidle_select(struct cpuidle_driver *drv, · 7 unmodified lines
132137 extern int cpuidle_enter(struct cpuidle_driver *drv,
133138 struct cpuidle_device *dev, int index);
134139 extern void cpuidle_reflect(struct cpuidle_device *dev, int index);
140+extern u64 cpuidle_poll_time(struct cpuidle_driver *drv,
141+ struct cpuidle_device *dev);
135142
136143 extern int cpuidle_register_driver(struct cpuidle_driver *drv);
137144 extern struct cpuidle_driver *cpuidle_get_driver(void);
@@ -166,6 +173,9 @@ static inline int cpuidle_enter(struct cpuidle_driver *drv, · 28 unmodified lines
166173 struct cpuidle_device *dev, int index)
167174 {return -ENODEV; }
168175 static inline void cpuidle_reflect(struct cpuidle_device *dev, int index) { }
176+static inline u64 cpuidle_poll_time(struct cpuidle_driver *drv,
177+ struct cpuidle_device *dev)
178+{return 0; }
169179 static inline int cpuidle_register_driver(struct cpuidle_driver *drv)
170180 {return -ENODEV; }
171181 static inline struct cpuidle_driver *cpuidle_get_driver(void) {return NULL; }
include/linux/cpuidle_haltpoll.h+16−0
@@ -0,0 +1,16 @@
1+/* SPDX-License-Identifier: GPL-2.0 */
2+#ifndef _CPUIDLE_HALTPOLL_H
3+#define _CPUIDLE_HALTPOLL_H
4+
5+#ifdef CONFIG_ARCH_CPUIDLE_HALTPOLL
6+#include <asm/cpuidle_haltpoll.h>
7+#else
8+static inline void arch_haltpoll_enable(unsigned int cpu)
9+{
10+}
11+
12+static inline void arch_haltpoll_disable(unsigned int cpu)
13+{
14+}
15+#endif
16+#endif
include/linux/idle_inject.h+4−4
@@ -20,10 +20,10 @@ int idle_inject_start(struct idle_inject_device *ii_dev); · 19 unmodified lines
2020 void idle_inject_stop(struct idle_inject_device *ii_dev);
2121
2222 void idle_inject_set_duration(struct idle_inject_device *ii_dev,
23− unsigned int run_duration_ms,
24− unsigned int idle_duration_ms);
23+ unsigned int run_duration_us,
24+ unsigned int idle_duration_us);
2525
2626 void idle_inject_get_duration(struct idle_inject_device *ii_dev,
27− unsigned int *run_duration_ms,
28− unsigned int *idle_duration_ms);
27+ unsigned int *run_duration_us,
28+ unsigned int *idle_duration_us);
2929 #endif /* __IDLE_INJECT_H__ */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t