| .. | .. |
|---|
| 15 | 15 | |
|---|
| 16 | 16 | DECLARE_PER_CPU(struct tick_device, tick_cpu_device); |
|---|
| 17 | 17 | extern ktime_t tick_next_period; |
|---|
| 18 | | -extern ktime_t tick_period; |
|---|
| 19 | 18 | extern int tick_do_timer_cpu __read_mostly; |
|---|
| 20 | 19 | |
|---|
| 21 | 20 | extern void tick_setup_periodic(struct clock_event_device *dev, int broadcast); |
|---|
| .. | .. |
|---|
| 62 | 61 | /* Broadcasting support */ |
|---|
| 63 | 62 | # ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST |
|---|
| 64 | 63 | extern int tick_device_uses_broadcast(struct clock_event_device *dev, int cpu); |
|---|
| 65 | | -extern void tick_install_broadcast_device(struct clock_event_device *dev); |
|---|
| 64 | +extern void tick_install_broadcast_device(struct clock_event_device *dev, int cpu); |
|---|
| 66 | 65 | extern int tick_is_broadcast_device(struct clock_event_device *dev); |
|---|
| 67 | | -extern void tick_shutdown_broadcast(unsigned int cpu); |
|---|
| 68 | 66 | extern void tick_suspend_broadcast(void); |
|---|
| 69 | 67 | extern void tick_resume_broadcast(void); |
|---|
| 70 | 68 | extern bool tick_resume_check_broadcast(void); |
|---|
| .. | .. |
|---|
| 73 | 71 | extern int tick_broadcast_update_freq(struct clock_event_device *dev, u32 freq); |
|---|
| 74 | 72 | extern struct tick_device *tick_get_broadcast_device(void); |
|---|
| 75 | 73 | extern struct cpumask *tick_get_broadcast_mask(void); |
|---|
| 74 | +extern const struct clock_event_device *tick_get_wakeup_device(int cpu); |
|---|
| 76 | 75 | # else /* !CONFIG_GENERIC_CLOCKEVENTS_BROADCAST: */ |
|---|
| 77 | | -static inline void tick_install_broadcast_device(struct clock_event_device *dev) { } |
|---|
| 76 | +static inline void tick_install_broadcast_device(struct clock_event_device *dev, int cpu) { } |
|---|
| 78 | 77 | static inline int tick_is_broadcast_device(struct clock_event_device *dev) { return 0; } |
|---|
| 79 | 78 | static inline int tick_device_uses_broadcast(struct clock_event_device *dev, int cpu) { return 0; } |
|---|
| 80 | 79 | static inline void tick_do_periodic_broadcast(struct clock_event_device *d) { } |
|---|
| 81 | | -static inline void tick_shutdown_broadcast(unsigned int cpu) { } |
|---|
| 82 | 80 | static inline void tick_suspend_broadcast(void) { } |
|---|
| 83 | 81 | static inline void tick_resume_broadcast(void) { } |
|---|
| 84 | 82 | static inline bool tick_resume_check_broadcast(void) { return false; } |
|---|
| .. | .. |
|---|
| 128 | 126 | /* Functions related to oneshot broadcasting */ |
|---|
| 129 | 127 | #if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) && defined(CONFIG_TICK_ONESHOT) |
|---|
| 130 | 128 | extern void tick_broadcast_switch_to_oneshot(void); |
|---|
| 131 | | -extern void tick_shutdown_broadcast_oneshot(unsigned int cpu); |
|---|
| 132 | 129 | extern int tick_broadcast_oneshot_active(void); |
|---|
| 133 | 130 | extern void tick_check_oneshot_broadcast_this_cpu(void); |
|---|
| 134 | 131 | bool tick_broadcast_oneshot_available(void); |
|---|
| 135 | 132 | extern struct cpumask *tick_get_broadcast_oneshot_mask(void); |
|---|
| 136 | 133 | #else /* !(BROADCAST && ONESHOT): */ |
|---|
| 137 | 134 | static inline void tick_broadcast_switch_to_oneshot(void) { } |
|---|
| 138 | | -static inline void tick_shutdown_broadcast_oneshot(unsigned int cpu) { } |
|---|
| 139 | 135 | static inline int tick_broadcast_oneshot_active(void) { return 0; } |
|---|
| 140 | 136 | static inline void tick_check_oneshot_broadcast_this_cpu(void) { } |
|---|
| 141 | 137 | static inline bool tick_broadcast_oneshot_available(void) { return tick_oneshot_possible(); } |
|---|
| 142 | 138 | #endif /* !(BROADCAST && ONESHOT) */ |
|---|
| 139 | + |
|---|
| 140 | +#if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) && defined(CONFIG_HOTPLUG_CPU) |
|---|
| 141 | +extern void tick_broadcast_offline(unsigned int cpu); |
|---|
| 142 | +#else |
|---|
| 143 | +static inline void tick_broadcast_offline(unsigned int cpu) { } |
|---|
| 144 | +#endif |
|---|
| 143 | 145 | |
|---|
| 144 | 146 | /* NO_HZ_FULL internal */ |
|---|
| 145 | 147 | #ifdef CONFIG_NO_HZ_FULL |
|---|
| .. | .. |
|---|
| 163 | 165 | |
|---|
| 164 | 166 | extern u64 get_next_timer_interrupt(unsigned long basej, u64 basem); |
|---|
| 165 | 167 | void timer_clear_idle(void); |
|---|
| 168 | + |
|---|
| 169 | +void clock_was_set(void); |
|---|
| 170 | +void clock_was_set_delayed(void); |
|---|