}
 #endif
 
+static void
+__alarm_init(struct alarm *alarm, enum alarmtimer_type type,
+            enum alarmtimer_restart (*function)(struct alarm *, ktime_t))
+{
+       timerqueue_init(&alarm->node);
+       alarm->timer.function = alarmtimer_fired;
+       alarm->function = function;
+       alarm->type = type;
+       alarm->state = ALARMTIMER_STATE_INACTIVE;
+}
+
 /**
  * alarm_init - Initialize an alarm structure
  * @alarm: ptr to alarm to be initialized
 void alarm_init(struct alarm *alarm, enum alarmtimer_type type,
                enum alarmtimer_restart (*function)(struct alarm *, ktime_t))
 {
-       timerqueue_init(&alarm->node);
        hrtimer_init(&alarm->timer, alarm_bases[type].base_clockid,
-                       HRTIMER_MODE_ABS);
-       alarm->timer.function = alarmtimer_fired;
-       alarm->function = function;
-       alarm->type = type;
-       alarm->state = ALARMTIMER_STATE_INACTIVE;
+                    HRTIMER_MODE_ABS);
+       __alarm_init(alarm, type, function);
 }
 EXPORT_SYMBOL_GPL(alarm_init);
 
 
        __set_current_state(TASK_RUNNING);
 
+       destroy_hrtimer_on_stack(&alarm->timer);
+
        if (!alarm->data)
                return 0;
 
        return -ERESTART_RESTARTBLOCK;
 }
 
+static void
+alarm_init_on_stack(struct alarm *alarm, enum alarmtimer_type type,
+                   enum alarmtimer_restart (*function)(struct alarm *, ktime_t))
+{
+       hrtimer_init_on_stack(&alarm->timer, alarm_bases[type].base_clockid,
+                             HRTIMER_MODE_ABS);
+       __alarm_init(alarm, type, function);
+}
+
 /**
  * alarm_timer_nsleep_restart - restartblock alarmtimer nsleep
  * @restart: ptr to restart block
        ktime_t exp = restart->nanosleep.expires;
        struct alarm alarm;
 
-       alarm_init(&alarm, type, alarmtimer_nsleep_wakeup);
+       alarm_init_on_stack(&alarm, type, alarmtimer_nsleep_wakeup);
 
        return alarmtimer_do_nsleep(&alarm, exp, type);
 }
        if (!capable(CAP_WAKE_ALARM))
                return -EPERM;
 
-       alarm_init(&alarm, type, alarmtimer_nsleep_wakeup);
+       alarm_init_on_stack(&alarm, type, alarmtimer_nsleep_wakeup);
 
        exp = timespec64_to_ktime(*tsreq);
        /* Convert (if necessary) to absolute time */