xref: /openbmc/linux/kernel/time/alarmtimer.c (revision bb0eb050)
1 /*
2  * Alarmtimer interface
3  *
4  * This interface provides a timer which is similarto hrtimers,
5  * but triggers a RTC alarm if the box is suspend.
6  *
7  * This interface is influenced by the Android RTC Alarm timer
8  * interface.
9  *
10  * Copyright (C) 2010 IBM Corperation
11  *
12  * Author: John Stultz <john.stultz@linaro.org>
13  *
14  * This program is free software; you can redistribute it and/or modify
15  * it under the terms of the GNU General Public License version 2 as
16  * published by the Free Software Foundation.
17  */
18 #include <linux/time.h>
19 #include <linux/hrtimer.h>
20 #include <linux/timerqueue.h>
21 #include <linux/rtc.h>
22 #include <linux/sched/signal.h>
23 #include <linux/sched/debug.h>
24 #include <linux/alarmtimer.h>
25 #include <linux/mutex.h>
26 #include <linux/platform_device.h>
27 #include <linux/posix-timers.h>
28 #include <linux/workqueue.h>
29 #include <linux/freezer.h>
30 
31 #include "posix-timers.h"
32 
33 #define CREATE_TRACE_POINTS
34 #include <trace/events/alarmtimer.h>
35 
36 /**
37  * struct alarm_base - Alarm timer bases
38  * @lock:		Lock for syncrhonized access to the base
39  * @timerqueue:		Timerqueue head managing the list of events
40  * @gettime:		Function to read the time correlating to the base
41  * @base_clockid:	clockid for the base
42  */
43 static struct alarm_base {
44 	spinlock_t		lock;
45 	struct timerqueue_head	timerqueue;
46 	ktime_t			(*gettime)(void);
47 	clockid_t		base_clockid;
48 } alarm_bases[ALARM_NUMTYPE];
49 
50 #if defined(CONFIG_POSIX_TIMERS) || defined(CONFIG_RTC_CLASS)
51 /* freezer information to handle clock_nanosleep triggered wakeups */
52 static enum alarmtimer_type freezer_alarmtype;
53 static ktime_t freezer_expires;
54 static ktime_t freezer_delta;
55 static DEFINE_SPINLOCK(freezer_delta_lock);
56 #endif
57 
58 static struct wakeup_source *ws;
59 
60 #ifdef CONFIG_RTC_CLASS
61 /* rtc timer and device for setting alarm wakeups at suspend */
62 static struct rtc_timer		rtctimer;
63 static struct rtc_device	*rtcdev;
64 static DEFINE_SPINLOCK(rtcdev_lock);
65 
66 /**
67  * alarmtimer_get_rtcdev - Return selected rtcdevice
68  *
69  * This function returns the rtc device to use for wakealarms.
70  * If one has not already been chosen, it checks to see if a
71  * functional rtc device is available.
72  */
73 struct rtc_device *alarmtimer_get_rtcdev(void)
74 {
75 	unsigned long flags;
76 	struct rtc_device *ret;
77 
78 	spin_lock_irqsave(&rtcdev_lock, flags);
79 	ret = rtcdev;
80 	spin_unlock_irqrestore(&rtcdev_lock, flags);
81 
82 	return ret;
83 }
84 EXPORT_SYMBOL_GPL(alarmtimer_get_rtcdev);
85 
86 static int alarmtimer_rtc_add_device(struct device *dev,
87 				struct class_interface *class_intf)
88 {
89 	unsigned long flags;
90 	struct rtc_device *rtc = to_rtc_device(dev);
91 
92 	if (rtcdev)
93 		return -EBUSY;
94 
95 	if (!rtc->ops->set_alarm)
96 		return -1;
97 	if (!device_may_wakeup(rtc->dev.parent))
98 		return -1;
99 
100 	spin_lock_irqsave(&rtcdev_lock, flags);
101 	if (!rtcdev) {
102 		rtcdev = rtc;
103 		/* hold a reference so it doesn't go away */
104 		get_device(dev);
105 	}
106 	spin_unlock_irqrestore(&rtcdev_lock, flags);
107 	return 0;
108 }
109 
110 static inline void alarmtimer_rtc_timer_init(void)
111 {
112 	rtc_timer_init(&rtctimer, NULL, NULL);
113 }
114 
115 static struct class_interface alarmtimer_rtc_interface = {
116 	.add_dev = &alarmtimer_rtc_add_device,
117 };
118 
119 static int alarmtimer_rtc_interface_setup(void)
120 {
121 	alarmtimer_rtc_interface.class = rtc_class;
122 	return class_interface_register(&alarmtimer_rtc_interface);
123 }
124 static void alarmtimer_rtc_interface_remove(void)
125 {
126 	class_interface_unregister(&alarmtimer_rtc_interface);
127 }
128 #else
129 struct rtc_device *alarmtimer_get_rtcdev(void)
130 {
131 	return NULL;
132 }
133 #define rtcdev (NULL)
134 static inline int alarmtimer_rtc_interface_setup(void) { return 0; }
135 static inline void alarmtimer_rtc_interface_remove(void) { }
136 static inline void alarmtimer_rtc_timer_init(void) { }
137 #endif
138 
139 /**
140  * alarmtimer_enqueue - Adds an alarm timer to an alarm_base timerqueue
141  * @base: pointer to the base where the timer is being run
142  * @alarm: pointer to alarm being enqueued.
143  *
144  * Adds alarm to a alarm_base timerqueue
145  *
146  * Must hold base->lock when calling.
147  */
148 static void alarmtimer_enqueue(struct alarm_base *base, struct alarm *alarm)
149 {
150 	if (alarm->state & ALARMTIMER_STATE_ENQUEUED)
151 		timerqueue_del(&base->timerqueue, &alarm->node);
152 
153 	timerqueue_add(&base->timerqueue, &alarm->node);
154 	alarm->state |= ALARMTIMER_STATE_ENQUEUED;
155 }
156 
157 /**
158  * alarmtimer_dequeue - Removes an alarm timer from an alarm_base timerqueue
159  * @base: pointer to the base where the timer is running
160  * @alarm: pointer to alarm being removed
161  *
162  * Removes alarm to a alarm_base timerqueue
163  *
164  * Must hold base->lock when calling.
165  */
166 static void alarmtimer_dequeue(struct alarm_base *base, struct alarm *alarm)
167 {
168 	if (!(alarm->state & ALARMTIMER_STATE_ENQUEUED))
169 		return;
170 
171 	timerqueue_del(&base->timerqueue, &alarm->node);
172 	alarm->state &= ~ALARMTIMER_STATE_ENQUEUED;
173 }
174 
175 
176 /**
177  * alarmtimer_fired - Handles alarm hrtimer being fired.
178  * @timer: pointer to hrtimer being run
179  *
180  * When a alarm timer fires, this runs through the timerqueue to
181  * see which alarms expired, and runs those. If there are more alarm
182  * timers queued for the future, we set the hrtimer to fire when
183  * when the next future alarm timer expires.
184  */
185 static enum hrtimer_restart alarmtimer_fired(struct hrtimer *timer)
186 {
187 	struct alarm *alarm = container_of(timer, struct alarm, timer);
188 	struct alarm_base *base = &alarm_bases[alarm->type];
189 	unsigned long flags;
190 	int ret = HRTIMER_NORESTART;
191 	int restart = ALARMTIMER_NORESTART;
192 
193 	spin_lock_irqsave(&base->lock, flags);
194 	alarmtimer_dequeue(base, alarm);
195 	spin_unlock_irqrestore(&base->lock, flags);
196 
197 	if (alarm->function)
198 		restart = alarm->function(alarm, base->gettime());
199 
200 	spin_lock_irqsave(&base->lock, flags);
201 	if (restart != ALARMTIMER_NORESTART) {
202 		hrtimer_set_expires(&alarm->timer, alarm->node.expires);
203 		alarmtimer_enqueue(base, alarm);
204 		ret = HRTIMER_RESTART;
205 	}
206 	spin_unlock_irqrestore(&base->lock, flags);
207 
208 	trace_alarmtimer_fired(alarm, base->gettime());
209 	return ret;
210 
211 }
212 
213 ktime_t alarm_expires_remaining(const struct alarm *alarm)
214 {
215 	struct alarm_base *base = &alarm_bases[alarm->type];
216 	return ktime_sub(alarm->node.expires, base->gettime());
217 }
218 EXPORT_SYMBOL_GPL(alarm_expires_remaining);
219 
220 #ifdef CONFIG_RTC_CLASS
221 /**
222  * alarmtimer_suspend - Suspend time callback
223  * @dev: unused
224  * @state: unused
225  *
226  * When we are going into suspend, we look through the bases
227  * to see which is the soonest timer to expire. We then
228  * set an rtc timer to fire that far into the future, which
229  * will wake us from suspend.
230  */
231 static int alarmtimer_suspend(struct device *dev)
232 {
233 	ktime_t min, now, expires;
234 	int i, ret, type;
235 	struct rtc_device *rtc;
236 	unsigned long flags;
237 	struct rtc_time tm;
238 
239 	spin_lock_irqsave(&freezer_delta_lock, flags);
240 	min = freezer_delta;
241 	expires = freezer_expires;
242 	type = freezer_alarmtype;
243 	freezer_delta = 0;
244 	spin_unlock_irqrestore(&freezer_delta_lock, flags);
245 
246 	rtc = alarmtimer_get_rtcdev();
247 	/* If we have no rtcdev, just return */
248 	if (!rtc)
249 		return 0;
250 
251 	/* Find the soonest timer to expire*/
252 	for (i = 0; i < ALARM_NUMTYPE; i++) {
253 		struct alarm_base *base = &alarm_bases[i];
254 		struct timerqueue_node *next;
255 		ktime_t delta;
256 
257 		spin_lock_irqsave(&base->lock, flags);
258 		next = timerqueue_getnext(&base->timerqueue);
259 		spin_unlock_irqrestore(&base->lock, flags);
260 		if (!next)
261 			continue;
262 		delta = ktime_sub(next->expires, base->gettime());
263 		if (!min || (delta < min)) {
264 			expires = next->expires;
265 			min = delta;
266 			type = i;
267 		}
268 	}
269 	if (min == 0)
270 		return 0;
271 
272 	if (ktime_to_ns(min) < 2 * NSEC_PER_SEC) {
273 		__pm_wakeup_event(ws, 2 * MSEC_PER_SEC);
274 		return -EBUSY;
275 	}
276 
277 	trace_alarmtimer_suspend(expires, type);
278 
279 	/* Setup an rtc timer to fire that far in the future */
280 	rtc_timer_cancel(rtc, &rtctimer);
281 	rtc_read_time(rtc, &tm);
282 	now = rtc_tm_to_ktime(tm);
283 	now = ktime_add(now, min);
284 
285 	/* Set alarm, if in the past reject suspend briefly to handle */
286 	ret = rtc_timer_start(rtc, &rtctimer, now, 0);
287 	if (ret < 0)
288 		__pm_wakeup_event(ws, MSEC_PER_SEC);
289 	return ret;
290 }
291 
292 static int alarmtimer_resume(struct device *dev)
293 {
294 	struct rtc_device *rtc;
295 
296 	rtc = alarmtimer_get_rtcdev();
297 	if (rtc)
298 		rtc_timer_cancel(rtc, &rtctimer);
299 	return 0;
300 }
301 
302 #else
303 static int alarmtimer_suspend(struct device *dev)
304 {
305 	return 0;
306 }
307 
308 static int alarmtimer_resume(struct device *dev)
309 {
310 	return 0;
311 }
312 #endif
313 
314 /**
315  * alarm_init - Initialize an alarm structure
316  * @alarm: ptr to alarm to be initialized
317  * @type: the type of the alarm
318  * @function: callback that is run when the alarm fires
319  */
320 void alarm_init(struct alarm *alarm, enum alarmtimer_type type,
321 		enum alarmtimer_restart (*function)(struct alarm *, ktime_t))
322 {
323 	timerqueue_init(&alarm->node);
324 	hrtimer_init(&alarm->timer, alarm_bases[type].base_clockid,
325 			HRTIMER_MODE_ABS);
326 	alarm->timer.function = alarmtimer_fired;
327 	alarm->function = function;
328 	alarm->type = type;
329 	alarm->state = ALARMTIMER_STATE_INACTIVE;
330 }
331 EXPORT_SYMBOL_GPL(alarm_init);
332 
333 /**
334  * alarm_start - Sets an absolute alarm to fire
335  * @alarm: ptr to alarm to set
336  * @start: time to run the alarm
337  */
338 void alarm_start(struct alarm *alarm, ktime_t start)
339 {
340 	struct alarm_base *base = &alarm_bases[alarm->type];
341 	unsigned long flags;
342 
343 	spin_lock_irqsave(&base->lock, flags);
344 	alarm->node.expires = start;
345 	alarmtimer_enqueue(base, alarm);
346 	hrtimer_start(&alarm->timer, alarm->node.expires, HRTIMER_MODE_ABS);
347 	spin_unlock_irqrestore(&base->lock, flags);
348 
349 	trace_alarmtimer_start(alarm, base->gettime());
350 }
351 EXPORT_SYMBOL_GPL(alarm_start);
352 
353 /**
354  * alarm_start_relative - Sets a relative alarm to fire
355  * @alarm: ptr to alarm to set
356  * @start: time relative to now to run the alarm
357  */
358 void alarm_start_relative(struct alarm *alarm, ktime_t start)
359 {
360 	struct alarm_base *base = &alarm_bases[alarm->type];
361 
362 	start = ktime_add_safe(start, base->gettime());
363 	alarm_start(alarm, start);
364 }
365 EXPORT_SYMBOL_GPL(alarm_start_relative);
366 
367 void alarm_restart(struct alarm *alarm)
368 {
369 	struct alarm_base *base = &alarm_bases[alarm->type];
370 	unsigned long flags;
371 
372 	spin_lock_irqsave(&base->lock, flags);
373 	hrtimer_set_expires(&alarm->timer, alarm->node.expires);
374 	hrtimer_restart(&alarm->timer);
375 	alarmtimer_enqueue(base, alarm);
376 	spin_unlock_irqrestore(&base->lock, flags);
377 }
378 EXPORT_SYMBOL_GPL(alarm_restart);
379 
380 /**
381  * alarm_try_to_cancel - Tries to cancel an alarm timer
382  * @alarm: ptr to alarm to be canceled
383  *
384  * Returns 1 if the timer was canceled, 0 if it was not running,
385  * and -1 if the callback was running
386  */
387 int alarm_try_to_cancel(struct alarm *alarm)
388 {
389 	struct alarm_base *base = &alarm_bases[alarm->type];
390 	unsigned long flags;
391 	int ret;
392 
393 	spin_lock_irqsave(&base->lock, flags);
394 	ret = hrtimer_try_to_cancel(&alarm->timer);
395 	if (ret >= 0)
396 		alarmtimer_dequeue(base, alarm);
397 	spin_unlock_irqrestore(&base->lock, flags);
398 
399 	trace_alarmtimer_cancel(alarm, base->gettime());
400 	return ret;
401 }
402 EXPORT_SYMBOL_GPL(alarm_try_to_cancel);
403 
404 
405 /**
406  * alarm_cancel - Spins trying to cancel an alarm timer until it is done
407  * @alarm: ptr to alarm to be canceled
408  *
409  * Returns 1 if the timer was canceled, 0 if it was not active.
410  */
411 int alarm_cancel(struct alarm *alarm)
412 {
413 	for (;;) {
414 		int ret = alarm_try_to_cancel(alarm);
415 		if (ret >= 0)
416 			return ret;
417 		cpu_relax();
418 	}
419 }
420 EXPORT_SYMBOL_GPL(alarm_cancel);
421 
422 
423 u64 alarm_forward(struct alarm *alarm, ktime_t now, ktime_t interval)
424 {
425 	u64 overrun = 1;
426 	ktime_t delta;
427 
428 	delta = ktime_sub(now, alarm->node.expires);
429 
430 	if (delta < 0)
431 		return 0;
432 
433 	if (unlikely(delta >= interval)) {
434 		s64 incr = ktime_to_ns(interval);
435 
436 		overrun = ktime_divns(delta, incr);
437 
438 		alarm->node.expires = ktime_add_ns(alarm->node.expires,
439 							incr*overrun);
440 
441 		if (alarm->node.expires > now)
442 			return overrun;
443 		/*
444 		 * This (and the ktime_add() below) is the
445 		 * correction for exact:
446 		 */
447 		overrun++;
448 	}
449 
450 	alarm->node.expires = ktime_add_safe(alarm->node.expires, interval);
451 	return overrun;
452 }
453 EXPORT_SYMBOL_GPL(alarm_forward);
454 
455 u64 alarm_forward_now(struct alarm *alarm, ktime_t interval)
456 {
457 	struct alarm_base *base = &alarm_bases[alarm->type];
458 
459 	return alarm_forward(alarm, base->gettime(), interval);
460 }
461 EXPORT_SYMBOL_GPL(alarm_forward_now);
462 
463 #ifdef CONFIG_POSIX_TIMERS
464 
465 static void alarmtimer_freezerset(ktime_t absexp, enum alarmtimer_type type)
466 {
467 	struct alarm_base *base;
468 	unsigned long flags;
469 	ktime_t delta;
470 
471 	switch(type) {
472 	case ALARM_REALTIME:
473 		base = &alarm_bases[ALARM_REALTIME];
474 		type = ALARM_REALTIME_FREEZER;
475 		break;
476 	case ALARM_BOOTTIME:
477 		base = &alarm_bases[ALARM_BOOTTIME];
478 		type = ALARM_BOOTTIME_FREEZER;
479 		break;
480 	default:
481 		WARN_ONCE(1, "Invalid alarm type: %d\n", type);
482 		return;
483 	}
484 
485 	delta = ktime_sub(absexp, base->gettime());
486 
487 	spin_lock_irqsave(&freezer_delta_lock, flags);
488 	if (!freezer_delta || (delta < freezer_delta)) {
489 		freezer_delta = delta;
490 		freezer_expires = absexp;
491 		freezer_alarmtype = type;
492 	}
493 	spin_unlock_irqrestore(&freezer_delta_lock, flags);
494 }
495 
496 /**
497  * clock2alarm - helper that converts from clockid to alarmtypes
498  * @clockid: clockid.
499  */
500 static enum alarmtimer_type clock2alarm(clockid_t clockid)
501 {
502 	if (clockid == CLOCK_REALTIME_ALARM)
503 		return ALARM_REALTIME;
504 	if (clockid == CLOCK_BOOTTIME_ALARM)
505 		return ALARM_BOOTTIME;
506 	return -1;
507 }
508 
509 /**
510  * alarm_handle_timer - Callback for posix timers
511  * @alarm: alarm that fired
512  *
513  * Posix timer callback for expired alarm timers.
514  */
515 static enum alarmtimer_restart alarm_handle_timer(struct alarm *alarm,
516 							ktime_t now)
517 {
518 	struct k_itimer *ptr = container_of(alarm, struct k_itimer,
519 					    it.alarm.alarmtimer);
520 	enum alarmtimer_restart result = ALARMTIMER_NORESTART;
521 	unsigned long flags;
522 	int si_private = 0;
523 
524 	spin_lock_irqsave(&ptr->it_lock, flags);
525 
526 	ptr->it_active = 0;
527 	if (ptr->it_interval)
528 		si_private = ++ptr->it_requeue_pending;
529 
530 	if (posix_timer_event(ptr, si_private) && ptr->it_interval) {
531 		/*
532 		 * Handle ignored signals and rearm the timer. This will go
533 		 * away once we handle ignored signals proper.
534 		 */
535 		ptr->it_overrun += alarm_forward_now(alarm, ptr->it_interval);
536 		++ptr->it_requeue_pending;
537 		ptr->it_active = 1;
538 		result = ALARMTIMER_RESTART;
539 	}
540 	spin_unlock_irqrestore(&ptr->it_lock, flags);
541 
542 	return result;
543 }
544 
545 /**
546  * alarm_timer_rearm - Posix timer callback for rearming timer
547  * @timr:	Pointer to the posixtimer data struct
548  */
549 static void alarm_timer_rearm(struct k_itimer *timr)
550 {
551 	struct alarm *alarm = &timr->it.alarm.alarmtimer;
552 
553 	timr->it_overrun += alarm_forward_now(alarm, timr->it_interval);
554 	alarm_start(alarm, alarm->node.expires);
555 }
556 
557 /**
558  * alarm_timer_forward - Posix timer callback for forwarding timer
559  * @timr:	Pointer to the posixtimer data struct
560  * @now:	Current time to forward the timer against
561  */
562 static int alarm_timer_forward(struct k_itimer *timr, ktime_t now)
563 {
564 	struct alarm *alarm = &timr->it.alarm.alarmtimer;
565 
566 	return (int) alarm_forward(alarm, timr->it_interval, now);
567 }
568 
569 /**
570  * alarm_timer_remaining - Posix timer callback to retrieve remaining time
571  * @timr:	Pointer to the posixtimer data struct
572  * @now:	Current time to calculate against
573  */
574 static ktime_t alarm_timer_remaining(struct k_itimer *timr, ktime_t now)
575 {
576 	struct alarm *alarm = &timr->it.alarm.alarmtimer;
577 
578 	return ktime_sub(now, alarm->node.expires);
579 }
580 
581 /**
582  * alarm_timer_try_to_cancel - Posix timer callback to cancel a timer
583  * @timr:	Pointer to the posixtimer data struct
584  */
585 static int alarm_timer_try_to_cancel(struct k_itimer *timr)
586 {
587 	return alarm_try_to_cancel(&timr->it.alarm.alarmtimer);
588 }
589 
590 /**
591  * alarm_timer_arm - Posix timer callback to arm a timer
592  * @timr:	Pointer to the posixtimer data struct
593  * @expires:	The new expiry time
594  * @absolute:	Expiry value is absolute time
595  * @sigev_none:	Posix timer does not deliver signals
596  */
597 static void alarm_timer_arm(struct k_itimer *timr, ktime_t expires,
598 			    bool absolute, bool sigev_none)
599 {
600 	struct alarm *alarm = &timr->it.alarm.alarmtimer;
601 	struct alarm_base *base = &alarm_bases[alarm->type];
602 
603 	if (!absolute)
604 		expires = ktime_add_safe(expires, base->gettime());
605 	if (sigev_none)
606 		alarm->node.expires = expires;
607 	else
608 		alarm_start(&timr->it.alarm.alarmtimer, expires);
609 }
610 
611 /**
612  * alarm_clock_getres - posix getres interface
613  * @which_clock: clockid
614  * @tp: timespec to fill
615  *
616  * Returns the granularity of underlying alarm base clock
617  */
618 static int alarm_clock_getres(const clockid_t which_clock, struct timespec64 *tp)
619 {
620 	if (!alarmtimer_get_rtcdev())
621 		return -EINVAL;
622 
623 	tp->tv_sec = 0;
624 	tp->tv_nsec = hrtimer_resolution;
625 	return 0;
626 }
627 
628 /**
629  * alarm_clock_get - posix clock_get interface
630  * @which_clock: clockid
631  * @tp: timespec to fill.
632  *
633  * Provides the underlying alarm base time.
634  */
635 static int alarm_clock_get(clockid_t which_clock, struct timespec64 *tp)
636 {
637 	struct alarm_base *base = &alarm_bases[clock2alarm(which_clock)];
638 
639 	if (!alarmtimer_get_rtcdev())
640 		return -EINVAL;
641 
642 	*tp = ktime_to_timespec64(base->gettime());
643 	return 0;
644 }
645 
646 /**
647  * alarm_timer_create - posix timer_create interface
648  * @new_timer: k_itimer pointer to manage
649  *
650  * Initializes the k_itimer structure.
651  */
652 static int alarm_timer_create(struct k_itimer *new_timer)
653 {
654 	enum  alarmtimer_type type;
655 
656 	if (!alarmtimer_get_rtcdev())
657 		return -ENOTSUPP;
658 
659 	if (!capable(CAP_WAKE_ALARM))
660 		return -EPERM;
661 
662 	type = clock2alarm(new_timer->it_clock);
663 	alarm_init(&new_timer->it.alarm.alarmtimer, type, alarm_handle_timer);
664 	return 0;
665 }
666 
667 /**
668  * alarmtimer_nsleep_wakeup - Wakeup function for alarm_timer_nsleep
669  * @alarm: ptr to alarm that fired
670  *
671  * Wakes up the task that set the alarmtimer
672  */
673 static enum alarmtimer_restart alarmtimer_nsleep_wakeup(struct alarm *alarm,
674 								ktime_t now)
675 {
676 	struct task_struct *task = (struct task_struct *)alarm->data;
677 
678 	alarm->data = NULL;
679 	if (task)
680 		wake_up_process(task);
681 	return ALARMTIMER_NORESTART;
682 }
683 
684 /**
685  * alarmtimer_do_nsleep - Internal alarmtimer nsleep implementation
686  * @alarm: ptr to alarmtimer
687  * @absexp: absolute expiration time
688  *
689  * Sets the alarm timer and sleeps until it is fired or interrupted.
690  */
691 static int alarmtimer_do_nsleep(struct alarm *alarm, ktime_t absexp)
692 {
693 	alarm->data = (void *)current;
694 	do {
695 		set_current_state(TASK_INTERRUPTIBLE);
696 		alarm_start(alarm, absexp);
697 		if (likely(alarm->data))
698 			schedule();
699 
700 		alarm_cancel(alarm);
701 	} while (alarm->data && !signal_pending(current));
702 
703 	__set_current_state(TASK_RUNNING);
704 
705 	return (alarm->data == NULL);
706 }
707 
708 
709 /**
710  * update_rmtp - Update remaining timespec value
711  * @exp: expiration time
712  * @type: timer type
713  * @rmtp: user pointer to remaining timepsec value
714  *
715  * Helper function that fills in rmtp value with time between
716  * now and the exp value
717  */
718 static int update_rmtp(ktime_t exp, enum  alarmtimer_type type,
719 			struct timespec __user *rmtp)
720 {
721 	struct timespec rmt;
722 	ktime_t rem;
723 
724 	rem = ktime_sub(exp, alarm_bases[type].gettime());
725 
726 	if (rem <= 0)
727 		return 0;
728 	rmt = ktime_to_timespec(rem);
729 
730 	if (copy_to_user(rmtp, &rmt, sizeof(*rmtp)))
731 		return -EFAULT;
732 
733 	return 1;
734 
735 }
736 
737 /**
738  * alarm_timer_nsleep_restart - restartblock alarmtimer nsleep
739  * @restart: ptr to restart block
740  *
741  * Handles restarted clock_nanosleep calls
742  */
743 static long __sched alarm_timer_nsleep_restart(struct restart_block *restart)
744 {
745 	enum  alarmtimer_type type = restart->nanosleep.clockid;
746 	ktime_t exp;
747 	struct timespec __user  *rmtp;
748 	struct alarm alarm;
749 	int ret = 0;
750 
751 	exp = restart->nanosleep.expires;
752 	alarm_init(&alarm, type, alarmtimer_nsleep_wakeup);
753 
754 	if (alarmtimer_do_nsleep(&alarm, exp))
755 		goto out;
756 
757 	if (freezing(current))
758 		alarmtimer_freezerset(exp, type);
759 
760 	rmtp = restart->nanosleep.rmtp;
761 	if (rmtp) {
762 		ret = update_rmtp(exp, type, rmtp);
763 		if (ret <= 0)
764 			goto out;
765 	}
766 
767 
768 	/* The other values in restart are already filled in */
769 	ret = -ERESTART_RESTARTBLOCK;
770 out:
771 	return ret;
772 }
773 
774 /**
775  * alarm_timer_nsleep - alarmtimer nanosleep
776  * @which_clock: clockid
777  * @flags: determins abstime or relative
778  * @tsreq: requested sleep time (abs or rel)
779  * @rmtp: remaining sleep time saved
780  *
781  * Handles clock_nanosleep calls against _ALARM clockids
782  */
783 static int alarm_timer_nsleep(const clockid_t which_clock, int flags,
784 			      struct timespec64 *tsreq,
785 			      struct timespec __user *rmtp)
786 {
787 	enum  alarmtimer_type type = clock2alarm(which_clock);
788 	struct restart_block *restart;
789 	struct alarm alarm;
790 	ktime_t exp;
791 	int ret = 0;
792 
793 	if (!alarmtimer_get_rtcdev())
794 		return -ENOTSUPP;
795 
796 	if (flags & ~TIMER_ABSTIME)
797 		return -EINVAL;
798 
799 	if (!capable(CAP_WAKE_ALARM))
800 		return -EPERM;
801 
802 	alarm_init(&alarm, type, alarmtimer_nsleep_wakeup);
803 
804 	exp = timespec64_to_ktime(*tsreq);
805 	/* Convert (if necessary) to absolute time */
806 	if (flags != TIMER_ABSTIME) {
807 		ktime_t now = alarm_bases[type].gettime();
808 		exp = ktime_add(now, exp);
809 	}
810 
811 	if (alarmtimer_do_nsleep(&alarm, exp))
812 		goto out;
813 
814 	if (freezing(current))
815 		alarmtimer_freezerset(exp, type);
816 
817 	/* abs timers don't set remaining time or restart */
818 	if (flags == TIMER_ABSTIME) {
819 		ret = -ERESTARTNOHAND;
820 		goto out;
821 	}
822 
823 	if (rmtp) {
824 		ret = update_rmtp(exp, type, rmtp);
825 		if (ret <= 0)
826 			goto out;
827 	}
828 
829 	restart = &current->restart_block;
830 	restart->fn = alarm_timer_nsleep_restart;
831 	restart->nanosleep.clockid = type;
832 	restart->nanosleep.expires = exp;
833 	restart->nanosleep.rmtp = rmtp;
834 	ret = -ERESTART_RESTARTBLOCK;
835 
836 out:
837 	return ret;
838 }
839 
840 const struct k_clock alarm_clock = {
841 	.clock_getres		= alarm_clock_getres,
842 	.clock_get		= alarm_clock_get,
843 	.timer_create		= alarm_timer_create,
844 	.timer_set		= common_timer_set,
845 	.timer_del		= common_timer_del,
846 	.timer_get		= common_timer_get,
847 	.timer_arm		= alarm_timer_arm,
848 	.timer_rearm		= alarm_timer_rearm,
849 	.timer_forward		= alarm_timer_forward,
850 	.timer_remaining	= alarm_timer_remaining,
851 	.timer_try_to_cancel	= alarm_timer_try_to_cancel,
852 	.nsleep			= alarm_timer_nsleep,
853 };
854 #endif /* CONFIG_POSIX_TIMERS */
855 
856 
857 /* Suspend hook structures */
858 static const struct dev_pm_ops alarmtimer_pm_ops = {
859 	.suspend = alarmtimer_suspend,
860 	.resume = alarmtimer_resume,
861 };
862 
863 static struct platform_driver alarmtimer_driver = {
864 	.driver = {
865 		.name = "alarmtimer",
866 		.pm = &alarmtimer_pm_ops,
867 	}
868 };
869 
870 /**
871  * alarmtimer_init - Initialize alarm timer code
872  *
873  * This function initializes the alarm bases and registers
874  * the posix clock ids.
875  */
876 static int __init alarmtimer_init(void)
877 {
878 	struct platform_device *pdev;
879 	int error = 0;
880 	int i;
881 
882 	alarmtimer_rtc_timer_init();
883 
884 	/* Initialize alarm bases */
885 	alarm_bases[ALARM_REALTIME].base_clockid = CLOCK_REALTIME;
886 	alarm_bases[ALARM_REALTIME].gettime = &ktime_get_real;
887 	alarm_bases[ALARM_BOOTTIME].base_clockid = CLOCK_BOOTTIME;
888 	alarm_bases[ALARM_BOOTTIME].gettime = &ktime_get_boottime;
889 	for (i = 0; i < ALARM_NUMTYPE; i++) {
890 		timerqueue_init_head(&alarm_bases[i].timerqueue);
891 		spin_lock_init(&alarm_bases[i].lock);
892 	}
893 
894 	error = alarmtimer_rtc_interface_setup();
895 	if (error)
896 		return error;
897 
898 	error = platform_driver_register(&alarmtimer_driver);
899 	if (error)
900 		goto out_if;
901 
902 	pdev = platform_device_register_simple("alarmtimer", -1, NULL, 0);
903 	if (IS_ERR(pdev)) {
904 		error = PTR_ERR(pdev);
905 		goto out_drv;
906 	}
907 	ws = wakeup_source_register("alarmtimer");
908 	return 0;
909 
910 out_drv:
911 	platform_driver_unregister(&alarmtimer_driver);
912 out_if:
913 	alarmtimer_rtc_interface_remove();
914 	return error;
915 }
916 device_initcall(alarmtimer_init);
917