Date: Wed, 13 Jun 2001 10:05:50 -0700 (PDT) From: Matthew Jacob <mjacob@feral.com> To: John Baldwin <jhb@FreeBSD.ORG> Cc: freebsd-alpha@FreeBSD.ORG, wilko@FreeBSD.ORG, Andrew Gallatin <gallatin@cs.duke.edu> Subject: Re: followup on 8 way SMP pani Message-ID: <Pine.BSF.4.21.0106131003400.40934-100000@beppo.feral.com> In-Reply-To: <XFMail.010613095649.jhb@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 13 Jun 2001, John Baldwin wrote:
>
> On 13-Jun-01 Matthew Jacob wrote:
> >
> >
> > What I needed to fix for turbolaser is to clear the timer interrupt for all
> > CPUs but the primary CPU- this is the TLINTRMASK{0,1} registers. But, stupid
> > me, I upgraded my source first.
>
> Ok, then we will need to change how platform.clockintr works slightly. (It
> will need to do more) and then forward_*clock in sys/i386/i386/mp_machdep.c
> will need to be moved to sys/kern/subr_smp.c, and a few tweaks need to made to
> smp_handle_ipis() in alpha/alpha/mp_machdep.c, and the tlsb will need a custom
> platform.clockintr that handles clock interrupts the way x86 does by IPI'ing
> all other processses to go handle clock interrupts. Hmmm. Actually.
Now I'm confused. I guess I should go look at the code. Are you saying you
would like all CPUs to receive clock interrupts?
It was my belief/speculation that we ran into problems because all CPUs were
getting a clock interrupt. Maybe that's not right?
>
> You shouldn't even have to do this. SMP doesn't need the i8254
> timecounter on the alpha actually, because we make it so that only the
> boot CPU actually messes with the timecounters, so a non-i8254 timecounter
> should work fine on SMP systems just fine right now. The reason I think
> dfr used hte i8254 before was that in pre-SMPng we did need to handle
> clock interrupts on whatever CPU owned the kernel lock, but now we don't
> have that same restriction.
There is no i8254 on the turbolaser. i8254 is only present on ISA bus
machines. I hacked around this some weeks back. Maybe I need to to fix this
again.
>
> >> > Yes, sorry I never replied. According to Matt, the turbolaser doesn't
> >> > have an i8254 timecounter. And the alpha timecounter is never
> >> > initialized in alpha/alpha/clock.c if ncpus>1, so you're taking a
> >> > clock interrupt with no timecounter. Oops. No MP for TurboLasers
> >> > right now, I guess.
> >> >
> >> > Here's the code in question:
> >> >
> >> > /*
> >> > * XXX: TurboLaser doesn't have an i8254 counter.
> >> > * XXX: A replacement is needed, and another method
> >> > * XXX: of determining this would be nice.
> >> > */
> >> > if (hwrpb->rpb_type != ST_DEC_21000) {
> >> > tc_init(&i8254_timecounter);
> >> > }
> >> >
> >> > if (ncpus == 1) {
> >> > alpha_timecounter.tc_frequency = freq;
> >> > tc_init(&alpha_timecounter);
> >> > }
>
> We should always init the alpha_timecounter. I'm not sure if we even want an
> i8254 timecounter anymore unless it is more reliable than the alpha version..
>
There are other, more reliable, timers I'm sure.
-matt
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-alpha" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0106131003400.40934-100000>
