projects
/
deliverable
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
alarmtimers: Return -ENOTSUPP if no RTC device is present
[deliverable/linux.git]
/
kernel
/
time
/
alarmtimer.c
diff --git
a/kernel/time/alarmtimer.c
b/kernel/time/alarmtimer.c
index 98ecf4e36f2f22ed6e519c136863b4736f33e15d..59f369f98a04311f5bfa49d01e706d4b12ca97c4 100644
(file)
--- a/
kernel/time/alarmtimer.c
+++ b/
kernel/time/alarmtimer.c
@@
-107,6
+107,9
@@
static struct rtc_device *alarmtimer_get_rtcdev(void)
return ret;
}
return ret;
}
+#else
+#define alarmtimer_get_rtcdev() (0)
+#define rtcdev (0)
#endif
#endif
@@
-231,7
+234,7
@@
static int alarmtimer_suspend(struct device *dev)
freezer_delta = ktime_set(0, 0);
spin_unlock_irqrestore(&freezer_delta_lock, flags);
freezer_delta = ktime_set(0, 0);
spin_unlock_irqrestore(&freezer_delta_lock, flags);
- rtc =
alarmtimer_get_rtcdev()
;
+ rtc =
rtcdev
;
/* If we have no rtcdev, just return */
if (!rtc)
return 0;
/* If we have no rtcdev, just return */
if (!rtc)
return 0;
@@
-381,6
+384,9
@@
static int alarm_clock_getres(const clockid_t which_clock, struct timespec *tp)
{
clockid_t baseid = alarm_bases[clock2alarm(which_clock)].base_clockid;
{
clockid_t baseid = alarm_bases[clock2alarm(which_clock)].base_clockid;
+ if (!alarmtimer_get_rtcdev())
+ return -ENOTSUPP;
+
return hrtimer_get_res(baseid, tp);
}
return hrtimer_get_res(baseid, tp);
}
@@
-395,6
+401,9
@@
static int alarm_clock_get(clockid_t which_clock, struct timespec *tp)
{
struct alarm_base *base = &alarm_bases[clock2alarm(which_clock)];
{
struct alarm_base *base = &alarm_bases[clock2alarm(which_clock)];
+ if (!alarmtimer_get_rtcdev())
+ return -ENOTSUPP;
+
*tp = ktime_to_timespec(base->gettime());
return 0;
}
*tp = ktime_to_timespec(base->gettime());
return 0;
}
@@
-410,6
+419,9
@@
static int alarm_timer_create(struct k_itimer *new_timer)
enum alarmtimer_type type;
struct alarm_base *base;
enum alarmtimer_type type;
struct alarm_base *base;
+ if (!alarmtimer_get_rtcdev())
+ return -ENOTSUPP;
+
if (!capable(CAP_WAKE_ALARM))
return -EPERM;
if (!capable(CAP_WAKE_ALARM))
return -EPERM;
@@
-444,6
+456,9
@@
static void alarm_timer_get(struct k_itimer *timr,
*/
static int alarm_timer_del(struct k_itimer *timr)
{
*/
static int alarm_timer_del(struct k_itimer *timr)
{
+ if (!rtcdev)
+ return -ENOTSUPP;
+
alarm_cancel(&timr->it.alarmtimer);
return 0;
}
alarm_cancel(&timr->it.alarmtimer);
return 0;
}
@@
-461,6
+476,9
@@
static int alarm_timer_set(struct k_itimer *timr, int flags,
struct itimerspec *new_setting,
struct itimerspec *old_setting)
{
struct itimerspec *new_setting,
struct itimerspec *old_setting)
{
+ if (!rtcdev)
+ return -ENOTSUPP;
+
/* Save old values */
old_setting->it_interval =
ktime_to_timespec(timr->it.alarmtimer.period);
/* Save old values */
old_setting->it_interval =
ktime_to_timespec(timr->it.alarmtimer.period);
@@
-600,6
+618,9
@@
static int alarm_timer_nsleep(const clockid_t which_clock, int flags,
int ret = 0;
struct restart_block *restart;
int ret = 0;
struct restart_block *restart;
+ if (!alarmtimer_get_rtcdev())
+ return -ENOTSUPP;
+
if (!capable(CAP_WAKE_ALARM))
return -EPERM;
if (!capable(CAP_WAKE_ALARM))
return -EPERM;
This page took
0.030297 seconds
and
5
git commands to generate.