提交 b7475eb5 编写于 作者: T Thomas Gleixner 提交者: Ingo Molnar

tick: Simplify tick-internal.h

tick-internal.h is pretty confusing as a lot of the stub inlines
are there several times.

Distangle the maze and make clear functional sections.
Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
[ rjw: Subject ]
Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/16068264.vcNp79HLaT@vostro.rjw.lanSigned-off-by: NIngo Molnar <mingo@kernel.org>
上级 bfb83b27
...@@ -27,14 +27,19 @@ extern bool tick_check_replacement(struct clock_event_device *curdev, ...@@ -27,14 +27,19 @@ extern bool tick_check_replacement(struct clock_event_device *curdev,
struct clock_event_device *newdev); struct clock_event_device *newdev);
extern void tick_install_replacement(struct clock_event_device *dev); extern void tick_install_replacement(struct clock_event_device *dev);
extern void clockevents_shutdown(struct clock_event_device *dev);
extern int clockevents_tick_resume(struct clock_event_device *dev); extern int clockevents_tick_resume(struct clock_event_device *dev);
/* Check, if the device is functional or a dummy for broadcast */
static inline int tick_device_is_functional(struct clock_event_device *dev)
{
return !(dev->features & CLOCK_EVT_FEAT_DUMMY);
}
extern void clockevents_shutdown(struct clock_event_device *dev);
extern int __clockevents_update_freq(struct clock_event_device *dev, u32 freq);
extern ssize_t sysfs_get_uname(const char *buf, char *dst, size_t cnt); extern ssize_t sysfs_get_uname(const char *buf, char *dst, size_t cnt);
#endif /* GENERIC_CLOCKEVENTS */
/* /* Oneshot related functions */
* NO_HZ / high resolution timer shared code
*/
#ifdef CONFIG_TICK_ONESHOT #ifdef CONFIG_TICK_ONESHOT
extern void tick_setup_oneshot(struct clock_event_device *newdev, extern void tick_setup_oneshot(struct clock_event_device *newdev,
void (*handler)(struct clock_event_device *), void (*handler)(struct clock_event_device *),
...@@ -43,69 +48,19 @@ extern int tick_program_event(ktime_t expires, int force); ...@@ -43,69 +48,19 @@ extern int tick_program_event(ktime_t expires, int force);
extern void tick_oneshot_notify(void); extern void tick_oneshot_notify(void);
extern int tick_switch_to_oneshot(void (*handler)(struct clock_event_device *)); extern int tick_switch_to_oneshot(void (*handler)(struct clock_event_device *));
extern void tick_resume_oneshot(void); extern void tick_resume_oneshot(void);
# ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST static inline bool tick_oneshot_possible(void) { return true; }
extern void tick_broadcast_setup_oneshot(struct clock_event_device *bc);
extern int tick_broadcast_oneshot_control(unsigned long reason);
extern void tick_broadcast_switch_to_oneshot(void);
extern void tick_shutdown_broadcast_oneshot(unsigned int *cpup);
extern int tick_resume_broadcast_oneshot(struct clock_event_device *bc);
extern int tick_broadcast_oneshot_active(void);
extern void tick_check_oneshot_broadcast_this_cpu(void);
bool tick_broadcast_oneshot_available(void);
# else /* BROADCAST */
static inline void tick_broadcast_setup_oneshot(struct clock_event_device *bc)
{
BUG();
}
static inline int tick_broadcast_oneshot_control(unsigned long reason) { return 0; }
static inline void tick_broadcast_switch_to_oneshot(void) { }
static inline void tick_shutdown_broadcast_oneshot(unsigned int *cpup) { }
static inline int tick_broadcast_oneshot_active(void) { return 0; }
static inline void tick_check_oneshot_broadcast_this_cpu(void) { }
static inline bool tick_broadcast_oneshot_available(void) { return true; }
# endif /* !BROADCAST */
#else /* !ONESHOT */ #else /* !ONESHOT */
static inline static inline
void tick_setup_oneshot(struct clock_event_device *newdev, void tick_setup_oneshot(struct clock_event_device *newdev,
void (*handler)(struct clock_event_device *), void (*handler)(struct clock_event_device *),
ktime_t nextevt) ktime_t nextevt) { BUG(); }
{ static inline void tick_resume_oneshot(void) { BUG(); }
BUG(); static inline int tick_program_event(ktime_t expires, int force) { return 0; }
}
static inline void tick_resume_oneshot(void)
{
BUG();
}
static inline int tick_program_event(ktime_t expires, int force)
{
return 0;
}
static inline void tick_oneshot_notify(void) { } static inline void tick_oneshot_notify(void) { }
static inline void tick_broadcast_setup_oneshot(struct clock_event_device *bc) static inline bool tick_oneshot_possible(void) { return false; }
{
BUG();
}
static inline int tick_broadcast_oneshot_control(unsigned long reason) { return 0; }
static inline void tick_shutdown_broadcast_oneshot(unsigned int *cpup) { }
static inline int tick_resume_broadcast_oneshot(struct clock_event_device *bc)
{
return 0;
}
static inline int tick_broadcast_oneshot_active(void) { return 0; }
static inline bool tick_broadcast_oneshot_available(void) { return false; }
#endif /* !TICK_ONESHOT */ #endif /* !TICK_ONESHOT */
/* NO_HZ_FULL internal */ /* Broadcasting support */
#ifdef CONFIG_NO_HZ_FULL
extern void tick_nohz_init(void);
# else
static inline void tick_nohz_init(void) { }
#endif
/*
* Broadcasting support
*/
#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
extern int tick_device_uses_broadcast(struct clock_event_device *dev, int cpu); extern int tick_device_uses_broadcast(struct clock_event_device *dev, int cpu);
extern void tick_install_broadcast_device(struct clock_event_device *dev); extern void tick_install_broadcast_device(struct clock_event_device *dev);
...@@ -115,53 +70,51 @@ extern void tick_shutdown_broadcast(unsigned int *cpup); ...@@ -115,53 +70,51 @@ extern void tick_shutdown_broadcast(unsigned int *cpup);
extern void tick_suspend_broadcast(void); extern void tick_suspend_broadcast(void);
extern int tick_resume_broadcast(void); extern int tick_resume_broadcast(void);
extern void tick_broadcast_init(void); extern void tick_broadcast_init(void);
extern void extern void tick_set_periodic_handler(struct clock_event_device *dev, int broadcast);
tick_set_periodic_handler(struct clock_event_device *dev, int broadcast); extern int tick_broadcast_update_freq(struct clock_event_device *dev, u32 freq);
int tick_broadcast_update_freq(struct clock_event_device *dev, u32 freq);
#else /* !BROADCAST */ #else /* !BROADCAST */
static inline void tick_install_broadcast_device(struct clock_event_device *dev) { }
static inline void tick_install_broadcast_device(struct clock_event_device *dev) static inline int tick_is_broadcast_device(struct clock_event_device *dev) { return 0; }
{ static inline int tick_device_uses_broadcast(struct clock_event_device *dev, int cpu) { return 0; }
}
static inline int tick_is_broadcast_device(struct clock_event_device *dev)
{
return 0;
}
static inline int tick_device_uses_broadcast(struct clock_event_device *dev,
int cpu)
{
return 0;
}
static inline void tick_do_periodic_broadcast(struct clock_event_device *d) { } static inline void tick_do_periodic_broadcast(struct clock_event_device *d) { }
static inline void tick_broadcast_on_off(unsigned long reason, int *oncpu) { } static inline void tick_broadcast_on_off(unsigned long reason, int *oncpu) { }
static inline void tick_shutdown_broadcast(unsigned int *cpup) { } static inline void tick_shutdown_broadcast(unsigned int *cpup) { }
static inline void tick_suspend_broadcast(void) { } static inline void tick_suspend_broadcast(void) { }
static inline int tick_resume_broadcast(void) { return 0; } static inline int tick_resume_broadcast(void) { return 0; }
static inline void tick_broadcast_init(void) { } static inline void tick_broadcast_init(void) { }
static inline int tick_broadcast_update_freq(struct clock_event_device *dev, static inline int tick_broadcast_update_freq(struct clock_event_device *dev, u32 freq) { return -ENODEV; }
u32 freq) { return -ENODEV; }
/* /* Set the periodic handler in non broadcast mode */
* Set the periodic handler in non broadcast mode static inline void tick_set_periodic_handler(struct clock_event_device *dev, int broadcast)
*/
static inline void tick_set_periodic_handler(struct clock_event_device *dev,
int broadcast)
{ {
dev->event_handler = tick_handle_periodic; dev->event_handler = tick_handle_periodic;
} }
#endif /* !BROADCAST */ #endif /* !BROADCAST */
/* /* Functions related to oneshot broadcasting */
* Check, if the device is functional or a dummy for broadcast #if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) && defined(CONFIG_TICK_ONESHOT)
*/ extern void tick_broadcast_setup_oneshot(struct clock_event_device *bc);
static inline int tick_device_is_functional(struct clock_event_device *dev) extern int tick_broadcast_oneshot_control(unsigned long reason);
{ extern void tick_broadcast_switch_to_oneshot(void);
return !(dev->features & CLOCK_EVT_FEAT_DUMMY); extern void tick_shutdown_broadcast_oneshot(unsigned int *cpup);
} extern int tick_resume_broadcast_oneshot(struct clock_event_device *bc);
extern int tick_broadcast_oneshot_active(void);
int __clockevents_update_freq(struct clock_event_device *dev, u32 freq); extern void tick_check_oneshot_broadcast_this_cpu(void);
bool tick_broadcast_oneshot_available(void);
#endif /* GENERIC_CLOCKEVENTS */ #else /* BROADCAST && ONESHOT */
static inline void tick_broadcast_setup_oneshot(struct clock_event_device *bc) { BUG(); }
static inline int tick_broadcast_oneshot_control(unsigned long reason) { return 0; }
static inline void tick_broadcast_switch_to_oneshot(void) { }
static inline void tick_shutdown_broadcast_oneshot(unsigned int *cpup) { }
static inline int tick_resume_broadcast_oneshot(struct clock_event_device *bc) { return 0; }
static inline int tick_broadcast_oneshot_active(void) { return 0; }
static inline void tick_check_oneshot_broadcast_this_cpu(void) { }
static inline bool tick_broadcast_oneshot_available(void) { return tick_oneshot_possible(); }
#endif /* !BROADCAST && ONESHOT */
/* NO_HZ_FULL internal */
#ifdef CONFIG_NO_HZ_FULL
extern void tick_nohz_init(void);
# else
static inline void tick_nohz_init(void) { }
#endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册