@@ -70,20 +70,17 @@ static DEFINE_SPINLOCK(rtcdev_lock);
7070 */
7171struct rtc_device * alarmtimer_get_rtcdev (void )
7272{
73- unsigned long flags ;
7473 struct rtc_device * ret ;
7574
76- spin_lock_irqsave ( & rtcdev_lock , flags );
75+ guard ( spinlock_irqsave )( & rtcdev_lock );
7776 ret = rtcdev ;
78- spin_unlock_irqrestore (& rtcdev_lock , flags );
7977
8078 return ret ;
8179}
8280EXPORT_SYMBOL_GPL (alarmtimer_get_rtcdev );
8381
8482static int alarmtimer_rtc_add_device (struct device * dev )
8583{
86- unsigned long flags ;
8784 struct rtc_device * rtc = to_rtc_device (dev );
8885 struct platform_device * pdev ;
8986 int ret = 0 ;
@@ -101,25 +98,18 @@ static int alarmtimer_rtc_add_device(struct device *dev)
10198 if (!IS_ERR (pdev ))
10299 device_init_wakeup (& pdev -> dev , true);
103100
104- spin_lock_irqsave (& rtcdev_lock , flags );
105- if (!IS_ERR (pdev ) && !rtcdev ) {
106- if (!try_module_get (rtc -> owner )) {
101+ scoped_guard (spinlock_irqsave , & rtcdev_lock ) {
102+ if (!IS_ERR (pdev ) && !rtcdev && try_module_get (rtc -> owner )) {
103+ rtcdev = rtc ;
104+ /* hold a reference so it doesn't go away */
105+ get_device (dev );
106+ pdev = NULL ;
107+ } else {
107108 ret = -1 ;
108- goto unlock ;
109109 }
110-
111- rtcdev = rtc ;
112- /* hold a reference so it doesn't go away */
113- get_device (dev );
114- pdev = NULL ;
115- } else {
116- ret = -1 ;
117110 }
118- unlock :
119- spin_unlock_irqrestore (& rtcdev_lock , flags );
120111
121112 platform_device_unregister (pdev );
122-
123113 return ret ;
124114}
125115
@@ -198,7 +188,7 @@ static enum hrtimer_restart alarmtimer_fired(struct hrtimer *timer)
198188 struct alarm * alarm = container_of (timer , struct alarm , timer );
199189 struct alarm_base * base = & alarm_bases [alarm -> type ];
200190
201- scoped_guard (spinlock_irqsave , & base -> lock )
191+ scoped_guard (spinlock_irqsave , & base -> lock )
202192 alarmtimer_dequeue (base , alarm );
203193
204194 if (alarm -> function )
@@ -228,17 +218,16 @@ EXPORT_SYMBOL_GPL(alarm_expires_remaining);
228218static int alarmtimer_suspend (struct device * dev )
229219{
230220 ktime_t min , now , expires ;
231- int i , ret , type ;
232221 struct rtc_device * rtc ;
233- unsigned long flags ;
234222 struct rtc_time tm ;
223+ int i , ret , type ;
235224
236- spin_lock_irqsave ( & freezer_delta_lock , flags );
237- min = freezer_delta ;
238- expires = freezer_expires ;
239- type = freezer_alarmtype ;
240- freezer_delta = 0 ;
241- spin_unlock_irqrestore ( & freezer_delta_lock , flags );
225+ scoped_guard ( spinlock_irqsave , & freezer_delta_lock ) {
226+ min = freezer_delta ;
227+ expires = freezer_expires ;
228+ type = freezer_alarmtype ;
229+ freezer_delta = 0 ;
230+ }
242231
243232 rtc = alarmtimer_get_rtcdev ();
244233 /* If we have no rtcdev, just return */
@@ -251,9 +240,8 @@ static int alarmtimer_suspend(struct device *dev)
251240 struct timerqueue_node * next ;
252241 ktime_t delta ;
253242
254- spin_lock_irqsave (& base -> lock , flags );
255- next = timerqueue_getnext (& base -> timerqueue );
256- spin_unlock_irqrestore (& base -> lock , flags );
243+ scoped_guard (spinlock_irqsave , & base -> lock )
244+ next = timerqueue_getnext (& base -> timerqueue );
257245 if (!next )
258246 continue ;
259247 delta = ktime_sub (next -> expires , base -> get_ktime ());
@@ -352,13 +340,12 @@ EXPORT_SYMBOL_GPL(alarm_init);
352340void alarm_start (struct alarm * alarm , ktime_t start )
353341{
354342 struct alarm_base * base = & alarm_bases [alarm -> type ];
355- unsigned long flags ;
356343
357- spin_lock_irqsave ( & base -> lock , flags );
358- alarm -> node .expires = start ;
359- alarmtimer_enqueue (base , alarm );
360- hrtimer_start (& alarm -> timer , alarm -> node .expires , HRTIMER_MODE_ABS );
361- spin_unlock_irqrestore ( & base -> lock , flags );
344+ scoped_guard ( spinlock_irqsave , & base -> lock ) {
345+ alarm -> node .expires = start ;
346+ alarmtimer_enqueue (base , alarm );
347+ hrtimer_start (& alarm -> timer , alarm -> node .expires , HRTIMER_MODE_ABS );
348+ }
362349
363350 trace_alarmtimer_start (alarm , base -> get_ktime ());
364351}
@@ -381,13 +368,11 @@ EXPORT_SYMBOL_GPL(alarm_start_relative);
381368void alarm_restart (struct alarm * alarm )
382369{
383370 struct alarm_base * base = & alarm_bases [alarm -> type ];
384- unsigned long flags ;
385371
386- spin_lock_irqsave ( & base -> lock , flags );
372+ guard ( spinlock_irqsave )( & base -> lock );
387373 hrtimer_set_expires (& alarm -> timer , alarm -> node .expires );
388374 hrtimer_restart (& alarm -> timer );
389375 alarmtimer_enqueue (base , alarm );
390- spin_unlock_irqrestore (& base -> lock , flags );
391376}
392377EXPORT_SYMBOL_GPL (alarm_restart );
393378
@@ -401,14 +386,13 @@ EXPORT_SYMBOL_GPL(alarm_restart);
401386int alarm_try_to_cancel (struct alarm * alarm )
402387{
403388 struct alarm_base * base = & alarm_bases [alarm -> type ];
404- unsigned long flags ;
405389 int ret ;
406390
407- spin_lock_irqsave ( & base -> lock , flags );
408- ret = hrtimer_try_to_cancel (& alarm -> timer );
409- if (ret >= 0 )
410- alarmtimer_dequeue (base , alarm );
411- spin_unlock_irqrestore ( & base -> lock , flags );
391+ scoped_guard ( spinlock_irqsave , & base -> lock ) {
392+ ret = hrtimer_try_to_cancel (& alarm -> timer );
393+ if (ret >= 0 )
394+ alarmtimer_dequeue (base , alarm );
395+ }
412396
413397 trace_alarmtimer_cancel (alarm , base -> get_ktime ());
414398 return ret ;
@@ -479,7 +463,6 @@ EXPORT_SYMBOL_GPL(alarm_forward_now);
479463static void alarmtimer_freezerset (ktime_t absexp , enum alarmtimer_type type )
480464{
481465 struct alarm_base * base ;
482- unsigned long flags ;
483466 ktime_t delta ;
484467
485468 switch (type ) {
@@ -498,13 +481,12 @@ static void alarmtimer_freezerset(ktime_t absexp, enum alarmtimer_type type)
498481
499482 delta = ktime_sub (absexp , base -> get_ktime ());
500483
501- spin_lock_irqsave ( & freezer_delta_lock , flags );
484+ guard ( spinlock_irqsave )( & freezer_delta_lock );
502485 if (!freezer_delta || (delta < freezer_delta )) {
503486 freezer_delta = delta ;
504487 freezer_expires = absexp ;
505488 freezer_alarmtype = type ;
506489 }
507- spin_unlock_irqrestore (& freezer_delta_lock , flags );
508490}
509491
510492/**
@@ -515,9 +497,9 @@ static enum alarmtimer_type clock2alarm(clockid_t clockid)
515497{
516498 if (clockid == CLOCK_REALTIME_ALARM )
517499 return ALARM_REALTIME ;
518- if ( clockid == CLOCK_BOOTTIME_ALARM )
519- return ALARM_BOOTTIME ;
520- return -1 ;
500+
501+ WARN_ON_ONCE ( clockid != CLOCK_BOOTTIME_ALARM ) ;
502+ return ALARM_BOOTTIME ;
521503}
522504
523505/**
0 commit comments