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);
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to