From 3520a2a0e2a00bdefc719bd27b04796cacd4c4da Mon Sep 17 00:00:00 2001 From: KATO Takenori Date: Wed, 2 May 2001 13:51:49 +0000 Subject: [PATCH] Merged from sys/i386/isa/clock.c revisions 1.172 and 1.173. --- sys/pc98/cbus/clock.c | 16 +++++++++++++++- sys/pc98/cbus/pcrtc.c | 16 +++++++++++++++- sys/pc98/pc98/clock.c | 16 +++++++++++++++- 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/sys/pc98/cbus/clock.c b/sys/pc98/cbus/clock.c index ae1a3c68cfb..69c4b49b925 100644 --- a/sys/pc98/cbus/clock.c +++ b/sys/pc98/cbus/clock.c @@ -236,6 +236,10 @@ clkintr(struct clockframe frame) mtx_unlock_spin(&clock_lock); } timer_func(&frame); +#ifdef SMP + if (timer_func == hardclock) + forward_hardclock(); +#endif switch (timer0_state) { case RELEASED: @@ -246,6 +250,9 @@ clkintr(struct clockframe frame) >= hardclock_max_count) { timer0_prescaler_count -= hardclock_max_count; hardclock(&frame); +#ifdef SMP + forward_hardclock(); +#endif } break; @@ -278,6 +285,9 @@ clkintr(struct clockframe frame) timer_func = hardclock; timer0_state = RELEASED; hardclock(&frame); +#ifdef SMP + forward_hardclock(); +#endif } break; } @@ -435,8 +445,12 @@ release_timer2() static void rtcintr(struct clockframe frame) { - while (rtcin(RTC_INTR) & RTCIR_PERIOD) + while (rtcin(RTC_INTR) & RTCIR_PERIOD) { statclock(&frame); +#ifdef SMP + forward_statclock(); +#endif + } } #include "opt_ddb.h" diff --git a/sys/pc98/cbus/pcrtc.c b/sys/pc98/cbus/pcrtc.c index ae1a3c68cfb..69c4b49b925 100644 --- a/sys/pc98/cbus/pcrtc.c +++ b/sys/pc98/cbus/pcrtc.c @@ -236,6 +236,10 @@ clkintr(struct clockframe frame) mtx_unlock_spin(&clock_lock); } timer_func(&frame); +#ifdef SMP + if (timer_func == hardclock) + forward_hardclock(); +#endif switch (timer0_state) { case RELEASED: @@ -246,6 +250,9 @@ clkintr(struct clockframe frame) >= hardclock_max_count) { timer0_prescaler_count -= hardclock_max_count; hardclock(&frame); +#ifdef SMP + forward_hardclock(); +#endif } break; @@ -278,6 +285,9 @@ clkintr(struct clockframe frame) timer_func = hardclock; timer0_state = RELEASED; hardclock(&frame); +#ifdef SMP + forward_hardclock(); +#endif } break; } @@ -435,8 +445,12 @@ release_timer2() static void rtcintr(struct clockframe frame) { - while (rtcin(RTC_INTR) & RTCIR_PERIOD) + while (rtcin(RTC_INTR) & RTCIR_PERIOD) { statclock(&frame); +#ifdef SMP + forward_statclock(); +#endif + } } #include "opt_ddb.h" diff --git a/sys/pc98/pc98/clock.c b/sys/pc98/pc98/clock.c index ae1a3c68cfb..69c4b49b925 100644 --- a/sys/pc98/pc98/clock.c +++ b/sys/pc98/pc98/clock.c @@ -236,6 +236,10 @@ clkintr(struct clockframe frame) mtx_unlock_spin(&clock_lock); } timer_func(&frame); +#ifdef SMP + if (timer_func == hardclock) + forward_hardclock(); +#endif switch (timer0_state) { case RELEASED: @@ -246,6 +250,9 @@ clkintr(struct clockframe frame) >= hardclock_max_count) { timer0_prescaler_count -= hardclock_max_count; hardclock(&frame); +#ifdef SMP + forward_hardclock(); +#endif } break; @@ -278,6 +285,9 @@ clkintr(struct clockframe frame) timer_func = hardclock; timer0_state = RELEASED; hardclock(&frame); +#ifdef SMP + forward_hardclock(); +#endif } break; } @@ -435,8 +445,12 @@ release_timer2() static void rtcintr(struct clockframe frame) { - while (rtcin(RTC_INTR) & RTCIR_PERIOD) + while (rtcin(RTC_INTR) & RTCIR_PERIOD) { statclock(&frame); +#ifdef SMP + forward_statclock(); +#endif + } } #include "opt_ddb.h"