DragonFly commits List (threaded) for 2004-01
[
Date Prev][
Date Next]
[
Thread Prev][
Thread Next]
[
Date Index][
Thread Index]
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 ...
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
[
Date Prev][
Date Next]
[
Thread Prev][
Thread Next]
[
Date Index][
Thread Index]