Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 13 Jun 2001 09:56:49 -0700 (PDT)
From:      John Baldwin <jhb@FreeBSD.org>
To:        Matthew Jacob <mjacob@feral.com>
Cc:        freebsd-alpha@FreeBSD.org, wilko@FreeBSD.org, Andrew Gallatin <gallatin@cs.duke.edu>
Subject:   Re: followup on 8 way SMP pani
Message-ID:  <XFMail.010613095649.jhb@FreeBSD.org>
In-Reply-To: <Pine.BSF.4.21.0106122331460.39150-100000@beppo.feral.com>

next in thread | previous in thread | raw e-mail | index | archive | help

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.

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.

>> > 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..

-- 

John Baldwin <jhb@FreeBSD.org> -- http://www.FreeBSD.org/~jhb/
PGP Key: http://www.baldwin.cx/~john/pgpkey.asc
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/

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?XFMail.010613095649.jhb>