Author: jhb
Date: Mon Jan 28 19:38:13 2013
New Revision: 246037
URL: http://svnweb.freebsd.org/changeset/base/246037

Log:
  Mark 'ticks', 'time_second', and 'time_uptime' as volatile to prevent the
  compiler from caching their values in tight loops.
  
  Reviewed by:  bde
  MFC after:    1 week

Modified:
  head/sys/dev/usb/net/if_cdce.c
  head/sys/kern/kern_clock.c
  head/sys/kern/kern_tc.c
  head/sys/pci/ncr.c
  head/sys/sys/kernel.h
  head/sys/sys/time.h

Modified: head/sys/dev/usb/net/if_cdce.c
==============================================================================
--- head/sys/dev/usb/net/if_cdce.c      Mon Jan 28 17:25:53 2013        
(r246036)
+++ head/sys/dev/usb/net/if_cdce.c      Mon Jan 28 19:38:13 2013        
(r246037)
@@ -500,6 +500,7 @@ cdce_attach(device_t dev)
        const struct usb_interface_descriptor *id;
        const struct usb_cdc_ethernet_descriptor *ued;
        const struct usb_config *pcfg;
+       uint32_t seed;
        int error;
        uint8_t i;
        uint8_t data_iface_no;
@@ -612,8 +613,9 @@ alloc_transfers:
                /* fake MAC address */
 
                device_printf(dev, "faking MAC address\n");
+               seed = ticks;
                sc->sc_ue.ue_eaddr[0] = 0x2a;
-               memcpy(&sc->sc_ue.ue_eaddr[1], &ticks, sizeof(uint32_t));
+               memcpy(&sc->sc_ue.ue_eaddr[1], &seed, sizeof(uint32_t));
                sc->sc_ue.ue_eaddr[5] = device_get_unit(dev);
 
        } else {

Modified: head/sys/kern/kern_clock.c
==============================================================================
--- head/sys/kern/kern_clock.c  Mon Jan 28 17:25:53 2013        (r246036)
+++ head/sys/kern/kern_clock.c  Mon Jan 28 19:38:13 2013        (r246037)
@@ -382,7 +382,7 @@ static void watchdog_config(void *, u_in
 int    stathz;
 int    profhz;
 int    profprocs;
-int    ticks;
+volatile int   ticks;
 int    psratio;
 
 static DPCPU_DEFINE(int, pcputicks);   /* Per-CPU version of ticks. */
@@ -469,7 +469,7 @@ void
 hardclock(int usermode, uintfptr_t pc)
 {
 
-       atomic_add_int((volatile int *)&ticks, 1);
+       atomic_add_int(&ticks, 1);
        hardclock_cpu(usermode);
        tc_ticktock(1);
        cpu_tick_calibration();

Modified: head/sys/kern/kern_tc.c
==============================================================================
--- head/sys/kern/kern_tc.c     Mon Jan 28 17:25:53 2013        (r246036)
+++ head/sys/kern/kern_tc.c     Mon Jan 28 19:38:13 2013        (r246037)
@@ -103,8 +103,8 @@ static struct timecounter *timecounters 
 
 int tc_min_ticktock_freq = 1;
 
-time_t time_second = 1;
-time_t time_uptime = 1;
+volatile time_t time_second = 1;
+volatile time_t time_uptime = 1;
 
 struct bintime boottimebin;
 struct timeval boottime;

Modified: head/sys/pci/ncr.c
==============================================================================
--- head/sys/pci/ncr.c  Mon Jan 28 17:25:53 2013        (r246036)
+++ head/sys/pci/ncr.c  Mon Jan 28 19:38:13 2013        (r246037)
@@ -1386,7 +1386,7 @@ static char *ncr_name (ncb_p np)
  * Kernel variables referenced in the scripts.
  * THESE MUST ALL BE ALIGNED TO A 4-BYTE BOUNDARY.
  */
-static void *script_kvars[] =
+static volatile void *script_kvars[] =
        { &time_second, &ticks, &ncr_cache };
 
 static struct script script0 = {

Modified: head/sys/sys/kernel.h
==============================================================================
--- head/sys/sys/kernel.h       Mon Jan 28 17:25:53 2013        (r246036)
+++ head/sys/sys/kernel.h       Mon Jan 28 19:38:13 2013        (r246037)
@@ -63,7 +63,7 @@ extern int psratio;                   /* ratio: prof / s
 extern int stathz;                     /* statistics clock's frequency */
 extern int profhz;                     /* profiling clock's frequency */
 extern int profprocs;                  /* number of process's profiling */
-extern int ticks;
+extern volatile int ticks;
 
 #endif /* _KERNEL */
 

Modified: head/sys/sys/time.h
==============================================================================
--- head/sys/sys/time.h Mon Jan 28 17:25:53 2013        (r246036)
+++ head/sys/sys/time.h Mon Jan 28 19:38:13 2013        (r246037)
@@ -287,8 +287,8 @@ struct clockinfo {
 void   inittodr(time_t base);
 void   resettodr(void);
 
-extern time_t  time_second;
-extern time_t  time_uptime;
+extern volatile time_t time_second;
+extern volatile time_t time_uptime;
 extern struct bintime boottimebin;
 extern struct timeval boottime;
 
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to