John Baldwin wrote:
> Currently, sparc64 SMP panics before getting out of single user mode
> because there is an optimization case in cpu_switch() (if we are
> switching back to the same thread, we just return right away) that
> doesn't set td_state to TDS_RUNNING. Also, according to Peter, the
> code in ia64's cpu_switch() doesn't work either. Rather than try to
> fix this in the assembler though, I think it is easier to just set
> the thread state once in C at the end of choosethread(). It is a
> lot easier to maintain down the road. The patch to do this is at
> http://www.freebsd.org/~jhb/patches/kse_switch.patch
>
> It has been tested on sparc64, alpha, and i386 all with SMP. I
> would like to commit it soonish. Comments?
I like your patch much better. I had to use this alternative change
to the ia64 source - the cvs version doesn't compile.
ie: Change this:
@@ -283,6 +283,12 @@
st8 [r14]=r4 // set r13->pc_curthread
mov ar.k7=r4
;;
+// Julian's guess at settinghte thread state
+ add r15=TD_STATE,r4
+ ;;
+ mov [r15]=TDS_RUNNING
+ ;;
+// end of julian's guess
add r15=TD_PCB,r4
;;
ld8 r15=[r15]
to something more like this:
@@ -284,8 +284,11 @@
mov ar.k7=r4
;;
add r15=TD_PCB,r4
+ add r16=TD_STATE,r4
+ mov r17=TDS_RUNNING
;;
ld8 r15=[r15]
+ st8 [r16]=r17
;;
add r15=PCB_PMAP,r15 // &pcb_pmap
;;
I think I'd rather that we did it in C, since we have a convenient spot
to do it. My feeble attempt isn't exactly optimal either. I'd expect
the compiler to do an increasingly [over time] better job.
Cheers,
-Peter
--
Peter Wemm - [EMAIL PROTECTED]; [EMAIL PROTECTED]; [EMAIL PROTECTED]
"All of this is for nothing if we don't go to the stars" - JMS/B5
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message