diff options
-rw-r--r-- | sys/pc98/cbus/clock.c | 16 | ||||
-rw-r--r-- | sys/pc98/cbus/pcrtc.c | 16 | ||||
-rw-r--r-- | 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 ae1a3c6..69c4b49 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 ae1a3c6..69c4b49 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 ae1a3c6..69c4b49 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" |