[PATCH] Switch Alpha to new cpu_switch/throw conventions

John Baldwin jhb at FreeBSD.org
Mon Aug 11 11:32:23 PDT 2003


On 08-Aug-2003 Marcel Moolenaar wrote:
> On Fri, Aug 08, 2003 at 05:14:59PM -0400, John Baldwin wrote:
>> I have a completely untested (but should work :-P) patch to convert
>> Alpha over to the new cpu_throw/switch conventions of passing the
>> threads in as arguments to the function.  The patch is at
>> http://www.FreeBSD.org/~jhb/patches/alpha_switch.patch  I would
>> appreciate it if someone could test it.  Success would be making
>> it to multiuser mode.  Failure would probably be panic'ing very early
>> after starting init since failure means context switches are broken.
> 
> Kaboom:
> 
>       :
> FreeBSD 5.1-CURRENT #19: Fri Aug  8 15:22:59 PDT 2003
>     marcel at alpha.pn.xcllnt.net:/nfs/freebsd/5.x/src/sys/alpha/compile/ALPHA
> Preloaded elf kernel "/boot/kernel/kernel" at 0xfffffc0000718000.
> Digital Personal Workstation (Miata)
> Digital Personal WorkStation 433au, 432MHz
>       :
> Timecounter "i8254"  frequency 1193182 Hz
> Timecounter "alpha"  frequency 433203210 Hz
> Timecounters tick every 0.976 msec
> acd0: CDROM <TOSHIBA CD-ROM XM-5702B> at ata0-master PIO3
> Waiting 3 seconds for SCSI devices to settle
> da0 at isp0 bus 0 target 0 lun 0
> da0: <QUANTUM ATLAS IV 9 WLS 0B0B> Fixed Direct Access SCSI-3 device
> da0: 40.000MB/s transfers (20.000MHz, offset 8, 16bit), Tagged Queueing Enabled
> da0: 8761MB (17942584 512 byte sectors: 255H 63S/T 1116C)
> Mounting root from ufs:/dev/da0a
>                                                                                 
> fatal kernel trap:
>                                                                                 
>     trap entry     = 0x2 (memory management fault)
>     faulting va    = 0x138
>     type           = access violation
>     cause          = load instructon
>     pc             = 0xfffffc000057e6ec
>     ra             = 0xfffffc0000580174
>     sp             = 0xfffffe0013f75be0
>     usp            = 0x11fffc58
>     curthread      = 0xfffffc0003c9abe0
>         pid = 37, comm = stty
>                                                                                 
> Stopped at      pmap_deactivate+0xc:    ldq     t1,0x138(t0) <0x138>    <t1=0x2>
> db> trace
> pmap_deactivate() at pmap_deactivate+0xc
> Lcs1() at Lcs1+0x20
> --- root of call graph ---

Hmm, ok, it seems we now call pmap_deactivate() from cpu_throw() when
we didn't used to before.  I've updated the patch to fix that and uploaded
it to the same place.  The only file that changed was swtch.s.   Please
test it to make sure the new one works, thanks.

-- 

John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/


More information about the freebsd-alpha mailing list