struct rtc_time     rtc_current_rtc_time;
        unsigned long       rtc_current_time;
        unsigned long       rtc_alarm_time;
-       struct timespec     rtc_current_timespec;
        struct timespec     rtc_delta;
+       struct timespec     wall_time;
        struct alarm_queue *wakeup_queue = NULL;
        struct alarm_queue *tmp_queue = NULL;
 
                wakeup_queue = tmp_queue;
        if (wakeup_queue) {
                rtc_read_time(alarm_rtc_dev, &rtc_current_rtc_time);
-               rtc_current_timespec.tv_nsec = 0;
-               rtc_tm_to_time(&rtc_current_rtc_time,
-                              &rtc_current_timespec.tv_sec);
-               save_time_delta(&rtc_delta, &rtc_current_timespec);
+               getnstimeofday(&wall_time);
+               rtc_tm_to_time(&rtc_current_rtc_time, &rtc_current_time);
+               set_normalized_timespec(&rtc_delta,
+                                       wall_time.tv_sec - rtc_current_time,
+                                       wall_time.tv_nsec);
 
                rtc_alarm_time = timespec_sub(ktime_to_timespec(
                        hrtimer_get_expires(&wakeup_queue->timer)),