Blame view

kernel/hrtimer.c 47.1 KB
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1
2
3
  /*
   *  linux/kernel/hrtimer.c
   *
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
4
   *  Copyright(C) 2005-2006, Thomas Gleixner <tglx@linutronix.de>
79bf2bb33   Thomas Gleixner   [PATCH] tick-mana...
5
   *  Copyright(C) 2005-2007, Red Hat, Inc., Ingo Molnar
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
6
   *  Copyright(C) 2006-2007  Timesys Corp., Thomas Gleixner
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
   *
   *  High-resolution kernel timers
   *
   *  In contrast to the low-resolution timeout API implemented in
   *  kernel/timer.c, hrtimers provide finer resolution and accuracy
   *  depending on system configuration and capabilities.
   *
   *  These timers are currently used for:
   *   - itimers
   *   - POSIX timers
   *   - nanosleep
   *   - precise in-kernel timing
   *
   *  Started by: Thomas Gleixner and Ingo Molnar
   *
   *  Credits:
   *	based on kernel/timer.c
   *
66188fae3   Thomas Gleixner   [PATCH] hrtimers:...
25
26
27
28
29
30
   *	Help, testing, suggestions, bugfixes, improvements were
   *	provided by:
   *
   *	George Anzinger, Andrew Morton, Steven Rostedt, Roman Zippel
   *	et. al.
   *
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
31
32
33
34
   *  For licencing details see kernel-base/COPYING
   */
  
  #include <linux/cpu.h>
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
35
  #include <linux/irq.h>
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
36
37
38
39
40
  #include <linux/module.h>
  #include <linux/percpu.h>
  #include <linux/hrtimer.h>
  #include <linux/notifier.h>
  #include <linux/syscalls.h>
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
41
  #include <linux/kallsyms.h>
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
42
  #include <linux/interrupt.h>
79bf2bb33   Thomas Gleixner   [PATCH] tick-mana...
43
  #include <linux/tick.h>
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
44
45
  #include <linux/seq_file.h>
  #include <linux/err.h>
237fc6e7a   Thomas Gleixner   add hrtimer speci...
46
  #include <linux/debugobjects.h>
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
47
48
49
50
51
52
53
54
  
  #include <asm/uaccess.h>
  
  /**
   * ktime_get - get the monotonic time in ktime_t format
   *
   * returns the time in ktime_t format
   */
d316c57ff   Thomas Gleixner   [PATCH] clockeven...
55
  ktime_t ktime_get(void)
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
56
57
58
59
60
61
62
  {
  	struct timespec now;
  
  	ktime_get_ts(&now);
  
  	return timespec_to_ktime(now);
  }
641b9e0e8   Patrick McHardy   [NET_SCHED]: Use ...
63
  EXPORT_SYMBOL_GPL(ktime_get);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
64
65
66
67
68
69
  
  /**
   * ktime_get_real - get the real (wall-) time in ktime_t format
   *
   * returns the time in ktime_t format
   */
d316c57ff   Thomas Gleixner   [PATCH] clockeven...
70
  ktime_t ktime_get_real(void)
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
71
72
73
74
75
76
77
78
79
80
81
82
  {
  	struct timespec now;
  
  	getnstimeofday(&now);
  
  	return timespec_to_ktime(now);
  }
  
  EXPORT_SYMBOL_GPL(ktime_get_real);
  
  /*
   * The timer bases:
7978672c4   George Anzinger   [PATCH] hrtimers:...
83
84
85
86
87
88
   *
   * Note: If we want to add new timer bases, we have to skip the two
   * clock ids captured by the cpu-timers. We do this by holding empty
   * entries rather than doing math adjustment of the clock ids.
   * This ensures that we capture erroneous accesses to these clock ids
   * rather than moving them into the range of valid clock id's.
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
89
   */
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
90
  DEFINE_PER_CPU(struct hrtimer_cpu_base, hrtimer_bases) =
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
91
  {
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
92
93
  
  	.clock_base =
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
94
  	{
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
95
96
97
  		{
  			.index = CLOCK_REALTIME,
  			.get_time = &ktime_get_real,
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
98
  			.resolution = KTIME_LOW_RES,
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
99
100
101
102
  		},
  		{
  			.index = CLOCK_MONOTONIC,
  			.get_time = &ktime_get,
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
103
  			.resolution = KTIME_LOW_RES,
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
104
105
  		},
  	}
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
106
107
108
109
  };
  
  /**
   * ktime_get_ts - get the monotonic clock in timespec format
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
110
111
112
113
   * @ts:		pointer to timespec variable
   *
   * The function calculates the monotonic clock from the realtime
   * clock and the wall_to_monotonic offset and stores the result
72fd4a35a   Robert P. J. Day   [PATCH] Numerous ...
114
   * in normalized timespec format in the variable pointed to by @ts.
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
   */
  void ktime_get_ts(struct timespec *ts)
  {
  	struct timespec tomono;
  	unsigned long seq;
  
  	do {
  		seq = read_seqbegin(&xtime_lock);
  		getnstimeofday(ts);
  		tomono = wall_to_monotonic;
  
  	} while (read_seqretry(&xtime_lock, seq));
  
  	set_normalized_timespec(ts, ts->tv_sec + tomono.tv_sec,
  				ts->tv_nsec + tomono.tv_nsec);
  }
69778e325   Matt Helsley   [PATCH] Export kt...
131
  EXPORT_SYMBOL_GPL(ktime_get_ts);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
132
133
  
  /*
92127c7a4   Thomas Gleixner   [PATCH] hrtimers:...
134
135
136
   * Get the coarse grained time at the softirq based on xtime and
   * wall_to_monotonic.
   */
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
137
  static void hrtimer_get_softirq_time(struct hrtimer_cpu_base *base)
92127c7a4   Thomas Gleixner   [PATCH] hrtimers:...
138
139
  {
  	ktime_t xtim, tomono;
ad28d94ab   Thomas Gleixner   [PATCH] hrtimer: ...
140
  	struct timespec xts, tom;
92127c7a4   Thomas Gleixner   [PATCH] hrtimers:...
141
142
143
144
  	unsigned long seq;
  
  	do {
  		seq = read_seqbegin(&xtime_lock);
2c6b47de1   John Stultz   Cleanup non-arch ...
145
  		xts = current_kernel_time();
ad28d94ab   Thomas Gleixner   [PATCH] hrtimer: ...
146
  		tom = wall_to_monotonic;
92127c7a4   Thomas Gleixner   [PATCH] hrtimers:...
147
  	} while (read_seqretry(&xtime_lock, seq));
f4304ab21   John Stultz   [PATCH] HZ free ntp
148
  	xtim = timespec_to_ktime(xts);
ad28d94ab   Thomas Gleixner   [PATCH] hrtimer: ...
149
  	tomono = timespec_to_ktime(tom);
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
150
151
152
  	base->clock_base[CLOCK_REALTIME].softirq_time = xtim;
  	base->clock_base[CLOCK_MONOTONIC].softirq_time =
  		ktime_add(xtim, tomono);
92127c7a4   Thomas Gleixner   [PATCH] hrtimers:...
153
154
155
  }
  
  /*
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
156
157
158
159
   * Functions and macros which are different for UP/SMP systems are kept in a
   * single place
   */
  #ifdef CONFIG_SMP
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
160
161
162
163
164
165
166
167
168
169
170
171
  /*
   * We are using hashed locking: holding per_cpu(hrtimer_bases)[n].lock
   * means that all timers which are tied to this base via timer->base are
   * locked, and the base itself is locked too.
   *
   * So __run_timers/migrate_timers can safely modify all timers which could
   * be found on the lists/queues.
   *
   * When the timer's base is locked, and the timer removed from list, it is
   * possible to set timer->base = NULL and drop the lock: the timer remains
   * locked.
   */
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
172
173
174
  static
  struct hrtimer_clock_base *lock_hrtimer_base(const struct hrtimer *timer,
  					     unsigned long *flags)
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
175
  {
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
176
  	struct hrtimer_clock_base *base;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
177
178
179
180
  
  	for (;;) {
  		base = timer->base;
  		if (likely(base != NULL)) {
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
181
  			spin_lock_irqsave(&base->cpu_base->lock, *flags);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
182
183
184
  			if (likely(base == timer->base))
  				return base;
  			/* The timer has migrated to another CPU: */
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
185
  			spin_unlock_irqrestore(&base->cpu_base->lock, *flags);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
186
187
188
189
190
191
192
193
  		}
  		cpu_relax();
  	}
  }
  
  /*
   * Switch the timer base to the current CPU when possible.
   */
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
194
195
  static inline struct hrtimer_clock_base *
  switch_hrtimer_base(struct hrtimer *timer, struct hrtimer_clock_base *base)
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
196
  {
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
197
198
  	struct hrtimer_clock_base *new_base;
  	struct hrtimer_cpu_base *new_cpu_base;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
199

3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
200
201
  	new_cpu_base = &__get_cpu_var(hrtimer_bases);
  	new_base = &new_cpu_base->clock_base[base->index];
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
202
203
204
205
206
207
208
209
210
211
212
  
  	if (base != new_base) {
  		/*
  		 * We are trying to schedule the timer on the local CPU.
  		 * However we can't change timer's base while it is running,
  		 * so we keep it on the same CPU. No hassle vs. reprogramming
  		 * the event source in the high resolution case. The softirq
  		 * code will take care of this when the timer function has
  		 * completed. There is no conflict as we hold the lock until
  		 * the timer is enqueued.
  		 */
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
213
  		if (unlikely(hrtimer_callback_running(timer)))
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
214
215
216
217
  			return base;
  
  		/* See the comment in lock_timer_base() */
  		timer->base = NULL;
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
218
219
  		spin_unlock(&base->cpu_base->lock);
  		spin_lock(&new_base->cpu_base->lock);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
220
221
222
223
224
225
  		timer->base = new_base;
  	}
  	return new_base;
  }
  
  #else /* CONFIG_SMP */
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
226
  static inline struct hrtimer_clock_base *
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
227
228
  lock_hrtimer_base(const struct hrtimer *timer, unsigned long *flags)
  {
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
229
  	struct hrtimer_clock_base *base = timer->base;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
230

3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
231
  	spin_lock_irqsave(&base->cpu_base->lock, *flags);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
232
233
234
  
  	return base;
  }
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
235
  # define switch_hrtimer_base(t, b)	(b)
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
236
237
238
239
240
241
242
243
244
245
246
  
  #endif	/* !CONFIG_SMP */
  
  /*
   * Functions for the union type storage format of ktime_t which are
   * too large for inlining:
   */
  #if BITS_PER_LONG < 64
  # ifndef CONFIG_KTIME_SCALAR
  /**
   * ktime_add_ns - Add a scalar nanoseconds value to a ktime_t variable
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
   * @kt:		addend
   * @nsec:	the scalar nsec value to add
   *
   * Returns the sum of kt and nsec in ktime_t format
   */
  ktime_t ktime_add_ns(const ktime_t kt, u64 nsec)
  {
  	ktime_t tmp;
  
  	if (likely(nsec < NSEC_PER_SEC)) {
  		tmp.tv64 = nsec;
  	} else {
  		unsigned long rem = do_div(nsec, NSEC_PER_SEC);
  
  		tmp = ktime_set((long)nsec, rem);
  	}
  
  	return ktime_add(kt, tmp);
  }
b8b8fd2dc   David Howells   [NET]: Fix networ...
266
267
  
  EXPORT_SYMBOL_GPL(ktime_add_ns);
a272378d1   Arnaldo Carvalho de Melo   [KTIME]: Introduc...
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
  
  /**
   * ktime_sub_ns - Subtract a scalar nanoseconds value from a ktime_t variable
   * @kt:		minuend
   * @nsec:	the scalar nsec value to subtract
   *
   * Returns the subtraction of @nsec from @kt in ktime_t format
   */
  ktime_t ktime_sub_ns(const ktime_t kt, u64 nsec)
  {
  	ktime_t tmp;
  
  	if (likely(nsec < NSEC_PER_SEC)) {
  		tmp.tv64 = nsec;
  	} else {
  		unsigned long rem = do_div(nsec, NSEC_PER_SEC);
  
  		tmp = ktime_set((long)nsec, rem);
  	}
  
  	return ktime_sub(kt, tmp);
  }
  
  EXPORT_SYMBOL_GPL(ktime_sub_ns);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
292
293
294
295
296
  # endif /* !CONFIG_KTIME_SCALAR */
  
  /*
   * Divide a ktime value by a nanosecond value
   */
4d672e7ac   Davide Libenzi   timerfd: new time...
297
  u64 ktime_divns(const ktime_t kt, s64 div)
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
298
  {
900cfa461   Carlos R. Mafra   hrtimer: Remove u...
299
  	u64 dclc;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
300
  	int sft = 0;
900cfa461   Carlos R. Mafra   hrtimer: Remove u...
301
  	dclc = ktime_to_ns(kt);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
302
303
304
305
306
307
308
  	/* Make sure the divisor is less than 2^32: */
  	while (div >> 32) {
  		sft++;
  		div >>= 1;
  	}
  	dclc >>= sft;
  	do_div(dclc, (unsigned long) div);
4d672e7ac   Davide Libenzi   timerfd: new time...
309
  	return dclc;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
310
  }
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
311
  #endif /* BITS_PER_LONG >= 64 */
d3d74453c   Peter Zijlstra   hrtimer: fixup th...
312
  /*
5a7780e72   Thomas Gleixner   hrtimer: check re...
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
   * Add two ktime values and do a safety check for overflow:
   */
  ktime_t ktime_add_safe(const ktime_t lhs, const ktime_t rhs)
  {
  	ktime_t res = ktime_add(lhs, rhs);
  
  	/*
  	 * We use KTIME_SEC_MAX here, the maximum timeout which we can
  	 * return to user space in a timespec:
  	 */
  	if (res.tv64 < 0 || res.tv64 < lhs.tv64 || res.tv64 < rhs.tv64)
  		res = ktime_set(KTIME_SEC_MAX, 0);
  
  	return res;
  }
237fc6e7a   Thomas Gleixner   add hrtimer speci...
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
  #ifdef CONFIG_DEBUG_OBJECTS_TIMERS
  
  static struct debug_obj_descr hrtimer_debug_descr;
  
  /*
   * fixup_init is called when:
   * - an active object is initialized
   */
  static int hrtimer_fixup_init(void *addr, enum debug_obj_state state)
  {
  	struct hrtimer *timer = addr;
  
  	switch (state) {
  	case ODEBUG_STATE_ACTIVE:
  		hrtimer_cancel(timer);
  		debug_object_init(timer, &hrtimer_debug_descr);
  		return 1;
  	default:
  		return 0;
  	}
  }
  
  /*
   * fixup_activate is called when:
   * - an active object is activated
   * - an unknown object is activated (might be a statically initialized object)
   */
  static int hrtimer_fixup_activate(void *addr, enum debug_obj_state state)
  {
  	switch (state) {
  
  	case ODEBUG_STATE_NOTAVAILABLE:
  		WARN_ON_ONCE(1);
  		return 0;
  
  	case ODEBUG_STATE_ACTIVE:
  		WARN_ON(1);
  
  	default:
  		return 0;
  	}
  }
  
  /*
   * fixup_free is called when:
   * - an active object is freed
   */
  static int hrtimer_fixup_free(void *addr, enum debug_obj_state state)
  {
  	struct hrtimer *timer = addr;
  
  	switch (state) {
  	case ODEBUG_STATE_ACTIVE:
  		hrtimer_cancel(timer);
  		debug_object_free(timer, &hrtimer_debug_descr);
  		return 1;
  	default:
  		return 0;
  	}
  }
  
  static struct debug_obj_descr hrtimer_debug_descr = {
  	.name		= "hrtimer",
  	.fixup_init	= hrtimer_fixup_init,
  	.fixup_activate	= hrtimer_fixup_activate,
  	.fixup_free	= hrtimer_fixup_free,
  };
  
  static inline void debug_hrtimer_init(struct hrtimer *timer)
  {
  	debug_object_init(timer, &hrtimer_debug_descr);
  }
  
  static inline void debug_hrtimer_activate(struct hrtimer *timer)
  {
  	debug_object_activate(timer, &hrtimer_debug_descr);
  }
  
  static inline void debug_hrtimer_deactivate(struct hrtimer *timer)
  {
  	debug_object_deactivate(timer, &hrtimer_debug_descr);
  }
  
  static inline void debug_hrtimer_free(struct hrtimer *timer)
  {
  	debug_object_free(timer, &hrtimer_debug_descr);
  }
  
  static void __hrtimer_init(struct hrtimer *timer, clockid_t clock_id,
  			   enum hrtimer_mode mode);
  
  void hrtimer_init_on_stack(struct hrtimer *timer, clockid_t clock_id,
  			   enum hrtimer_mode mode)
  {
  	debug_object_init_on_stack(timer, &hrtimer_debug_descr);
  	__hrtimer_init(timer, clock_id, mode);
  }
  
  void destroy_hrtimer_on_stack(struct hrtimer *timer)
  {
  	debug_object_free(timer, &hrtimer_debug_descr);
  }
  
  #else
  static inline void debug_hrtimer_init(struct hrtimer *timer) { }
  static inline void debug_hrtimer_activate(struct hrtimer *timer) { }
  static inline void debug_hrtimer_deactivate(struct hrtimer *timer) { }
  #endif
5a7780e72   Thomas Gleixner   hrtimer: check re...
436
  /*
d3d74453c   Peter Zijlstra   hrtimer: fixup th...
437
438
439
440
441
442
443
444
445
446
447
448
449
450
   * Check, whether the timer is on the callback pending list
   */
  static inline int hrtimer_cb_pending(const struct hrtimer *timer)
  {
  	return timer->state & HRTIMER_STATE_PENDING;
  }
  
  /*
   * Remove a timer from the callback pending list
   */
  static inline void hrtimer_remove_cb_pending(struct hrtimer *timer)
  {
  	list_del_init(&timer->cb_entry);
  }
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
  /* High resolution timer related functions */
  #ifdef CONFIG_HIGH_RES_TIMERS
  
  /*
   * High resolution timer enabled ?
   */
  static int hrtimer_hres_enabled __read_mostly  = 1;
  
  /*
   * Enable / Disable high resolution mode
   */
  static int __init setup_hrtimer_hres(char *str)
  {
  	if (!strcmp(str, "off"))
  		hrtimer_hres_enabled = 0;
  	else if (!strcmp(str, "on"))
  		hrtimer_hres_enabled = 1;
  	else
  		return 0;
  	return 1;
  }
  
  __setup("highres=", setup_hrtimer_hres);
  
  /*
   * hrtimer_high_res_enabled - query, if the highres mode is enabled
   */
  static inline int hrtimer_is_hres_enabled(void)
  {
  	return hrtimer_hres_enabled;
  }
  
  /*
   * Is the high resolution mode active ?
   */
  static inline int hrtimer_hres_active(void)
  {
  	return __get_cpu_var(hrtimer_bases).hres_active;
  }
  
  /*
   * Reprogram the event source with checking both queues for the
   * next event
   * Called with interrupts disabled and base->lock held
   */
  static void hrtimer_force_reprogram(struct hrtimer_cpu_base *cpu_base)
  {
  	int i;
  	struct hrtimer_clock_base *base = cpu_base->clock_base;
  	ktime_t expires;
  
  	cpu_base->expires_next.tv64 = KTIME_MAX;
  
  	for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++, base++) {
  		struct hrtimer *timer;
  
  		if (!base->first)
  			continue;
  		timer = rb_entry(base->first, struct hrtimer, node);
cc584b213   Arjan van de Ven   hrtimer: convert ...
510
  		expires = ktime_sub(hrtimer_get_expires(timer), base->offset);
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
  		if (expires.tv64 < cpu_base->expires_next.tv64)
  			cpu_base->expires_next = expires;
  	}
  
  	if (cpu_base->expires_next.tv64 != KTIME_MAX)
  		tick_program_event(cpu_base->expires_next, 1);
  }
  
  /*
   * Shared reprogramming for clock_realtime and clock_monotonic
   *
   * When a timer is enqueued and expires earlier than the already enqueued
   * timers, we have to check, whether it expires earlier than the timer for
   * which the clock event device was armed.
   *
   * Called with interrupts disabled and base->cpu_base.lock held
   */
  static int hrtimer_reprogram(struct hrtimer *timer,
  			     struct hrtimer_clock_base *base)
  {
  	ktime_t *expires_next = &__get_cpu_var(hrtimer_bases).expires_next;
cc584b213   Arjan van de Ven   hrtimer: convert ...
532
  	ktime_t expires = ktime_sub(hrtimer_get_expires(timer), base->offset);
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
533
  	int res;
cc584b213   Arjan van de Ven   hrtimer: convert ...
534
  	WARN_ON_ONCE(hrtimer_get_expires_tv64(timer) < 0);
63070a79b   Thomas Gleixner   hrtimer: catch ex...
535

54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
536
537
538
  	/*
  	 * When the callback is running, we do not reprogram the clock event
  	 * device. The timer callback is either running on a different CPU or
3a4fa0a25   Robert P. J. Day   Fix misspellings ...
539
  	 * the callback is executed in the hrtimer_interrupt context. The
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
540
541
542
543
544
  	 * reprogramming is handled either by the softirq, which called the
  	 * callback or at the end of the hrtimer_interrupt.
  	 */
  	if (hrtimer_callback_running(timer))
  		return 0;
63070a79b   Thomas Gleixner   hrtimer: catch ex...
545
546
547
548
549
550
551
552
  	/*
  	 * CLOCK_REALTIME timer might be requested with an absolute
  	 * expiry time which is less than base->offset. Nothing wrong
  	 * about that, just avoid to call into the tick code, which
  	 * has now objections against negative expiry values.
  	 */
  	if (expires.tv64 < 0)
  		return -ETIME;
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
  	if (expires.tv64 >= expires_next->tv64)
  		return 0;
  
  	/*
  	 * Clockevents returns -ETIME, when the event was in the past.
  	 */
  	res = tick_program_event(expires, 0);
  	if (!IS_ERR_VALUE(res))
  		*expires_next = expires;
  	return res;
  }
  
  
  /*
   * Retrigger next event is called after clock was set
   *
   * Called with interrupts disabled via on_each_cpu()
   */
  static void retrigger_next_event(void *arg)
  {
  	struct hrtimer_cpu_base *base;
  	struct timespec realtime_offset;
  	unsigned long seq;
  
  	if (!hrtimer_hres_active())
  		return;
  
  	do {
  		seq = read_seqbegin(&xtime_lock);
  		set_normalized_timespec(&realtime_offset,
  					-wall_to_monotonic.tv_sec,
  					-wall_to_monotonic.tv_nsec);
  	} while (read_seqretry(&xtime_lock, seq));
  
  	base = &__get_cpu_var(hrtimer_bases);
  
  	/* Adjust CLOCK_REALTIME offset */
  	spin_lock(&base->lock);
  	base->clock_base[CLOCK_REALTIME].offset =
  		timespec_to_ktime(realtime_offset);
  
  	hrtimer_force_reprogram(base);
  	spin_unlock(&base->lock);
  }
  
  /*
   * Clock realtime was set
   *
   * Change the offset of the realtime clock vs. the monotonic
   * clock.
   *
   * We might have to reprogram the high resolution timer interrupt. On
   * SMP we call the architecture specific code to retrigger _all_ high
   * resolution timer interrupts. On UP we just disable interrupts and
   * call the high resolution interrupt code.
   */
  void clock_was_set(void)
  {
  	/* Retrigger the CPU local events everywhere */
15c8b6c1a   Jens Axboe   on_each_cpu(): ki...
612
  	on_each_cpu(retrigger_next_event, NULL, 1);
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
613
614
615
  }
  
  /*
995f054f2   Ingo Molnar   [PATCH] high-res ...
616
617
618
619
620
   * During resume we might have to reprogram the high resolution timer
   * interrupt (on the local CPU):
   */
  void hres_timers_resume(void)
  {
995f054f2   Ingo Molnar   [PATCH] high-res ...
621
622
623
624
625
  	/* Retrigger the CPU local events: */
  	retrigger_next_event(NULL);
  }
  
  /*
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
626
627
628
629
630
631
   * Initialize the high resolution related parts of cpu_base
   */
  static inline void hrtimer_init_hres(struct hrtimer_cpu_base *base)
  {
  	base->expires_next.tv64 = KTIME_MAX;
  	base->hres_active = 0;
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
632
633
634
635
636
637
638
  }
  
  /*
   * Initialize the high resolution related parts of a hrtimer
   */
  static inline void hrtimer_init_timer_hres(struct hrtimer *timer)
  {
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
  }
  
  /*
   * When High resolution timers are active, try to reprogram. Note, that in case
   * the state has HRTIMER_STATE_CALLBACK set, no reprogramming and no expiry
   * check happens. The timer gets enqueued into the rbtree. The reprogramming
   * and expiry check is done in the hrtimer_interrupt or in the softirq.
   */
  static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer,
  					    struct hrtimer_clock_base *base)
  {
  	if (base->cpu_base->hres_active && hrtimer_reprogram(timer, base)) {
  
  		/* Timer is expired, act upon the callback mode */
  		switch(timer->cb_mode) {
ccc7dadf7   Thomas Gleixner   hrtimer: prevent ...
654
655
  		case HRTIMER_CB_IRQSAFE_PERCPU:
  		case HRTIMER_CB_IRQSAFE_UNLOCKED:
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
656
657
658
659
660
  			/*
  			 * This is solely for the sched tick emulation with
  			 * dynamic tick support to ensure that we do not
  			 * restart the tick right on the edge and end up with
  			 * the tick timer in the softirq ! The calling site
ccc7dadf7   Thomas Gleixner   hrtimer: prevent ...
661
  			 * takes care of this. Also used for hrtimer sleeper !
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
662
  			 */
237fc6e7a   Thomas Gleixner   add hrtimer speci...
663
  			debug_hrtimer_deactivate(timer);
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
664
  			return 1;
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
665
666
667
668
669
670
671
  		case HRTIMER_CB_SOFTIRQ:
  			/*
  			 * Move everything else into the softirq pending list !
  			 */
  			list_add_tail(&timer->cb_entry,
  				      &base->cpu_base->cb_pending);
  			timer->state = HRTIMER_STATE_PENDING;
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
672
673
674
675
676
677
678
679
680
681
682
  			return 1;
  		default:
  			BUG();
  		}
  	}
  	return 0;
  }
  
  /*
   * Switch to high resolution mode
   */
f8953856e   Thomas Gleixner   [PATCH] highres: ...
683
  static int hrtimer_switch_to_hres(void)
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
684
  {
820de5c39   Ingo Molnar   highres: improve ...
685
686
  	int cpu = smp_processor_id();
  	struct hrtimer_cpu_base *base = &per_cpu(hrtimer_bases, cpu);
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
687
688
689
  	unsigned long flags;
  
  	if (base->hres_active)
f8953856e   Thomas Gleixner   [PATCH] highres: ...
690
  		return 1;
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
691
692
693
694
695
  
  	local_irq_save(flags);
  
  	if (tick_init_highres()) {
  		local_irq_restore(flags);
820de5c39   Ingo Molnar   highres: improve ...
696
697
698
  		printk(KERN_WARNING "Could not switch to high resolution "
  				    "mode on CPU %d
  ", cpu);
f8953856e   Thomas Gleixner   [PATCH] highres: ...
699
  		return 0;
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
700
701
702
703
704
705
706
707
708
709
  	}
  	base->hres_active = 1;
  	base->clock_base[CLOCK_REALTIME].resolution = KTIME_HIGH_RES;
  	base->clock_base[CLOCK_MONOTONIC].resolution = KTIME_HIGH_RES;
  
  	tick_setup_sched_timer();
  
  	/* "Retrigger" the interrupt to get things going */
  	retrigger_next_event(NULL);
  	local_irq_restore(flags);
edfed66e1   Michael Ellerman   Quieten hrtimer p...
710
711
  	printk(KERN_DEBUG "Switched to high resolution mode on CPU %d
  ",
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
712
  	       smp_processor_id());
f8953856e   Thomas Gleixner   [PATCH] highres: ...
713
  	return 1;
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
714
  }
0c96c5979   Thomas Gleixner   hrtimer: raise so...
715
716
717
718
  static inline void hrtimer_raise_softirq(void)
  {
  	raise_softirq(HRTIMER_SOFTIRQ);
  }
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
719
720
721
722
  #else
  
  static inline int hrtimer_hres_active(void) { return 0; }
  static inline int hrtimer_is_hres_enabled(void) { return 0; }
f8953856e   Thomas Gleixner   [PATCH] highres: ...
723
  static inline int hrtimer_switch_to_hres(void) { return 0; }
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
724
725
726
727
728
729
  static inline void hrtimer_force_reprogram(struct hrtimer_cpu_base *base) { }
  static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer,
  					    struct hrtimer_clock_base *base)
  {
  	return 0;
  }
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
730
731
  static inline void hrtimer_init_hres(struct hrtimer_cpu_base *base) { }
  static inline void hrtimer_init_timer_hres(struct hrtimer *timer) { }
d3d74453c   Peter Zijlstra   hrtimer: fixup th...
732
733
734
735
736
  static inline int hrtimer_reprogram(struct hrtimer *timer,
  				    struct hrtimer_clock_base *base)
  {
  	return 0;
  }
0c96c5979   Thomas Gleixner   hrtimer: raise so...
737
  static inline void hrtimer_raise_softirq(void) { }
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
738
739
  
  #endif /* CONFIG_HIGH_RES_TIMERS */
82f67cd9f   Ingo Molnar   [PATCH] Add debug...
740
741
742
743
744
745
746
747
748
749
750
  #ifdef CONFIG_TIMER_STATS
  void __timer_stats_hrtimer_set_start_info(struct hrtimer *timer, void *addr)
  {
  	if (timer->start_site)
  		return;
  
  	timer->start_site = addr;
  	memcpy(timer->start_comm, current->comm, TASK_COMM_LEN);
  	timer->start_pid = current->pid;
  }
  #endif
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
751
  /*
6506f2aa6   Uwe Kleine-König   fix comment: unlo...
752
   * Counterpart to lock_hrtimer_base above:
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
753
754
755
756
   */
  static inline
  void unlock_hrtimer_base(const struct hrtimer *timer, unsigned long *flags)
  {
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
757
  	spin_unlock_irqrestore(&timer->base->cpu_base->lock, *flags);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
758
759
760
761
  }
  
  /**
   * hrtimer_forward - forward the timer expiry
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
762
   * @timer:	hrtimer to forward
44f214755   Roman Zippel   [PATCH] hrtimers:...
763
   * @now:	forward past this time
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
764
765
766
   * @interval:	the interval to forward
   *
   * Forward the timer expiry so it will expire in the future.
8dca6f33f   Jonathan Corbet   [PATCH] hrtimer c...
767
   * Returns the number of overruns.
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
768
   */
4d672e7ac   Davide Libenzi   timerfd: new time...
769
  u64 hrtimer_forward(struct hrtimer *timer, ktime_t now, ktime_t interval)
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
770
  {
4d672e7ac   Davide Libenzi   timerfd: new time...
771
  	u64 orun = 1;
44f214755   Roman Zippel   [PATCH] hrtimers:...
772
  	ktime_t delta;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
773

cc584b213   Arjan van de Ven   hrtimer: convert ...
774
  	delta = ktime_sub(now, hrtimer_get_expires(timer));
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
775
776
777
  
  	if (delta.tv64 < 0)
  		return 0;
c9db4fa11   Thomas Gleixner   [hrtimer] Enforce...
778
779
  	if (interval.tv64 < timer->base->resolution.tv64)
  		interval.tv64 = timer->base->resolution.tv64;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
780
  	if (unlikely(delta.tv64 >= interval.tv64)) {
df869b630   Roman Zippel   [PATCH] hrtimers:...
781
  		s64 incr = ktime_to_ns(interval);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
782
783
  
  		orun = ktime_divns(delta, incr);
cc584b213   Arjan van de Ven   hrtimer: convert ...
784
785
  		hrtimer_add_expires_ns(timer, incr * orun);
  		if (hrtimer_get_expires_tv64(timer) > now.tv64)
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
786
787
788
789
790
791
792
  			return orun;
  		/*
  		 * This (and the ktime_add() below) is the
  		 * correction for exact:
  		 */
  		orun++;
  	}
cc584b213   Arjan van de Ven   hrtimer: convert ...
793
  	hrtimer_add_expires(timer, interval);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
794
795
796
  
  	return orun;
  }
6bdb6b620   Stas Sergeev   export hrtimer_fo...
797
  EXPORT_SYMBOL_GPL(hrtimer_forward);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
798
799
800
801
802
803
804
  
  /*
   * enqueue_hrtimer - internal function to (re)start a timer
   *
   * The timer is inserted in expiry order. Insertion into the
   * red black tree is O(log(n)). Must hold the base lock.
   */
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
805
  static void enqueue_hrtimer(struct hrtimer *timer,
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
806
  			    struct hrtimer_clock_base *base, int reprogram)
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
807
808
  {
  	struct rb_node **link = &base->active.rb_node;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
809
810
  	struct rb_node *parent = NULL;
  	struct hrtimer *entry;
99bc2fcb2   Ingo Molnar   hrtimer: speedup ...
811
  	int leftmost = 1;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
812

237fc6e7a   Thomas Gleixner   add hrtimer speci...
813
  	debug_hrtimer_activate(timer);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
814
815
816
817
818
819
820
821
822
823
  	/*
  	 * Find the right place in the rbtree:
  	 */
  	while (*link) {
  		parent = *link;
  		entry = rb_entry(parent, struct hrtimer, node);
  		/*
  		 * We dont care about collisions. Nodes with
  		 * the same expiry time stay together.
  		 */
cc584b213   Arjan van de Ven   hrtimer: convert ...
824
825
  		if (hrtimer_get_expires_tv64(timer) <
  				hrtimer_get_expires_tv64(entry)) {
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
826
  			link = &(*link)->rb_left;
99bc2fcb2   Ingo Molnar   hrtimer: speedup ...
827
  		} else {
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
828
  			link = &(*link)->rb_right;
99bc2fcb2   Ingo Molnar   hrtimer: speedup ...
829
830
  			leftmost = 0;
  		}
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
831
832
833
  	}
  
  	/*
288867ec5   Thomas Gleixner   [hrtimer] Remove ...
834
835
  	 * Insert the timer to the rbtree and check whether it
  	 * replaces the first pending timer
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
836
  	 */
99bc2fcb2   Ingo Molnar   hrtimer: speedup ...
837
  	if (leftmost) {
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
838
839
840
841
842
843
844
845
846
847
848
849
850
  		/*
  		 * Reprogram the clock event device. When the timer is already
  		 * expired hrtimer_enqueue_reprogram has either called the
  		 * callback or added it to the pending list and raised the
  		 * softirq.
  		 *
  		 * This is a NOP for !HIGHRES
  		 */
  		if (reprogram && hrtimer_enqueue_reprogram(timer, base))
  			return;
  
  		base->first = &timer->node;
  	}
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
851
852
  	rb_link_node(&timer->node, parent, link);
  	rb_insert_color(&timer->node, &base->active);
303e967ff   Thomas Gleixner   [PATCH] hrtimers;...
853
854
855
856
857
  	/*
  	 * HRTIMER_STATE_ENQUEUED is or'ed to the current state to preserve the
  	 * state of a possibly running callback.
  	 */
  	timer->state |= HRTIMER_STATE_ENQUEUED;
288867ec5   Thomas Gleixner   [hrtimer] Remove ...
858
  }
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
859
860
861
862
863
  
  /*
   * __remove_hrtimer - internal function to remove a timer
   *
   * Caller must hold the base lock.
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
864
865
866
867
868
   *
   * High resolution timer mode reprograms the clock event device when the
   * timer is the one which expires next. The caller can disable this by setting
   * reprogram to zero. This is useful, when the context does a reprogramming
   * anyway (e.g. timer interrupt)
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
869
   */
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
870
  static void __remove_hrtimer(struct hrtimer *timer,
303e967ff   Thomas Gleixner   [PATCH] hrtimers;...
871
  			     struct hrtimer_clock_base *base,
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
872
  			     unsigned long newstate, int reprogram)
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
873
  {
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
  	/* High res. callback list. NOP for !HIGHRES */
  	if (hrtimer_cb_pending(timer))
  		hrtimer_remove_cb_pending(timer);
  	else {
  		/*
  		 * Remove the timer from the rbtree and replace the
  		 * first entry pointer if necessary.
  		 */
  		if (base->first == &timer->node) {
  			base->first = rb_next(&timer->node);
  			/* Reprogram the clock event device. if enabled */
  			if (reprogram && hrtimer_hres_active())
  				hrtimer_force_reprogram(base->cpu_base);
  		}
  		rb_erase(&timer->node, &base->active);
  	}
303e967ff   Thomas Gleixner   [PATCH] hrtimers;...
890
  	timer->state = newstate;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
891
892
893
894
895
896
  }
  
  /*
   * remove hrtimer, called with base lock held
   */
  static inline int
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
897
  remove_hrtimer(struct hrtimer *timer, struct hrtimer_clock_base *base)
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
898
  {
303e967ff   Thomas Gleixner   [PATCH] hrtimers;...
899
  	if (hrtimer_is_queued(timer)) {
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
900
901
902
903
904
905
906
907
908
909
  		int reprogram;
  
  		/*
  		 * Remove the timer and force reprogramming when high
  		 * resolution mode is active and the timer is on the current
  		 * CPU. If we remove a timer on another CPU, reprogramming is
  		 * skipped. The interrupt event on this CPU is fired and
  		 * reprogramming happens in the interrupt handler. This is a
  		 * rare case and less expensive than a smp call.
  		 */
237fc6e7a   Thomas Gleixner   add hrtimer speci...
910
  		debug_hrtimer_deactivate(timer);
82f67cd9f   Ingo Molnar   [PATCH] Add debug...
911
  		timer_stats_hrtimer_clear_start_info(timer);
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
912
913
914
  		reprogram = base->cpu_base == &__get_cpu_var(hrtimer_bases);
  		__remove_hrtimer(timer, base, HRTIMER_STATE_INACTIVE,
  				 reprogram);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
915
916
917
918
919
920
  		return 1;
  	}
  	return 0;
  }
  
  /**
e1dd7bc58   Thomas Gleixner   hrtimers: fix doc...
921
   * hrtimer_start_range_ns - (re)start an hrtimer on the current CPU
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
922
923
   * @timer:	the timer to be added
   * @tim:	expiry time
da8f2e170   Arjan van de Ven   hrtimer: add a hr...
924
   * @delta_ns:	"slack" range for the timer
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
925
926
927
928
929
930
931
   * @mode:	expiry mode: absolute (HRTIMER_ABS) or relative (HRTIMER_REL)
   *
   * Returns:
   *  0 on success
   *  1 when the timer was active
   */
  int
da8f2e170   Arjan van de Ven   hrtimer: add a hr...
932
933
  hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim, unsigned long delta_ns,
  			const enum hrtimer_mode mode)
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
934
  {
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
935
  	struct hrtimer_clock_base *base, *new_base;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
936
  	unsigned long flags;
0c96c5979   Thomas Gleixner   hrtimer: raise so...
937
  	int ret, raise;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
938
939
940
941
942
943
944
945
  
  	base = lock_hrtimer_base(timer, &flags);
  
  	/* Remove an active timer from the queue: */
  	ret = remove_hrtimer(timer, base);
  
  	/* Switch the timer base, if necessary: */
  	new_base = switch_hrtimer_base(timer, base);
c9cb2e3d7   Thomas Gleixner   [PATCH] hrtimers:...
946
  	if (mode == HRTIMER_MODE_REL) {
5a7780e72   Thomas Gleixner   hrtimer: check re...
947
  		tim = ktime_add_safe(tim, new_base->get_time());
06027bdd2   Ingo Molnar   [PATCH] hrtimer: ...
948
949
950
951
952
953
954
955
  		/*
  		 * CONFIG_TIME_LOW_RES is a temporary way for architectures
  		 * to signal that they simply return xtime in
  		 * do_gettimeoffset(). In this case we want to round up by
  		 * resolution when starting a relative timer, to avoid short
  		 * timeouts. This will go away with the GTOD framework.
  		 */
  #ifdef CONFIG_TIME_LOW_RES
5a7780e72   Thomas Gleixner   hrtimer: check re...
956
  		tim = ktime_add_safe(tim, base->resolution);
06027bdd2   Ingo Molnar   [PATCH] hrtimer: ...
957
958
  #endif
  	}
237fc6e7a   Thomas Gleixner   add hrtimer speci...
959

da8f2e170   Arjan van de Ven   hrtimer: add a hr...
960
  	hrtimer_set_expires_range_ns(timer, tim, delta_ns);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
961

82f67cd9f   Ingo Molnar   [PATCH] Add debug...
962
  	timer_stats_hrtimer_set_start_info(timer);
935c631db   Ingo Molnar   [PATCH] hrtimers:...
963
964
965
966
967
968
  	/*
  	 * Only allow reprogramming if the new base is on this CPU.
  	 * (it might still be on another CPU if the timer was pending)
  	 */
  	enqueue_hrtimer(timer, new_base,
  			new_base->cpu_base == &__get_cpu_var(hrtimer_bases));
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
969

0c96c5979   Thomas Gleixner   hrtimer: raise so...
970
971
972
973
974
975
  	/*
  	 * The timer may be expired and moved to the cb_pending
  	 * list. We can not raise the softirq with base lock held due
  	 * to a possible deadlock with runqueue lock.
  	 */
  	raise = timer->state == HRTIMER_STATE_PENDING;
ee3ece830   Steven Rostedt   hrtimer: prevent ...
976
977
978
979
980
981
  	/*
  	 * We use preempt_disable to prevent this task from migrating after
  	 * setting up the softirq and raising it. Otherwise, if me migrate
  	 * we will raise the softirq on the wrong CPU.
  	 */
  	preempt_disable();
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
982
  	unlock_hrtimer_base(timer, &flags);
0c96c5979   Thomas Gleixner   hrtimer: raise so...
983
984
  	if (raise)
  		hrtimer_raise_softirq();
ee3ece830   Steven Rostedt   hrtimer: prevent ...
985
  	preempt_enable();
0c96c5979   Thomas Gleixner   hrtimer: raise so...
986

c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
987
988
  	return ret;
  }
da8f2e170   Arjan van de Ven   hrtimer: add a hr...
989
990
991
  EXPORT_SYMBOL_GPL(hrtimer_start_range_ns);
  
  /**
e1dd7bc58   Thomas Gleixner   hrtimers: fix doc...
992
   * hrtimer_start - (re)start an hrtimer on the current CPU
da8f2e170   Arjan van de Ven   hrtimer: add a hr...
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
   * @timer:	the timer to be added
   * @tim:	expiry time
   * @mode:	expiry mode: absolute (HRTIMER_ABS) or relative (HRTIMER_REL)
   *
   * Returns:
   *  0 on success
   *  1 when the timer was active
   */
  int
  hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)
  {
  	return hrtimer_start_range_ns(timer, tim, 0, mode);
  }
8d16b7642   Stephen Hemminger   [PATCH] hrtimer: ...
1006
  EXPORT_SYMBOL_GPL(hrtimer_start);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1007

da8f2e170   Arjan van de Ven   hrtimer: add a hr...
1008

c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1009
1010
  /**
   * hrtimer_try_to_cancel - try to deactivate a timer
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1011
1012
1013
1014
1015
1016
   * @timer:	hrtimer to stop
   *
   * Returns:
   *  0 when the timer was not active
   *  1 when the timer was active
   * -1 when the timer is currently excuting the callback function and
fa9799e33   Randy Dunlap   [PATCH] ktime/hrt...
1017
   *    cannot be stopped
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1018
1019
1020
   */
  int hrtimer_try_to_cancel(struct hrtimer *timer)
  {
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
1021
  	struct hrtimer_clock_base *base;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1022
1023
1024
1025
  	unsigned long flags;
  	int ret = -1;
  
  	base = lock_hrtimer_base(timer, &flags);
303e967ff   Thomas Gleixner   [PATCH] hrtimers;...
1026
  	if (!hrtimer_callback_running(timer))
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1027
1028
1029
1030
1031
1032
1033
  		ret = remove_hrtimer(timer, base);
  
  	unlock_hrtimer_base(timer, &flags);
  
  	return ret;
  
  }
8d16b7642   Stephen Hemminger   [PATCH] hrtimer: ...
1034
  EXPORT_SYMBOL_GPL(hrtimer_try_to_cancel);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1035
1036
1037
  
  /**
   * hrtimer_cancel - cancel a timer and wait for the handler to finish.
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
   * @timer:	the timer to be cancelled
   *
   * Returns:
   *  0 when the timer was not active
   *  1 when the timer was active
   */
  int hrtimer_cancel(struct hrtimer *timer)
  {
  	for (;;) {
  		int ret = hrtimer_try_to_cancel(timer);
  
  		if (ret >= 0)
  			return ret;
5ef37b196   Joe Korty   [PATCH] add cpu_r...
1051
  		cpu_relax();
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1052
1053
  	}
  }
8d16b7642   Stephen Hemminger   [PATCH] hrtimer: ...
1054
  EXPORT_SYMBOL_GPL(hrtimer_cancel);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1055
1056
1057
  
  /**
   * hrtimer_get_remaining - get remaining time for the timer
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1058
1059
1060
1061
   * @timer:	the timer to read
   */
  ktime_t hrtimer_get_remaining(const struct hrtimer *timer)
  {
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
1062
  	struct hrtimer_clock_base *base;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1063
1064
1065
1066
  	unsigned long flags;
  	ktime_t rem;
  
  	base = lock_hrtimer_base(timer, &flags);
cc584b213   Arjan van de Ven   hrtimer: convert ...
1067
  	rem = hrtimer_expires_remaining(timer);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1068
1069
1070
1071
  	unlock_hrtimer_base(timer, &flags);
  
  	return rem;
  }
8d16b7642   Stephen Hemminger   [PATCH] hrtimer: ...
1072
  EXPORT_SYMBOL_GPL(hrtimer_get_remaining);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1073

ee9c57852   Russell King   dyntick: Remove l...
1074
  #ifdef CONFIG_NO_HZ
69239749e   Tony Lindgren   [PATCH] fix next_...
1075
1076
1077
1078
1079
1080
1081
1082
  /**
   * hrtimer_get_next_event - get the time until next expiry event
   *
   * Returns the delta to the next expiry event or KTIME_MAX if no timer
   * is pending.
   */
  ktime_t hrtimer_get_next_event(void)
  {
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
1083
1084
  	struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases);
  	struct hrtimer_clock_base *base = cpu_base->clock_base;
69239749e   Tony Lindgren   [PATCH] fix next_...
1085
1086
1087
  	ktime_t delta, mindelta = { .tv64 = KTIME_MAX };
  	unsigned long flags;
  	int i;
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
1088
  	spin_lock_irqsave(&cpu_base->lock, flags);
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1089
1090
1091
  	if (!hrtimer_hres_active()) {
  		for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++, base++) {
  			struct hrtimer *timer;
69239749e   Tony Lindgren   [PATCH] fix next_...
1092

54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1093
1094
  			if (!base->first)
  				continue;
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
1095

54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1096
  			timer = rb_entry(base->first, struct hrtimer, node);
cc584b213   Arjan van de Ven   hrtimer: convert ...
1097
  			delta.tv64 = hrtimer_get_expires_tv64(timer);
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1098
1099
1100
1101
  			delta = ktime_sub(delta, base->get_time());
  			if (delta.tv64 < mindelta.tv64)
  				mindelta.tv64 = delta.tv64;
  		}
69239749e   Tony Lindgren   [PATCH] fix next_...
1102
  	}
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
1103
1104
  
  	spin_unlock_irqrestore(&cpu_base->lock, flags);
69239749e   Tony Lindgren   [PATCH] fix next_...
1105
1106
1107
1108
1109
  	if (mindelta.tv64 < 0)
  		mindelta.tv64 = 0;
  	return mindelta;
  }
  #endif
237fc6e7a   Thomas Gleixner   add hrtimer speci...
1110
1111
  static void __hrtimer_init(struct hrtimer *timer, clockid_t clock_id,
  			   enum hrtimer_mode mode)
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1112
  {
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
1113
  	struct hrtimer_cpu_base *cpu_base;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1114

7978672c4   George Anzinger   [PATCH] hrtimers:...
1115
  	memset(timer, 0, sizeof(struct hrtimer));
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
1116
  	cpu_base = &__raw_get_cpu_var(hrtimer_bases);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1117

c9cb2e3d7   Thomas Gleixner   [PATCH] hrtimers:...
1118
  	if (clock_id == CLOCK_REALTIME && mode != HRTIMER_MODE_ABS)
7978672c4   George Anzinger   [PATCH] hrtimers:...
1119
  		clock_id = CLOCK_MONOTONIC;
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
1120
  	timer->base = &cpu_base->clock_base[clock_id];
d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1121
  	INIT_LIST_HEAD(&timer->cb_entry);
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1122
  	hrtimer_init_timer_hres(timer);
82f67cd9f   Ingo Molnar   [PATCH] Add debug...
1123
1124
1125
1126
1127
1128
  
  #ifdef CONFIG_TIMER_STATS
  	timer->start_site = NULL;
  	timer->start_pid = -1;
  	memset(timer->start_comm, 0, TASK_COMM_LEN);
  #endif
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1129
  }
237fc6e7a   Thomas Gleixner   add hrtimer speci...
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
  
  /**
   * hrtimer_init - initialize a timer to the given clock
   * @timer:	the timer to be initialized
   * @clock_id:	the clock to be used
   * @mode:	timer mode abs/rel
   */
  void hrtimer_init(struct hrtimer *timer, clockid_t clock_id,
  		  enum hrtimer_mode mode)
  {
  	debug_hrtimer_init(timer);
  	__hrtimer_init(timer, clock_id, mode);
  }
8d16b7642   Stephen Hemminger   [PATCH] hrtimer: ...
1143
  EXPORT_SYMBOL_GPL(hrtimer_init);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1144
1145
1146
  
  /**
   * hrtimer_get_res - get the timer resolution for a clock
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1147
1148
1149
   * @which_clock: which clock to query
   * @tp:		 pointer to timespec variable to store the resolution
   *
72fd4a35a   Robert P. J. Day   [PATCH] Numerous ...
1150
1151
   * Store the resolution of the clock selected by @which_clock in the
   * variable pointed to by @tp.
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1152
1153
1154
   */
  int hrtimer_get_res(const clockid_t which_clock, struct timespec *tp)
  {
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
1155
  	struct hrtimer_cpu_base *cpu_base;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1156

3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
1157
1158
  	cpu_base = &__raw_get_cpu_var(hrtimer_bases);
  	*tp = ktime_to_timespec(cpu_base->clock_base[which_clock].resolution);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1159
1160
1161
  
  	return 0;
  }
8d16b7642   Stephen Hemminger   [PATCH] hrtimer: ...
1162
  EXPORT_SYMBOL_GPL(hrtimer_get_res);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1163

d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1164
1165
1166
1167
1168
1169
1170
1171
  static void run_hrtimer_pending(struct hrtimer_cpu_base *cpu_base)
  {
  	spin_lock_irq(&cpu_base->lock);
  
  	while (!list_empty(&cpu_base->cb_pending)) {
  		enum hrtimer_restart (*fn)(struct hrtimer *);
  		struct hrtimer *timer;
  		int restart;
5d5254f0d   Gautham R Shenoy   timers: handle HR...
1172
  		int emulate_hardirq_ctx = 0;
d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1173
1174
1175
  
  		timer = list_entry(cpu_base->cb_pending.next,
  				   struct hrtimer, cb_entry);
237fc6e7a   Thomas Gleixner   add hrtimer speci...
1176
  		debug_hrtimer_deactivate(timer);
d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1177
1178
1179
  		timer_stats_account_hrtimer(timer);
  
  		fn = timer->function;
5d5254f0d   Gautham R Shenoy   timers: handle HR...
1180
1181
1182
1183
1184
1185
1186
1187
  		/*
  		 * A timer might have been added to the cb_pending list
  		 * when it was migrated during a cpu-offline operation.
  		 * Emulate hardirq context for such timers.
  		 */
  		if (timer->cb_mode == HRTIMER_CB_IRQSAFE_PERCPU ||
  		    timer->cb_mode == HRTIMER_CB_IRQSAFE_UNLOCKED)
  			emulate_hardirq_ctx = 1;
d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1188
1189
  		__remove_hrtimer(timer, timer->base, HRTIMER_STATE_CALLBACK, 0);
  		spin_unlock_irq(&cpu_base->lock);
5d5254f0d   Gautham R Shenoy   timers: handle HR...
1190
1191
1192
1193
1194
1195
  		if (unlikely(emulate_hardirq_ctx)) {
  			local_irq_disable();
  			restart = fn(timer);
  			local_irq_enable();
  		} else
  			restart = fn(timer);
d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
  
  		spin_lock_irq(&cpu_base->lock);
  
  		timer->state &= ~HRTIMER_STATE_CALLBACK;
  		if (restart == HRTIMER_RESTART) {
  			BUG_ON(hrtimer_active(timer));
  			/*
  			 * Enqueue the timer, allow reprogramming of the event
  			 * device
  			 */
  			enqueue_hrtimer(timer, timer->base, 1);
  		} else if (hrtimer_active(timer)) {
  			/*
  			 * If the timer was rearmed on another CPU, reprogram
  			 * the event device.
  			 */
d7b41a24b   Bodo Stroesser   hrtimer: timeout ...
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
  			struct hrtimer_clock_base *base = timer->base;
  
  			if (base->first == &timer->node &&
  			    hrtimer_reprogram(timer, base)) {
  				/*
  				 * Timer is expired. Thus move it from tree to
  				 * pending list again.
  				 */
  				__remove_hrtimer(timer, base,
  						 HRTIMER_STATE_PENDING, 0);
  				list_add_tail(&timer->cb_entry,
  					      &base->cpu_base->cb_pending);
  			}
d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
  		}
  	}
  	spin_unlock_irq(&cpu_base->lock);
  }
  
  static void __run_hrtimer(struct hrtimer *timer)
  {
  	struct hrtimer_clock_base *base = timer->base;
  	struct hrtimer_cpu_base *cpu_base = base->cpu_base;
  	enum hrtimer_restart (*fn)(struct hrtimer *);
  	int restart;
237fc6e7a   Thomas Gleixner   add hrtimer speci...
1236
  	debug_hrtimer_deactivate(timer);
d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1237
1238
1239
1240
  	__remove_hrtimer(timer, base, HRTIMER_STATE_CALLBACK, 0);
  	timer_stats_account_hrtimer(timer);
  
  	fn = timer->function;
ccc7dadf7   Thomas Gleixner   hrtimer: prevent ...
1241
1242
  	if (timer->cb_mode == HRTIMER_CB_IRQSAFE_PERCPU ||
  	    timer->cb_mode == HRTIMER_CB_IRQSAFE_UNLOCKED) {
d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
  		/*
  		 * Used for scheduler timers, avoid lock inversion with
  		 * rq->lock and tasklist_lock.
  		 *
  		 * These timers are required to deal with enqueue expiry
  		 * themselves and are not allowed to migrate.
  		 */
  		spin_unlock(&cpu_base->lock);
  		restart = fn(timer);
  		spin_lock(&cpu_base->lock);
  	} else
  		restart = fn(timer);
  
  	/*
  	 * Note: We clear the CALLBACK bit after enqueue_hrtimer to avoid
  	 * reprogramming of the event hardware. This happens at the end of this
  	 * function anyway.
  	 */
  	if (restart != HRTIMER_NORESTART) {
  		BUG_ON(timer->state != HRTIMER_STATE_CALLBACK);
  		enqueue_hrtimer(timer, base, 0);
  	}
  	timer->state &= ~HRTIMER_STATE_CALLBACK;
  }
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
  #ifdef CONFIG_HIGH_RES_TIMERS
  
  /*
   * High resolution timer interrupt
   * Called with interrupts disabled
   */
  void hrtimer_interrupt(struct clock_event_device *dev)
  {
  	struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases);
  	struct hrtimer_clock_base *base;
  	ktime_t expires_next, now;
  	int i, raise = 0;
  
  	BUG_ON(!cpu_base->hres_active);
  	cpu_base->nr_events++;
  	dev->next_event.tv64 = KTIME_MAX;
  
   retry:
  	now = ktime_get();
  
  	expires_next.tv64 = KTIME_MAX;
  
  	base = cpu_base->clock_base;
  
  	for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) {
  		ktime_t basenow;
  		struct rb_node *node;
  
  		spin_lock(&cpu_base->lock);
  
  		basenow = ktime_add(now, base->offset);
  
  		while ((node = base->first)) {
  			struct hrtimer *timer;
  
  			timer = rb_entry(node, struct hrtimer, node);
654c8e0b1   Arjan van de Ven   hrtimer: turn hrt...
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
  			/*
  			 * The immediate goal for using the softexpires is
  			 * minimizing wakeups, not running timers at the
  			 * earliest interrupt after their soft expiration.
  			 * This allows us to avoid using a Priority Search
  			 * Tree, which can answer a stabbing querry for
  			 * overlapping intervals and instead use the simple
  			 * BST we already have.
  			 * We don't add extra wakeups by delaying timers that
  			 * are right-of a not yet expired timer, because that
  			 * timer will have to trigger a wakeup anyway.
  			 */
  
  			if (basenow.tv64 < hrtimer_get_softexpires_tv64(timer)) {
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1317
  				ktime_t expires;
cc584b213   Arjan van de Ven   hrtimer: convert ...
1318
  				expires = ktime_sub(hrtimer_get_expires(timer),
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
  						    base->offset);
  				if (expires.tv64 < expires_next.tv64)
  					expires_next = expires;
  				break;
  			}
  
  			/* Move softirq callbacks to the pending list */
  			if (timer->cb_mode == HRTIMER_CB_SOFTIRQ) {
  				__remove_hrtimer(timer, base,
  						 HRTIMER_STATE_PENDING, 0);
  				list_add_tail(&timer->cb_entry,
  					      &base->cpu_base->cb_pending);
  				raise = 1;
  				continue;
  			}
d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1334
  			__run_hrtimer(timer);
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
  		}
  		spin_unlock(&cpu_base->lock);
  		base++;
  	}
  
  	cpu_base->expires_next = expires_next;
  
  	/* Reprogramming necessary ? */
  	if (expires_next.tv64 != KTIME_MAX) {
  		if (tick_program_event(expires_next, 0))
  			goto retry;
  	}
  
  	/* Raise softirq ? */
  	if (raise)
  		raise_softirq(HRTIMER_SOFTIRQ);
  }
2e94d1f71   Arjan van de Ven   hrtimer: peek at ...
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
  /**
   * hrtimer_peek_ahead_timers -- run soft-expired timers now
   *
   * hrtimer_peek_ahead_timers will peek at the timer queue of
   * the current cpu and check if there are any timers for which
   * the soft expires time has passed. If any such timers exist,
   * they are run immediately and then removed from the timer queue.
   *
   */
  void hrtimer_peek_ahead_timers(void)
  {
2e94d1f71   Arjan van de Ven   hrtimer: peek at ...
1363
  	struct tick_device *td;
643bdf68f   Thomas Gleixner   hrtimers: simplif...
1364
  	unsigned long flags;
dc4304f7d   Arjan van de Ven   rangetimers: fix ...
1365
1366
  
  	if (!hrtimer_hres_active())
2e94d1f71   Arjan van de Ven   hrtimer: peek at ...
1367
1368
1369
1370
  		return;
  
  	local_irq_save(flags);
  	td = &__get_cpu_var(tick_cpu_device);
643bdf68f   Thomas Gleixner   hrtimers: simplif...
1371
1372
  	if (td && td->evtdev)
  		hrtimer_interrupt(td->evtdev);
2e94d1f71   Arjan van de Ven   hrtimer: peek at ...
1373
1374
  	local_irq_restore(flags);
  }
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1375
1376
  static void run_hrtimer_softirq(struct softirq_action *h)
  {
d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1377
1378
  	run_hrtimer_pending(&__get_cpu_var(hrtimer_bases));
  }
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1379

d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1380
  #endif	/* CONFIG_HIGH_RES_TIMERS */
82f67cd9f   Ingo Molnar   [PATCH] Add debug...
1381

d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
  /*
   * Called from timer softirq every jiffy, expire hrtimers:
   *
   * For HRT its the fall back code to run the softirq in the timer
   * softirq context in case the hrtimer initialization failed or has
   * not been done yet.
   */
  void hrtimer_run_pending(void)
  {
  	struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases);
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1392

d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1393
1394
  	if (hrtimer_hres_active())
  		return;
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1395

d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
  	/*
  	 * This _is_ ugly: We have to check in the softirq context,
  	 * whether we can switch to highres and / or nohz mode. The
  	 * clocksource switch happens in the timer interrupt with
  	 * xtime_lock held. Notification from there only sets the
  	 * check bit in the tick_oneshot code, otherwise we might
  	 * deadlock vs. xtime_lock.
  	 */
  	if (tick_check_oneshot_change(!hrtimer_is_hres_enabled()))
  		hrtimer_switch_to_hres();
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1406

d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1407
  	run_hrtimer_pending(cpu_base);
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1408
  }
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1409
  /*
d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1410
   * Called from hardirq context every jiffy
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1411
   */
833883d9a   Dimitri Sivanich   hrtimer: reduce c...
1412
  void hrtimer_run_queues(void)
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1413
  {
288867ec5   Thomas Gleixner   [hrtimer] Remove ...
1414
  	struct rb_node *node;
833883d9a   Dimitri Sivanich   hrtimer: reduce c...
1415
1416
1417
  	struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases);
  	struct hrtimer_clock_base *base;
  	int index, gettime = 1;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1418

833883d9a   Dimitri Sivanich   hrtimer: reduce c...
1419
  	if (hrtimer_hres_active())
3055addad   Dimitri Sivanich   [PATCH] hrtimer: ...
1420
  		return;
833883d9a   Dimitri Sivanich   hrtimer: reduce c...
1421
1422
  	for (index = 0; index < HRTIMER_MAX_CLOCK_BASES; index++) {
  		base = &cpu_base->clock_base[index];
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1423

833883d9a   Dimitri Sivanich   hrtimer: reduce c...
1424
  		if (!base->first)
d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1425
  			continue;
833883d9a   Dimitri Sivanich   hrtimer: reduce c...
1426

d7cfb60c5   Mark McLoughlin   hrtimer: remove h...
1427
  		if (gettime) {
833883d9a   Dimitri Sivanich   hrtimer: reduce c...
1428
1429
  			hrtimer_get_softirq_time(cpu_base);
  			gettime = 0;
b75f7a51c   Roman Zippel   [PATCH] hrtimers:...
1430
  		}
d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1431

833883d9a   Dimitri Sivanich   hrtimer: reduce c...
1432
  		spin_lock(&cpu_base->lock);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1433

833883d9a   Dimitri Sivanich   hrtimer: reduce c...
1434
1435
  		while ((node = base->first)) {
  			struct hrtimer *timer;
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1436

833883d9a   Dimitri Sivanich   hrtimer: reduce c...
1437
  			timer = rb_entry(node, struct hrtimer, node);
cc584b213   Arjan van de Ven   hrtimer: convert ...
1438
1439
  			if (base->softirq_time.tv64 <=
  					hrtimer_get_expires_tv64(timer))
833883d9a   Dimitri Sivanich   hrtimer: reduce c...
1440
1441
1442
1443
1444
1445
1446
1447
1448
  				break;
  
  			if (timer->cb_mode == HRTIMER_CB_SOFTIRQ) {
  				__remove_hrtimer(timer, base,
  					HRTIMER_STATE_PENDING, 0);
  				list_add_tail(&timer->cb_entry,
  					&base->cpu_base->cb_pending);
  				continue;
  			}
92127c7a4   Thomas Gleixner   [PATCH] hrtimers:...
1449

833883d9a   Dimitri Sivanich   hrtimer: reduce c...
1450
1451
1452
1453
  			__run_hrtimer(timer);
  		}
  		spin_unlock(&cpu_base->lock);
  	}
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1454
1455
1456
  }
  
  /*
10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1457
1458
   * Sleep related functions:
   */
c9cb2e3d7   Thomas Gleixner   [PATCH] hrtimers:...
1459
  static enum hrtimer_restart hrtimer_wakeup(struct hrtimer *timer)
00362e33f   Thomas Gleixner   [PATCH] hrtimer: ...
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
  {
  	struct hrtimer_sleeper *t =
  		container_of(timer, struct hrtimer_sleeper, timer);
  	struct task_struct *task = t->task;
  
  	t->task = NULL;
  	if (task)
  		wake_up_process(task);
  
  	return HRTIMER_NORESTART;
  }
36c8b5868   Ingo Molnar   [PATCH] sched: cl...
1471
  void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, struct task_struct *task)
00362e33f   Thomas Gleixner   [PATCH] hrtimer: ...
1472
1473
1474
  {
  	sl->timer.function = hrtimer_wakeup;
  	sl->task = task;
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1475
  #ifdef CONFIG_HIGH_RES_TIMERS
ccc7dadf7   Thomas Gleixner   hrtimer: prevent ...
1476
  	sl->timer.cb_mode = HRTIMER_CB_IRQSAFE_UNLOCKED;
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1477
  #endif
00362e33f   Thomas Gleixner   [PATCH] hrtimer: ...
1478
  }
669d7868a   Thomas Gleixner   [PATCH] hrtimer: ...
1479
  static int __sched do_nanosleep(struct hrtimer_sleeper *t, enum hrtimer_mode mode)
432569bb9   Roman Zippel   [PATCH] hrtimers:...
1480
  {
669d7868a   Thomas Gleixner   [PATCH] hrtimer: ...
1481
  	hrtimer_init_sleeper(t, current);
10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1482

432569bb9   Roman Zippel   [PATCH] hrtimers:...
1483
1484
  	do {
  		set_current_state(TASK_INTERRUPTIBLE);
cc584b213   Arjan van de Ven   hrtimer: convert ...
1485
  		hrtimer_start_expires(&t->timer, mode);
37bb6cb40   Peter Zijlstra   hrtimer: unlock h...
1486
1487
  		if (!hrtimer_active(&t->timer))
  			t->task = NULL;
432569bb9   Roman Zippel   [PATCH] hrtimers:...
1488

54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1489
1490
  		if (likely(t->task))
  			schedule();
432569bb9   Roman Zippel   [PATCH] hrtimers:...
1491

669d7868a   Thomas Gleixner   [PATCH] hrtimer: ...
1492
  		hrtimer_cancel(&t->timer);
c9cb2e3d7   Thomas Gleixner   [PATCH] hrtimers:...
1493
  		mode = HRTIMER_MODE_ABS;
669d7868a   Thomas Gleixner   [PATCH] hrtimer: ...
1494
1495
  
  	} while (t->task && !signal_pending(current));
432569bb9   Roman Zippel   [PATCH] hrtimers:...
1496

3588a085c   Peter Zijlstra   hrtimer: fix hrti...
1497
  	__set_current_state(TASK_RUNNING);
669d7868a   Thomas Gleixner   [PATCH] hrtimer: ...
1498
  	return t->task == NULL;
10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1499
  }
080344b98   Oleg Nesterov   hrtimer: fix *rmt...
1500
1501
1502
1503
  static int update_rmtp(struct hrtimer *timer, struct timespec __user *rmtp)
  {
  	struct timespec rmt;
  	ktime_t rem;
cc584b213   Arjan van de Ven   hrtimer: convert ...
1504
  	rem = hrtimer_expires_remaining(timer);
080344b98   Oleg Nesterov   hrtimer: fix *rmt...
1505
1506
1507
1508
1509
1510
1511
1512
1513
  	if (rem.tv64 <= 0)
  		return 0;
  	rmt = ktime_to_timespec(rem);
  
  	if (copy_to_user(rmtp, &rmt, sizeof(*rmtp)))
  		return -EFAULT;
  
  	return 1;
  }
1711ef386   Toyo Abe   [PATCH] posix-tim...
1514
  long __sched hrtimer_nanosleep_restart(struct restart_block *restart)
10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1515
  {
669d7868a   Thomas Gleixner   [PATCH] hrtimer: ...
1516
  	struct hrtimer_sleeper t;
080344b98   Oleg Nesterov   hrtimer: fix *rmt...
1517
  	struct timespec __user  *rmtp;
237fc6e7a   Thomas Gleixner   add hrtimer speci...
1518
  	int ret = 0;
10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1519

237fc6e7a   Thomas Gleixner   add hrtimer speci...
1520
1521
  	hrtimer_init_on_stack(&t.timer, restart->nanosleep.index,
  				HRTIMER_MODE_ABS);
cc584b213   Arjan van de Ven   hrtimer: convert ...
1522
  	hrtimer_set_expires_tv64(&t.timer, restart->nanosleep.expires);
10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1523

c9cb2e3d7   Thomas Gleixner   [PATCH] hrtimers:...
1524
  	if (do_nanosleep(&t, HRTIMER_MODE_ABS))
237fc6e7a   Thomas Gleixner   add hrtimer speci...
1525
  		goto out;
10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1526

029a07e03   Thomas Gleixner   hrtimer: use nano...
1527
  	rmtp = restart->nanosleep.rmtp;
432569bb9   Roman Zippel   [PATCH] hrtimers:...
1528
  	if (rmtp) {
237fc6e7a   Thomas Gleixner   add hrtimer speci...
1529
  		ret = update_rmtp(&t.timer, rmtp);
080344b98   Oleg Nesterov   hrtimer: fix *rmt...
1530
  		if (ret <= 0)
237fc6e7a   Thomas Gleixner   add hrtimer speci...
1531
  			goto out;
432569bb9   Roman Zippel   [PATCH] hrtimers:...
1532
  	}
10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1533

10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1534
  	/* The other values in restart are already filled in */
237fc6e7a   Thomas Gleixner   add hrtimer speci...
1535
1536
1537
1538
  	ret = -ERESTART_RESTARTBLOCK;
  out:
  	destroy_hrtimer_on_stack(&t.timer);
  	return ret;
10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1539
  }
080344b98   Oleg Nesterov   hrtimer: fix *rmt...
1540
  long hrtimer_nanosleep(struct timespec *rqtp, struct timespec __user *rmtp,
10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1541
1542
1543
  		       const enum hrtimer_mode mode, const clockid_t clockid)
  {
  	struct restart_block *restart;
669d7868a   Thomas Gleixner   [PATCH] hrtimer: ...
1544
  	struct hrtimer_sleeper t;
237fc6e7a   Thomas Gleixner   add hrtimer speci...
1545
  	int ret = 0;
3bd012060   Arjan van de Ven   hrtimer: make the...
1546
1547
1548
1549
1550
  	unsigned long slack;
  
  	slack = current->timer_slack_ns;
  	if (rt_task(current))
  		slack = 0;
10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1551

237fc6e7a   Thomas Gleixner   add hrtimer speci...
1552
  	hrtimer_init_on_stack(&t.timer, clockid, mode);
3bd012060   Arjan van de Ven   hrtimer: make the...
1553
  	hrtimer_set_expires_range_ns(&t.timer, timespec_to_ktime(*rqtp), slack);
432569bb9   Roman Zippel   [PATCH] hrtimers:...
1554
  	if (do_nanosleep(&t, mode))
237fc6e7a   Thomas Gleixner   add hrtimer speci...
1555
  		goto out;
10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1556

7978672c4   George Anzinger   [PATCH] hrtimers:...
1557
  	/* Absolute timers do not update the rmtp value and restart: */
237fc6e7a   Thomas Gleixner   add hrtimer speci...
1558
1559
1560
1561
  	if (mode == HRTIMER_MODE_ABS) {
  		ret = -ERESTARTNOHAND;
  		goto out;
  	}
10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1562

432569bb9   Roman Zippel   [PATCH] hrtimers:...
1563
  	if (rmtp) {
237fc6e7a   Thomas Gleixner   add hrtimer speci...
1564
  		ret = update_rmtp(&t.timer, rmtp);
080344b98   Oleg Nesterov   hrtimer: fix *rmt...
1565
  		if (ret <= 0)
237fc6e7a   Thomas Gleixner   add hrtimer speci...
1566
  			goto out;
432569bb9   Roman Zippel   [PATCH] hrtimers:...
1567
  	}
10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1568
1569
  
  	restart = &current_thread_info()->restart_block;
1711ef386   Toyo Abe   [PATCH] posix-tim...
1570
  	restart->fn = hrtimer_nanosleep_restart;
029a07e03   Thomas Gleixner   hrtimer: use nano...
1571
1572
  	restart->nanosleep.index = t.timer.base->index;
  	restart->nanosleep.rmtp = rmtp;
cc584b213   Arjan van de Ven   hrtimer: convert ...
1573
  	restart->nanosleep.expires = hrtimer_get_expires_tv64(&t.timer);
10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1574

237fc6e7a   Thomas Gleixner   add hrtimer speci...
1575
1576
1577
1578
  	ret = -ERESTART_RESTARTBLOCK;
  out:
  	destroy_hrtimer_on_stack(&t.timer);
  	return ret;
10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1579
  }
6ba1b9121   Thomas Gleixner   [PATCH] hrtimer: ...
1580
1581
1582
  asmlinkage long
  sys_nanosleep(struct timespec __user *rqtp, struct timespec __user *rmtp)
  {
080344b98   Oleg Nesterov   hrtimer: fix *rmt...
1583
  	struct timespec tu;
6ba1b9121   Thomas Gleixner   [PATCH] hrtimer: ...
1584
1585
1586
1587
1588
1589
  
  	if (copy_from_user(&tu, rqtp, sizeof(tu)))
  		return -EFAULT;
  
  	if (!timespec_valid(&tu))
  		return -EINVAL;
080344b98   Oleg Nesterov   hrtimer: fix *rmt...
1590
  	return hrtimer_nanosleep(&tu, rmtp, HRTIMER_MODE_REL, CLOCK_MONOTONIC);
6ba1b9121   Thomas Gleixner   [PATCH] hrtimer: ...
1591
  }
10c94ec16   Thomas Gleixner   [PATCH] hrtimer: ...
1592
  /*
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1593
1594
   * Functions related to boot-time initialization:
   */
0ec160dd4   Randy Dunlap   hrtimer: fix sect...
1595
  static void __cpuinit init_hrtimers_cpu(int cpu)
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1596
  {
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
1597
  	struct hrtimer_cpu_base *cpu_base = &per_cpu(hrtimer_bases, cpu);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1598
  	int i;
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
1599
  	spin_lock_init(&cpu_base->lock);
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
1600
1601
1602
  
  	for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++)
  		cpu_base->clock_base[i].cpu_base = cpu_base;
d3d74453c   Peter Zijlstra   hrtimer: fixup th...
1603
  	INIT_LIST_HEAD(&cpu_base->cb_pending);
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1604
  	hrtimer_init_hres(cpu_base);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1605
1606
1607
  }
  
  #ifdef CONFIG_HOTPLUG_CPU
41e1022ea   Thomas Gleixner   hrtimer: fix migr...
1608
  static int migrate_hrtimer_list(struct hrtimer_clock_base *old_base,
ccc7dadf7   Thomas Gleixner   hrtimer: prevent ...
1609
  				struct hrtimer_clock_base *new_base, int dcpu)
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1610
1611
1612
  {
  	struct hrtimer *timer;
  	struct rb_node *node;
41e1022ea   Thomas Gleixner   hrtimer: fix migr...
1613
  	int raise = 0;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1614
1615
1616
  
  	while ((node = rb_first(&old_base->active))) {
  		timer = rb_entry(node, struct hrtimer, node);
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1617
  		BUG_ON(hrtimer_callback_running(timer));
237fc6e7a   Thomas Gleixner   add hrtimer speci...
1618
  		debug_hrtimer_deactivate(timer);
b00c1a99e   Thomas Gleixner   hrtimer: mark mig...
1619
1620
  
  		/*
ccc7dadf7   Thomas Gleixner   hrtimer: prevent ...
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
  		 * Should not happen. Per CPU timers should be
  		 * canceled _before_ the migration code is called
  		 */
  		if (timer->cb_mode == HRTIMER_CB_IRQSAFE_PERCPU) {
  			__remove_hrtimer(timer, old_base,
  					 HRTIMER_STATE_INACTIVE, 0);
  			WARN(1, "hrtimer (%p %p)active but cpu %d dead
  ",
  			     timer, timer->function, dcpu);
  			continue;
  		}
  
  		/*
b00c1a99e   Thomas Gleixner   hrtimer: mark mig...
1634
1635
1636
1637
1638
  		 * Mark it as STATE_MIGRATE not INACTIVE otherwise the
  		 * timer could be seen as !active and just vanish away
  		 * under us on another CPU
  		 */
  		__remove_hrtimer(timer, old_base, HRTIMER_STATE_MIGRATE, 0);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1639
  		timer->base = new_base;
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1640
1641
1642
1643
  		/*
  		 * Enqueue the timer. Allow reprogramming of the event device
  		 */
  		enqueue_hrtimer(timer, new_base, 1);
41e1022ea   Thomas Gleixner   hrtimer: fix migr...
1644
1645
1646
1647
1648
  
  #ifdef CONFIG_HIGH_RES_TIMERS
  		/*
  		 * Happens with high res enabled when the timer was
  		 * already expired and the callback mode is
ccc7dadf7   Thomas Gleixner   hrtimer: prevent ...
1649
1650
1651
1652
1653
  		 * HRTIMER_CB_IRQSAFE_UNLOCKED (hrtimer_sleeper). The
  		 * enqueue code does not move them to the soft irq
  		 * pending list for performance/latency reasons, but
  		 * in the migration state, we need to do that
  		 * otherwise we end up with a stale timer.
41e1022ea   Thomas Gleixner   hrtimer: fix migr...
1654
  		 */
b00c1a99e   Thomas Gleixner   hrtimer: mark mig...
1655
  		if (timer->state == HRTIMER_STATE_MIGRATE) {
41e1022ea   Thomas Gleixner   hrtimer: fix migr...
1656
1657
1658
1659
1660
1661
  			timer->state = HRTIMER_STATE_PENDING;
  			list_add_tail(&timer->cb_entry,
  				      &new_base->cpu_base->cb_pending);
  			raise = 1;
  		}
  #endif
b00c1a99e   Thomas Gleixner   hrtimer: mark mig...
1662
1663
  		/* Clear the migration state bit */
  		timer->state &= ~HRTIMER_STATE_MIGRATE;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1664
  	}
41e1022ea   Thomas Gleixner   hrtimer: fix migr...
1665
  	return raise;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1666
  }
7659e3496   Thomas Gleixner   hrtimer: migrate ...
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
  #ifdef CONFIG_HIGH_RES_TIMERS
  static int migrate_hrtimer_pending(struct hrtimer_cpu_base *old_base,
  				   struct hrtimer_cpu_base *new_base)
  {
  	struct hrtimer *timer;
  	int raise = 0;
  
  	while (!list_empty(&old_base->cb_pending)) {
  		timer = list_entry(old_base->cb_pending.next,
  				   struct hrtimer, cb_entry);
  
  		__remove_hrtimer(timer, timer->base, HRTIMER_STATE_PENDING, 0);
  		timer->base = &new_base->clock_base[timer->base->index];
  		list_add_tail(&timer->cb_entry, &new_base->cb_pending);
  		raise = 1;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1682
  	}
7659e3496   Thomas Gleixner   hrtimer: migrate ...
1683
1684
1685
1686
1687
1688
1689
  	return raise;
  }
  #else
  static int migrate_hrtimer_pending(struct hrtimer_cpu_base *old_base,
  				   struct hrtimer_cpu_base *new_base)
  {
  	return 0;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1690
  }
7659e3496   Thomas Gleixner   hrtimer: migrate ...
1691
  #endif
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1692
1693
1694
  
  static void migrate_hrtimers(int cpu)
  {
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
1695
  	struct hrtimer_cpu_base *old_base, *new_base;
7659e3496   Thomas Gleixner   hrtimer: migrate ...
1696
  	int i, raise = 0;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1697
1698
  
  	BUG_ON(cpu_online(cpu));
3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
1699
1700
  	old_base = &per_cpu(hrtimer_bases, cpu);
  	new_base = &get_cpu_var(hrtimer_bases);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1701

54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1702
  	tick_cancel_sched_timer(cpu);
d82f0b0f6   Oleg Nesterov   migrate_timers: a...
1703
1704
1705
1706
1707
  	/*
  	 * The caller is globally serialized and nobody else
  	 * takes two locks at once, deadlock is not possible.
  	 */
  	spin_lock_irq(&new_base->lock);
8e60e05fd   Oleg Nesterov   hrtimers: simplif...
1708
  	spin_lock_nested(&old_base->lock, SINGLE_DEPTH_NESTING);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1709

3c8aa39d7   Thomas Gleixner   [PATCH] hrtimers:...
1710
  	for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) {
41e1022ea   Thomas Gleixner   hrtimer: fix migr...
1711
  		if (migrate_hrtimer_list(&old_base->clock_base[i],
ccc7dadf7   Thomas Gleixner   hrtimer: prevent ...
1712
  					 &new_base->clock_base[i], cpu))
41e1022ea   Thomas Gleixner   hrtimer: fix migr...
1713
  			raise = 1;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1714
  	}
7659e3496   Thomas Gleixner   hrtimer: migrate ...
1715
1716
  	if (migrate_hrtimer_pending(old_base, new_base))
  		raise = 1;
8e60e05fd   Oleg Nesterov   hrtimers: simplif...
1717
  	spin_unlock(&old_base->lock);
d82f0b0f6   Oleg Nesterov   migrate_timers: a...
1718
  	spin_unlock_irq(&new_base->lock);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1719
  	put_cpu_var(hrtimer_bases);
7659e3496   Thomas Gleixner   hrtimer: migrate ...
1720
1721
1722
  
  	if (raise)
  		hrtimer_raise_softirq();
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1723
1724
  }
  #endif /* CONFIG_HOTPLUG_CPU */
8c78f3075   Chandra Seetharaman   [PATCH] cpu hotpl...
1725
  static int __cpuinit hrtimer_cpu_notify(struct notifier_block *self,
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1726
1727
  					unsigned long action, void *hcpu)
  {
7713a7d19   David Miller   [HRTIMER] Fix cpu...
1728
  	unsigned int cpu = (long)hcpu;
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1729
1730
1731
1732
  
  	switch (action) {
  
  	case CPU_UP_PREPARE:
8bb784428   Rafael J. Wysocki   Add suspend-relat...
1733
  	case CPU_UP_PREPARE_FROZEN:
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1734
1735
1736
1737
1738
  		init_hrtimers_cpu(cpu);
  		break;
  
  #ifdef CONFIG_HOTPLUG_CPU
  	case CPU_DEAD:
8bb784428   Rafael J. Wysocki   Add suspend-relat...
1739
  	case CPU_DEAD_FROZEN:
d316c57ff   Thomas Gleixner   [PATCH] clockeven...
1740
  		clockevents_notify(CLOCK_EVT_NOTIFY_CPU_DEAD, &cpu);
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
  		migrate_hrtimers(cpu);
  		break;
  #endif
  
  	default:
  		break;
  	}
  
  	return NOTIFY_OK;
  }
8c78f3075   Chandra Seetharaman   [PATCH] cpu hotpl...
1751
  static struct notifier_block __cpuinitdata hrtimers_nb = {
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1752
1753
1754
1755
1756
1757
1758
1759
  	.notifier_call = hrtimer_cpu_notify,
  };
  
  void __init hrtimers_init(void)
  {
  	hrtimer_cpu_notify(&hrtimers_nb, (unsigned long)CPU_UP_PREPARE,
  			  (void *)(long)smp_processor_id());
  	register_cpu_notifier(&hrtimers_nb);
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1760
  #ifdef CONFIG_HIGH_RES_TIMERS
962cf36c5   Carlos R. Mafra   Remove argument f...
1761
  	open_softirq(HRTIMER_SOFTIRQ, run_hrtimer_softirq);
54cdfdb47   Thomas Gleixner   [PATCH] hrtimers:...
1762
  #endif
c0a313296   Thomas Gleixner   [PATCH] hrtimer: ...
1763
  }
7bb67439b   Arjan van de Ven   select: Introduce...
1764
  /**
654c8e0b1   Arjan van de Ven   hrtimer: turn hrt...
1765
   * schedule_hrtimeout_range - sleep until timeout
7bb67439b   Arjan van de Ven   select: Introduce...
1766
   * @expires:	timeout value (ktime_t)
654c8e0b1   Arjan van de Ven   hrtimer: turn hrt...
1767
   * @delta:	slack in expires timeout (ktime_t)
7bb67439b   Arjan van de Ven   select: Introduce...
1768
1769
1770
1771
1772
1773
   * @mode:	timer mode, HRTIMER_MODE_ABS or HRTIMER_MODE_REL
   *
   * Make the current task sleep until the given expiry time has
   * elapsed. The routine will return immediately unless
   * the current task state has been set (see set_current_state()).
   *
654c8e0b1   Arjan van de Ven   hrtimer: turn hrt...
1774
1775
1776
1777
1778
   * The @delta argument gives the kernel the freedom to schedule the
   * actual wakeup to a time that is both power and performance friendly.
   * The kernel give the normal best effort behavior for "@expires+@delta",
   * but may decide to fire the timer earlier, but no earlier than @expires.
   *
7bb67439b   Arjan van de Ven   select: Introduce...
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
   * You can set the task state as follows -
   *
   * %TASK_UNINTERRUPTIBLE - at least @timeout time is guaranteed to
   * pass before the routine returns.
   *
   * %TASK_INTERRUPTIBLE - the routine may return early if a signal is
   * delivered to the current task.
   *
   * The current task state is guaranteed to be TASK_RUNNING when this
   * routine returns.
   *
   * Returns 0 when the timer has expired otherwise -EINTR
   */
654c8e0b1   Arjan van de Ven   hrtimer: turn hrt...
1792
  int __sched schedule_hrtimeout_range(ktime_t *expires, unsigned long delta,
7bb67439b   Arjan van de Ven   select: Introduce...
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
  			       const enum hrtimer_mode mode)
  {
  	struct hrtimer_sleeper t;
  
  	/*
  	 * Optimize when a zero timeout value is given. It does not
  	 * matter whether this is an absolute or a relative time.
  	 */
  	if (expires && !expires->tv64) {
  		__set_current_state(TASK_RUNNING);
  		return 0;
  	}
  
  	/*
  	 * A NULL parameter means "inifinte"
  	 */
  	if (!expires) {
  		schedule();
  		__set_current_state(TASK_RUNNING);
  		return -EINTR;
  	}
  
  	hrtimer_init_on_stack(&t.timer, CLOCK_MONOTONIC, mode);
654c8e0b1   Arjan van de Ven   hrtimer: turn hrt...
1816
  	hrtimer_set_expires_range_ns(&t.timer, *expires, delta);
7bb67439b   Arjan van de Ven   select: Introduce...
1817
1818
  
  	hrtimer_init_sleeper(&t, current);
cc584b213   Arjan van de Ven   hrtimer: convert ...
1819
  	hrtimer_start_expires(&t.timer, mode);
7bb67439b   Arjan van de Ven   select: Introduce...
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
  	if (!hrtimer_active(&t.timer))
  		t.task = NULL;
  
  	if (likely(t.task))
  		schedule();
  
  	hrtimer_cancel(&t.timer);
  	destroy_hrtimer_on_stack(&t.timer);
  
  	__set_current_state(TASK_RUNNING);
  
  	return !t.task ? 0 : -EINTR;
  }
654c8e0b1   Arjan van de Ven   hrtimer: turn hrt...
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
  EXPORT_SYMBOL_GPL(schedule_hrtimeout_range);
  
  /**
   * schedule_hrtimeout - sleep until timeout
   * @expires:	timeout value (ktime_t)
   * @mode:	timer mode, HRTIMER_MODE_ABS or HRTIMER_MODE_REL
   *
   * Make the current task sleep until the given expiry time has
   * elapsed. The routine will return immediately unless
   * the current task state has been set (see set_current_state()).
   *
   * You can set the task state as follows -
   *
   * %TASK_UNINTERRUPTIBLE - at least @timeout time is guaranteed to
   * pass before the routine returns.
   *
   * %TASK_INTERRUPTIBLE - the routine may return early if a signal is
   * delivered to the current task.
   *
   * The current task state is guaranteed to be TASK_RUNNING when this
   * routine returns.
   *
   * Returns 0 when the timer has expired otherwise -EINTR
   */
  int __sched schedule_hrtimeout(ktime_t *expires,
  			       const enum hrtimer_mode mode)
  {
  	return schedule_hrtimeout_range(expires, 0, mode);
  }
7bb67439b   Arjan van de Ven   select: Introduce...
1862
  EXPORT_SYMBOL_GPL(schedule_hrtimeout);