Blame view

kernel/time/tick-internal.h 4.64 KB
f8381cba0   Thomas Gleixner   [PATCH] tick-mana...
1
2
3
  /*
   * tick internal variable and functions used by low/high res code
   */
e2830b5c1   Torben Hohn   time: Make do_tim...
4
5
  #include <linux/hrtimer.h>
  #include <linux/tick.h>
6441402b1   Thomas Gleixner   clockevents: prev...
6

7cf37e87d   Thomas Gleixner   time: Fix legacy ...
7
  #ifdef CONFIG_GENERIC_CLOCKEVENTS_BUILD
6441402b1   Thomas Gleixner   clockevents: prev...
8
9
10
  
  #define TICK_DO_TIMER_NONE	-1
  #define TICK_DO_TIMER_BOOT	-2
f8381cba0   Thomas Gleixner   [PATCH] tick-mana...
11
  DECLARE_PER_CPU(struct tick_device, tick_cpu_device);
f8381cba0   Thomas Gleixner   [PATCH] tick-mana...
12
13
  extern ktime_t tick_next_period;
  extern ktime_t tick_period;
d3ed78245   Thomas Gleixner   highres/dyntick: ...
14
  extern int tick_do_timer_cpu __read_mostly;
f8381cba0   Thomas Gleixner   [PATCH] tick-mana...
15
16
17
  
  extern void tick_setup_periodic(struct clock_event_device *dev, int broadcast);
  extern void tick_handle_periodic(struct clock_event_device *dev);
2344abbcb   Thomas Gleixner   clockevents: make...
18
  extern void clockevents_shutdown(struct clock_event_device *dev);
f8381cba0   Thomas Gleixner   [PATCH] tick-mana...
19
  /*
79bf2bb33   Thomas Gleixner   [PATCH] tick-mana...
20
21
22
23
24
25
26
27
28
   * NO_HZ / high resolution timer shared code
   */
  #ifdef CONFIG_TICK_ONESHOT
  extern void tick_setup_oneshot(struct clock_event_device *newdev,
  			       void (*handler)(struct clock_event_device *),
  			       ktime_t nextevt);
  extern int tick_program_event(ktime_t expires, int force);
  extern void tick_oneshot_notify(void);
  extern int tick_switch_to_oneshot(void (*handler)(struct clock_event_device *));
cd05a1f81   Thomas Gleixner   [PATCH] clockeven...
29
  extern void tick_resume_oneshot(void);
79bf2bb33   Thomas Gleixner   [PATCH] tick-mana...
30
31
32
33
34
  # ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
  extern void tick_broadcast_setup_oneshot(struct clock_event_device *bc);
  extern void tick_broadcast_oneshot_control(unsigned long reason);
  extern void tick_broadcast_switch_to_oneshot(void);
  extern void tick_shutdown_broadcast_oneshot(unsigned int *cpup);
cd05a1f81   Thomas Gleixner   [PATCH] clockeven...
35
  extern int tick_resume_broadcast_oneshot(struct clock_event_device *bc);
27ce4cb4a   Thomas Gleixner   clockevents: prev...
36
  extern int tick_broadcast_oneshot_active(void);
fb02fbc14   Thomas Gleixner   NOHZ: restart tic...
37
  extern void tick_check_oneshot_broadcast(int cpu);
3a142a067   Thomas Gleixner   clockevents: Prev...
38
  bool tick_broadcast_oneshot_available(void);
79bf2bb33   Thomas Gleixner   [PATCH] tick-mana...
39
40
41
42
43
44
45
46
  # else /* BROADCAST */
  static inline void tick_broadcast_setup_oneshot(struct clock_event_device *bc)
  {
  	BUG();
  }
  static inline void tick_broadcast_oneshot_control(unsigned long reason) { }
  static inline void tick_broadcast_switch_to_oneshot(void) { }
  static inline void tick_shutdown_broadcast_oneshot(unsigned int *cpup) { }
27ce4cb4a   Thomas Gleixner   clockevents: prev...
47
  static inline int tick_broadcast_oneshot_active(void) { return 0; }
fb02fbc14   Thomas Gleixner   NOHZ: restart tic...
48
  static inline void tick_check_oneshot_broadcast(int cpu) { }
3a142a067   Thomas Gleixner   clockevents: Prev...
49
  static inline bool tick_broadcast_oneshot_available(void) { return true; }
79bf2bb33   Thomas Gleixner   [PATCH] tick-mana...
50
51
52
53
54
55
56
57
58
59
  # endif /* !BROADCAST */
  
  #else /* !ONESHOT */
  static inline
  void tick_setup_oneshot(struct clock_event_device *newdev,
  			void (*handler)(struct clock_event_device *),
  			ktime_t nextevt)
  {
  	BUG();
  }
cd05a1f81   Thomas Gleixner   [PATCH] clockeven...
60
61
62
63
  static inline void tick_resume_oneshot(void)
  {
  	BUG();
  }
79bf2bb33   Thomas Gleixner   [PATCH] tick-mana...
64
65
66
67
68
69
70
71
72
73
74
  static inline int tick_program_event(ktime_t expires, int force)
  {
  	return 0;
  }
  static inline void tick_oneshot_notify(void) { }
  static inline void tick_broadcast_setup_oneshot(struct clock_event_device *bc)
  {
  	BUG();
  }
  static inline void tick_broadcast_oneshot_control(unsigned long reason) { }
  static inline void tick_shutdown_broadcast_oneshot(unsigned int *cpup) { }
cd05a1f81   Thomas Gleixner   [PATCH] clockeven...
75
76
77
78
  static inline int tick_resume_broadcast_oneshot(struct clock_event_device *bc)
  {
  	return 0;
  }
f8e256c68   Ingo Molnar   timers: fix build...
79
  static inline int tick_broadcast_oneshot_active(void) { return 0; }
3a142a067   Thomas Gleixner   clockevents: Prev...
80
  static inline bool tick_broadcast_oneshot_available(void) { return false; }
79bf2bb33   Thomas Gleixner   [PATCH] tick-mana...
81
82
83
  #endif /* !TICK_ONESHOT */
  
  /*
f8381cba0   Thomas Gleixner   [PATCH] tick-mana...
84
85
86
   * Broadcasting support
   */
  #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
f8381cba0   Thomas Gleixner   [PATCH] tick-mana...
87
88
89
90
91
  extern int tick_device_uses_broadcast(struct clock_event_device *dev, int cpu);
  extern int tick_check_broadcast_device(struct clock_event_device *dev);
  extern int tick_is_broadcast_device(struct clock_event_device *dev);
  extern void tick_broadcast_on_off(unsigned long reason, int *oncpu);
  extern void tick_shutdown_broadcast(unsigned int *cpup);
6321dd60c   Thomas Gleixner   [PATCH] Save/rest...
92
93
  extern void tick_suspend_broadcast(void);
  extern int tick_resume_broadcast(void);
f8381cba0   Thomas Gleixner   [PATCH] tick-mana...
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
  
  extern void
  tick_set_periodic_handler(struct clock_event_device *dev, int broadcast);
  
  #else /* !BROADCAST */
  
  static inline int tick_check_broadcast_device(struct clock_event_device *dev)
  {
  	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_broadcast_on_off(unsigned long reason, int *oncpu) { }
  static inline void tick_shutdown_broadcast(unsigned int *cpup) { }
6321dd60c   Thomas Gleixner   [PATCH] Save/rest...
117
118
  static inline void tick_suspend_broadcast(void) { }
  static inline int tick_resume_broadcast(void) { return 0; }
f8381cba0   Thomas Gleixner   [PATCH] tick-mana...
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
  
  /*
   * Set the periodic handler in non broadcast mode
   */
  static inline void tick_set_periodic_handler(struct clock_event_device *dev,
  					     int broadcast)
  {
  	dev->event_handler = tick_handle_periodic;
  }
  #endif /* !BROADCAST */
  
  /*
   * 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);
  }
e2830b5c1   Torben Hohn   time: Make do_tim...
137

7cf37e87d   Thomas Gleixner   time: Fix legacy ...
138
  #endif
e2830b5c1   Torben Hohn   time: Make do_tim...
139
140
  extern void do_timer(unsigned long ticks);
  extern seqlock_t xtime_lock;