hwclock: do not seal the kernel's time-warp call from inside the initrd
This commit is contained in:
parent
b80f194eea
commit
19e6561356
|
@ -1350,8 +1350,15 @@ int main(int argc, char *argv[]) {
|
||||||
log_error("Failed to apply local time delta, ignoring: %s", strerror(-r));
|
log_error("Failed to apply local time delta, ignoring: %s", strerror(-r));
|
||||||
else
|
else
|
||||||
log_info("RTC configured in localtime, applying delta of %i minutes to system time.", min);
|
log_info("RTC configured in localtime, applying delta of %i minutes to system time.", min);
|
||||||
} else {
|
} else if (!in_initrd()) {
|
||||||
/* Do dummy first-time call to seal the kernel's time warp magic */
|
/*
|
||||||
|
* Do dummy first-time call to seal the kernel's time warp magic
|
||||||
|
*
|
||||||
|
* Do not call this this from inside the initrd. The initrd might not
|
||||||
|
* carry /etc/adjtime with LOCAL, but the real system could be set up
|
||||||
|
* that way. In such case, we need to delay the time-warp or the sealing
|
||||||
|
* until we reach the real system.
|
||||||
|
*/
|
||||||
hwclock_reset_timezone();
|
hwclock_reset_timezone();
|
||||||
|
|
||||||
/* Tell the kernel our time zone */
|
/* Tell the kernel our time zone */
|
||||||
|
|
|
@ -199,14 +199,14 @@ int hwclock_set_timezone(int *min) {
|
||||||
const struct timeval *tv_null = NULL;
|
const struct timeval *tv_null = NULL;
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
struct tm *tm;
|
struct tm *tm;
|
||||||
int minuteswest;
|
int minutesdelta;
|
||||||
struct timezone tz;
|
struct timezone tz;
|
||||||
|
|
||||||
assert_se(clock_gettime(CLOCK_REALTIME, &ts) == 0);
|
assert_se(clock_gettime(CLOCK_REALTIME, &ts) == 0);
|
||||||
assert_se(tm = localtime(&ts.tv_sec));
|
assert_se(tm = localtime(&ts.tv_sec));
|
||||||
minuteswest = tm->tm_gmtoff / 60;
|
minutesdelta = tm->tm_gmtoff / 60;
|
||||||
|
|
||||||
tz.tz_minuteswest = -minuteswest;
|
tz.tz_minuteswest = -minutesdelta;
|
||||||
tz.tz_dsttime = 0; /* DST_NONE*/
|
tz.tz_dsttime = 0; /* DST_NONE*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -217,7 +217,7 @@ int hwclock_set_timezone(int *min) {
|
||||||
if (settimeofday(tv_null, &tz) < 0)
|
if (settimeofday(tv_null, &tz) < 0)
|
||||||
return -errno;
|
return -errno;
|
||||||
if (min)
|
if (min)
|
||||||
*min = minuteswest;
|
*min = minutesdelta;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue