svn commit: r306089 - in head/sys: kern sys
Konstantin Belousov
kib at FreeBSD.org
Wed Sep 21 10:15:09 UTC 2016
Author: kib
Date: Wed Sep 21 10:15:08 2016
New Revision: 306089
URL: https://svnweb.freebsd.org/changeset/base/306089
Log:
Make resettodr_lock accessible outside subr_rtc.c. Protect
CLOCK_GETTIME() with the lock.
Now all time-related accesses to the CMOS for RTC should be under the
lock. This is needed to allow upcoming EFI Runtime Services support
to provide required execution environment for the firmware calls.
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Modified:
head/sys/kern/subr_rtc.c
head/sys/sys/clock.h
Modified: head/sys/kern/subr_rtc.c
==============================================================================
--- head/sys/kern/subr_rtc.c Wed Sep 21 10:10:36 2016 (r306088)
+++ head/sys/kern/subr_rtc.c Wed Sep 21 10:15:08 2016 (r306089)
@@ -75,7 +75,7 @@ __FBSDID("$FreeBSD$");
static device_t clock_dev = NULL;
static long clock_res;
static struct timespec clock_adj;
-static struct mtx resettodr_lock;
+struct mtx resettodr_lock;
MTX_SYSINIT(resettodr_init, &resettodr_lock, "tod2rl", MTX_DEF);
/* XXX: should be kern. now, it's no longer machdep. */
@@ -132,7 +132,9 @@ inittodr(time_t base)
goto wrong_time;
}
/* XXX: We should poll all registered RTCs in case of failure */
+ mtx_lock(&resettodr_lock);
error = CLOCK_GETTIME(clock_dev, &ts);
+ mtx_unlock(&resettodr_lock);
if (error != 0 && error != EINVAL) {
printf("warning: clock_gettime failed (%d), the system time "
"will not be set accurately\n", error);
Modified: head/sys/sys/clock.h
==============================================================================
--- head/sys/sys/clock.h Wed Sep 21 10:10:36 2016 (r306088)
+++ head/sys/sys/clock.h Wed Sep 21 10:15:08 2016 (r306089)
@@ -54,6 +54,7 @@
*/
extern int tz_minuteswest;
extern int tz_dsttime;
+extern struct mtx resettodr_lock;
int utc_offset(void);
More information about the svn-src-all
mailing list