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