Author: ian
Date: Sun Mar 11 18:54:45 2018
New Revision: 330778
URL: https://svnweb.freebsd.org/changeset/base/330778

Log:
  Everywhere that multiple registers are accessed in sequence, lock/unlock
  just once around the whole group of accesses.

Modified:
  head/sys/x86/isa/atrtc.c

Modified: head/sys/x86/isa/atrtc.c
==============================================================================
--- head/sys/x86/isa/atrtc.c    Sun Mar 11 18:46:40 2018        (r330777)
+++ head/sys/x86/isa/atrtc.c    Sun Mar 11 18:54:45 2018        (r330778)
@@ -127,8 +127,10 @@ static void
 atrtc_start(void)
 {
 
-       writertc(RTC_STATUSA, rtc_statusa);
-       writertc(RTC_STATUSB, RTCSB_24HR);
+       mtx_lock_spin(&atrtc_lock);
+       rtcout_locked(RTC_STATUSA, rtc_statusa);
+       rtcout_locked(RTC_STATUSB, RTCSB_24HR);
+       mtx_unlock_spin(&atrtc_lock);
 }
 
 static void
@@ -144,8 +146,10 @@ atrtc_enable_intr(void)
 {
 
        rtc_statusb |= RTCSB_PINTR;
-       writertc(RTC_STATUSB, rtc_statusb);
-       rtcin(RTC_INTR);
+       mtx_lock_spin(&atrtc_lock);
+       rtcout_locked(RTC_STATUSB, rtc_statusb);
+       rtcin_locked(RTC_INTR);
+       mtx_unlock_spin(&atrtc_lock);
 }
 
 static void
@@ -153,8 +157,10 @@ atrtc_disable_intr(void)
 {
 
        rtc_statusb &= ~RTCSB_PINTR;
-       writertc(RTC_STATUSB, rtc_statusb);
-       rtcin(RTC_INTR);
+       mtx_lock_spin(&atrtc_lock);
+       rtcout_locked(RTC_STATUSB, rtc_statusb);
+       rtcin_locked(RTC_INTR);
+       mtx_unlock_spin(&atrtc_lock);
 }
 
 void
@@ -162,11 +168,13 @@ atrtc_restore(void)
 {
 
        /* Restore all of the RTC's "status" (actually, control) registers. */
-       rtcin(RTC_STATUSA);     /* dummy to get rtc_reg set */
-       writertc(RTC_STATUSB, RTCSB_24HR);
-       writertc(RTC_STATUSA, rtc_statusa);
-       writertc(RTC_STATUSB, rtc_statusb);
-       rtcin(RTC_INTR);
+       mtx_lock_spin(&atrtc_lock);
+       rtcin_locked(RTC_STATUSA);      /* dummy to get rtc_reg set */
+       rtcout_locked(RTC_STATUSB, RTCSB_24HR);
+       rtcout_locked(RTC_STATUSA, rtc_statusa);
+       rtcout_locked(RTC_STATUSB, rtc_statusb);
+       rtcin_locked(RTC_INTR);
+       mtx_unlock_spin(&atrtc_lock);
 }
 
 /**********************************************************************
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to