hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
kernel/include/linux/tick.h
....@@ -68,6 +68,12 @@
6868 static inline void tick_broadcast_control(enum tick_broadcast_mode mode) { }
6969 #endif /* BROADCAST */
7070
71
+#if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) && defined(CONFIG_HOTPLUG_CPU)
72
+extern void tick_offline_cpu(unsigned int cpu);
73
+#else
74
+static inline void tick_offline_cpu(unsigned int cpu) { }
75
+#endif
76
+
7177 #ifdef CONFIG_GENERIC_CLOCKEVENTS
7278 extern int tick_broadcast_oneshot_control(enum tick_broadcast_state state);
7379 #else
....@@ -102,16 +108,19 @@
102108 TICK_DEP_BIT_POSIX_TIMER = 0,
103109 TICK_DEP_BIT_PERF_EVENTS = 1,
104110 TICK_DEP_BIT_SCHED = 2,
105
- TICK_DEP_BIT_CLOCK_UNSTABLE = 3
111
+ TICK_DEP_BIT_CLOCK_UNSTABLE = 3,
112
+ TICK_DEP_BIT_RCU = 4,
113
+ TICK_DEP_BIT_RCU_EXP = 5
106114 };
115
+#define TICK_DEP_BIT_MAX TICK_DEP_BIT_RCU_EXP
107116
108117 #define TICK_DEP_MASK_NONE 0
109118 #define TICK_DEP_MASK_POSIX_TIMER (1 << TICK_DEP_BIT_POSIX_TIMER)
110119 #define TICK_DEP_MASK_PERF_EVENTS (1 << TICK_DEP_BIT_PERF_EVENTS)
111120 #define TICK_DEP_MASK_SCHED (1 << TICK_DEP_BIT_SCHED)
112121 #define TICK_DEP_MASK_CLOCK_UNSTABLE (1 << TICK_DEP_BIT_CLOCK_UNSTABLE)
113
-
114
-extern void register_tick_sched_wakeup_callback(void (*cb)(void));
122
+#define TICK_DEP_MASK_RCU (1 << TICK_DEP_BIT_RCU)
123
+#define TICK_DEP_MASK_RCU_EXP (1 << TICK_DEP_BIT_RCU_EXP)
115124
116125 #ifdef CONFIG_NO_HZ_COMMON
117126 extern bool tick_nohz_enabled;
....@@ -124,6 +133,7 @@
124133 extern void tick_nohz_idle_exit(void);
125134 extern void tick_nohz_irq_exit(void);
126135 extern bool tick_nohz_idle_got_tick(void);
136
+extern ktime_t tick_nohz_get_next_hrtimer(void);
127137 extern ktime_t tick_nohz_get_sleep_length(ktime_t *delta_next);
128138 extern unsigned long tick_nohz_get_idle_calls(void);
129139 extern unsigned long tick_nohz_get_idle_calls_cpu(int cpu);
....@@ -147,7 +157,11 @@
147157 static inline void tick_nohz_idle_enter(void) { }
148158 static inline void tick_nohz_idle_exit(void) { }
149159 static inline bool tick_nohz_idle_got_tick(void) { return false; }
150
-
160
+static inline ktime_t tick_nohz_get_next_hrtimer(void)
161
+{
162
+ /* Next wake up is the tick period, assume it starts now */
163
+ return ktime_add(ktime_get(), TICK_NSEC);
164
+}
151165 static inline ktime_t tick_nohz_get_sleep_length(ktime_t *delta_next)
152166 {
153167 *delta_next = TICK_NSEC;
....@@ -165,7 +179,7 @@
165179
166180 static inline bool tick_nohz_full_enabled(void)
167181 {
168
- if (!context_tracking_is_enabled())
182
+ if (!context_tracking_enabled())
169183 return false;
170184
171185 return tick_nohz_full_running;
....@@ -197,6 +211,7 @@
197211 enum tick_dep_bits bit);
198212 extern void tick_nohz_dep_clear_signal(struct signal_struct *signal,
199213 enum tick_dep_bits bit);
214
+extern bool tick_nohz_cpu_hotpluggable(unsigned int cpu);
200215
201216 /*
202217 * The below are tick_nohz_[set,clear]_dep() wrappers that optimize off-cases
....@@ -259,6 +274,10 @@
259274 static inline bool tick_nohz_full_cpu(int cpu) { return false; }
260275 static inline void tick_nohz_full_add_cpus_to(struct cpumask *mask) { }
261276
277
+static inline void tick_nohz_dep_set_cpu(int cpu, enum tick_dep_bits bit) { }
278
+static inline void tick_nohz_dep_clear_cpu(int cpu, enum tick_dep_bits bit) { }
279
+static inline bool tick_nohz_cpu_hotpluggable(unsigned int cpu) { return true; }
280
+
262281 static inline void tick_dep_set(enum tick_dep_bits bit) { }
263282 static inline void tick_dep_clear(enum tick_dep_bits bit) { }
264283 static inline void tick_dep_set_cpu(int cpu, enum tick_dep_bits bit) { }
....@@ -283,5 +302,4 @@
283302 __tick_nohz_task_switch();
284303 }
285304
286
-ktime_t *get_next_event_cpu(unsigned int cpu);
287305 #endif