cvs commit: src/sys/bus/cam cam_ccb.h cam_periph.c cam_xpt.c src/sys/bus/isa syscons_isa.c src/sys/dev/acpica acpi_timer.c src/sys/dev/misc/dec mcclock.c src/sys/dev/misc/pps pps.c src/sys/dev/misc/xrpu xrpu.c src/sys/dev/serial/sio sio.c ...

Matthew Dillon dillon at crater.dragonflybsd.org
Thu Jan 29 21:43:15 PST 2004


dillon      2004/01/29 21:42:18 PST

DragonFly src repository

  Modified files:
    sys/bus/cam          cam_ccb.h cam_periph.c cam_xpt.c 
    sys/bus/isa          syscons_isa.c 
    sys/dev/acpica       acpi_timer.c 
    sys/dev/misc/dec     mcclock.c 
    sys/dev/misc/pps     pps.c 
    sys/dev/misc/xrpu    xrpu.c 
    sys/dev/serial/sio   sio.c 
    sys/dev/sound/isa/i386/pca pcaudio.c 
    sys/dev/sound/isa/i386/spkr spkr.c 
    sys/i386/i386        elan-mmcr.c mp_clock.c mp_machdep.c 
    sys/i386/include     clock.h cpu.h frame.h 
    sys/i386/isa         apic_vector.s clock.c icu_vector.s ipl.s 
                         timerreg.h 
    sys/kern             init_main.c kern_clock.c kern_ntptime.c 
                         kern_poll.c kern_random.c kern_synch.c 
                         kern_time.c kern_timeout.c lwkt_thread.c 
                         subr_param.c 
    sys/netinet6         icmp6.c 
    sys/netproto/ns      ns_error.c 
    sys/pc98/pc98        clock.c pcaudio.c 
    sys/sys              globaldata.h kernel.h proc.h systm.h 
                         thread.h time.h timepps.h timex.h 
  Added files:
    sys/kern             kern_systimer.c 
    sys/sys              systimer.h 
  Log:
  This commit represents a major revamping of the clock interrupt and timebase
  infrastructure in DragonFly.
  
  * Rip out the existing 8254 timer 0 code, and also disable the use of
    Timer 2 (which means that the PC speaker will no longer go beep).  Timer 0
    used to represent a periodic interrupt and a great deal of code was in
    place to attempt to obtain a timebase off of that periodic interrupt.
  
    Timer 0 is now used in software retriggerable one-shot mode to produce
    variable-delay interrupts.  A new hardware interrupt clock abstraction
    called SYSTIMERS has been introduced which allows threads to register
    periodic or one-shot interrupt/IPI callbacks at approximately 1uS
    granularity.
  
    Timer 2 is now set in continuous periodic mode with a period of 65536
    and provides the timebase for the system, abstracted to 32 bits.
  
    All the old platform-integrated hardclock() and statclock() code has
    been rewritten.  The old IPI forwarding code has been #if 0'd out and
    will soon be entirely removed (the systimer abstraction takes care of
    multi-cpu registrations now).  The architecture-specific clkintr() now
    simply calls an entry point into the systimer and provides a Timer 0
    reload and Timer 2 timebase function API.
  
  * On both UP and SMP systems, cpus register systimer interrupts for the Hz
    interrupt, the stat interrupt, and the scheduler round-robin interrupt.
    The abstraction is carefully designed to allow multiple interrupts occuring
    at the same time to be processed in a single hardware interrupt.  While
    we currently use IPI's to distribute requested interrupts from other cpu's,
    the intent is to use the abstraction to take advantage of per-cpu timers
    when available (e.g. on the LAPIC) in the future.
  
    systimer interrupts run OUTSIDE THE MP LOCK.  Entry points may be called
    from the hard interrupt or via an IPI message (IPI messages have always
    run outside the MP lock).
  
  * Rip out timecounters and disable alternative timecounter code for other
    time sources.  This is temporary.  Eventually other time sources, such as
    the TSC, will be reintegrated as independant, parallel-running entities.
    There will be no 'time switching' per-say, subsystems will be able to
    select which timebase they wish to use.  It is desireable to reintegrate
    at least the TSC to improve [get]{micro,nano}[up]time() performance.
  
    WARNING: PPS events may not work properly.  They were not removed, but
    they have not been retested with the new code either.
  
  * Remove spl protection around [get]{micro,nano}[up]time() calls, they are
    now internally protected.
  
  * Use uptime instead of realtime in certain CAM timeout tests
  
  * Remove struct clockframe.  Use struct intrframe everywhere where clockframe
    used to be used.
  
  * Replace most splstatclock() protections with crit_*() protections, because
    such protections must now also protect against IPI messaging interrupts.
  
  * Add fields to the per-cpu globaldata structure to access timebase related
    information using only a critical section rather then a mutex.  However,
    the 8254 Timer 2 access code still uses spin locks.  More work needs to
    be done here, the 'realtime' correction is still done in a single global
    'struct timespec basetime' structure.
  
  * Remove the CLKINTR_PENDING icu and apic interrupt hacks.
  
  * Augment the IPI Messaging code to make an intrframe available to callbacks.
  
  * Document 8254 timing modes in i386/sai/timerreg.h.  Note that at the
    moment we assume an 8254 instead of an 8253 as we are using TIMER_SWSTROBE
    mode.  This may or may not have to be changed to an 8253 mode.
  
  * Integrate the NTP correction code into the new timebase subsystem.
  
  * Separate boottime from basettime.  Once boottime is believed to be stable
    it is no longer effected by NTP or other time corrections.
  
  CAVETS:
  
  	* PC speaker no longer works
  
  	* Profiling interrupt rate not increased (it needs work to be
  	  made operational on a per-cpu basis rather then system-wide).
  
  	* The native timebase API is function-based, but currently hardwired.
  
  	* There might or might not be issues with 486 systems due to the
  	  timer mode I am using.
  
  Revision  Changes    Path
  1.7       +2 -2      src/sys/bus/cam/cam_ccb.h
  1.7       +1 -4      src/sys/bus/cam/cam_periph.c
  1.9       +4 -12     src/sys/bus/cam/cam_xpt.c
  1.4       +4 -3      src/sys/bus/isa/syscons_isa.c
  1.2       +5 -0      src/sys/dev/acpica/acpi_timer.c
  1.4       +12 -15    src/sys/dev/misc/dec/mcclock.c
  1.6       +3 -5      src/sys/dev/misc/pps/pps.c
  1.6       +8 -0      src/sys/dev/misc/xrpu/xrpu.c
  1.13      +2 -4      src/sys/dev/serial/sio/sio.c
  1.8       +2 -2      src/sys/dev/sound/isa/i386/pca/pcaudio.c
  1.9       +2 -7      src/sys/dev/sound/isa/i386/spkr/spkr.c
  1.5       +5 -0      src/sys/i386/i386/elan-mmcr.c
  1.4       +5 -0      src/sys/i386/i386/mp_clock.c
  1.21      +8 -4      src/sys/i386/i386/mp_machdep.c
  1.5       +2 -9      src/sys/i386/include/clock.h
  1.13      +2 -2      src/sys/i386/include/cpu.h
  1.4       +0 -27     src/sys/i386/include/frame.h
  1.15      +4 -6      src/sys/i386/isa/apic_vector.s
  1.11      +223 -445  src/sys/i386/isa/clock.c
  1.16      +2 -4      src/sys/i386/isa/icu_vector.s
  1.16      +3 -1      src/sys/i386/isa/ipl.s
  1.3       +40 -1     src/sys/i386/isa/timerreg.h
  1.27      +1 -0      src/sys/kern/init_main.c
  1.15      +463 -663  src/sys/kern/kern_clock.c
  1.8       +38 -29    src/sys/kern/kern_ntptime.c
  1.7       +2 -0      src/sys/kern/kern_poll.c
  1.6       +2 -3      src/sys/kern/kern_random.c
  1.27      +4 -3      src/sys/kern/kern_synch.c
  1.14      +74 -45    src/sys/kern/kern_time.c
  1.7       +7 -7      src/sys/kern/kern_timeout.c
  1.49      +37 -1     src/sys/kern/lwkt_thread.c
  1.3       +5 -1      src/sys/kern/subr_param.c
  1.7       +1 -3      src/sys/netinet6/icmp6.c
  1.6       +0 -13     src/sys/netproto/ns/ns_error.c
  1.5       +6 -6      src/sys/pc98/pc98/clock.c
  1.7       +2 -2      src/sys/pc98/pc98/pcaudio.c
  1.23      +11 -2     src/sys/sys/globaldata.h
  1.8       +5 -3      src/sys/sys/kernel.h
  1.42      +1 -1      src/sys/sys/proc.h
  1.17      +1 -3      src/sys/sys/systm.h
  1.40      +15 -1     src/sys/sys/thread.h
  1.8       +2 -84     src/sys/sys/time.h
  1.4       +3 -3      src/sys/sys/timepps.h
  1.4       +5 -3      src/sys/sys/timex.h


http://www.dragonflybsd.org/cvsweb/src/sys/bus/cam/cam_ccb.h.diff?r1=1.6&r2=1.7&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/bus/cam/cam_periph.c.diff?r1=1.6&r2=1.7&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/bus/cam/cam_xpt.c.diff?r1=1.8&r2=1.9&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/bus/isa/syscons_isa.c.diff?r1=1.3&r2=1.4&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/dev/acpica/acpi_timer.c.diff?r1=1.1&r2=1.2&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/dev/misc/dec/mcclock.c.diff?r1=1.3&r2=1.4&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/dev/misc/pps/pps.c.diff?r1=1.5&r2=1.6&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/dev/misc/xrpu/xrpu.c.diff?r1=1.5&r2=1.6&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/dev/serial/sio/sio.c.diff?r1=1.12&r2=1.13&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/dev/sound/isa/i386/pca/pcaudio.c.diff?r1=1.7&r2=1.8&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/dev/sound/isa/i386/spkr/spkr.c.diff?r1=1.8&r2=1.9&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/i386/i386/elan-mmcr.c.diff?r1=1.4&r2=1.5&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/i386/i386/mp_clock.c.diff?r1=1.3&r2=1.4&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/i386/i386/mp_machdep.c.diff?r1=1.20&r2=1.21&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/i386/include/clock.h.diff?r1=1.4&r2=1.5&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/i386/include/cpu.h.diff?r1=1.12&r2=1.13&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/i386/include/frame.h.diff?r1=1.3&r2=1.4&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/i386/isa/apic_vector.s.diff?r1=1.14&r2=1.15&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/i386/isa/clock.c.diff?r1=1.10&r2=1.11&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/i386/isa/icu_vector.s.diff?r1=1.15&r2=1.16&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/i386/isa/ipl.s.diff?r1=1.15&r2=1.16&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/i386/isa/timerreg.h.diff?r1=1.2&r2=1.3&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/kern/init_main.c.diff?r1=1.26&r2=1.27&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_clock.c.diff?r1=1.14&r2=1.15&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_ntptime.c.diff?r1=1.7&r2=1.8&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_poll.c.diff?r1=1.6&r2=1.7&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_random.c.diff?r1=1.5&r2=1.6&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_synch.c.diff?r1=1.26&r2=1.27&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_time.c.diff?r1=1.13&r2=1.14&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_timeout.c.diff?r1=1.6&r2=1.7&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/kern/lwkt_thread.c.diff?r1=1.48&r2=1.49&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/kern/subr_param.c.diff?r1=1.2&r2=1.3&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/netinet6/icmp6.c.diff?r1=1.6&r2=1.7&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/netproto/ns/ns_error.c.diff?r1=1.5&r2=1.6&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/pc98/pc98/clock.c.diff?r1=1.4&r2=1.5&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/pc98/pc98/pcaudio.c.diff?r1=1.6&r2=1.7&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/sys/globaldata.h.diff?r1=1.22&r2=1.23&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/sys/kernel.h.diff?r1=1.7&r2=1.8&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/sys/proc.h.diff?r1=1.41&r2=1.42&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/sys/systm.h.diff?r1=1.16&r2=1.17&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/sys/thread.h.diff?r1=1.39&r2=1.40&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/sys/time.h.diff?r1=1.7&r2=1.8&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/sys/timepps.h.diff?r1=1.3&r2=1.4&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/sys/timex.h.diff?r1=1.3&r2=1.4&f=h





More information about the Commits mailing list