cvs commit: src/sys/conf options.i386 src/sys/i386/i386 machdep.c mp_machdep.c pmap.c swtch.s src/sys/i386/include md_var.h pmap.h smp.h src/sys/i386/isa apic_vector.s intr_machdep.h src/sys/kern kern_switch.c kern_synch.c kern_thr.c kern_thread.c subr_witness.c ...

Andrew Gallatin gallatin at cs.duke.edu
Thu Apr 3 11:24:52 PST 2003


Peter Wemm [peter at wemm.org] wrote:
> Nate Lawson wrote:
<..>
> > Shouldn't there be a "if (thread == curthread) return;" in the scheduling
> > code somewhere?
> 
> There is now. :-)
> 
>         newtd = choosethread();
>         if (td != newtd)
>                 cpu_switch(td, newtd);  /* SHAZAM!! */
> #ifdef SWTCH_OPTIM_STATS
>         else
>                 stupid_switch++;
> #endif
> 
> sparc64's cpu_switch() already optimized this case.  i386 didn't.  I haven't
> checked alpha/ia64 yet, but they're still using the old no-args API.

I think alpha has this feature:

LEAF(cpu_switch, 1)
<..>
        CALL(choosethread)                      /* can't return NULL */
        mov     v0, s2                          /* s2 = new thread  */
        ldq     s3, TD_MD_PCBPADDR(s2)          /* s3 = new pcbpaddr */

        /*
         * Check to see if we're switching to ourself.  If we are,
         * don't bother loading the new context.
<..>

        cmpeq   s0, s2, t0                      /* oldthread == newthread? */
        bne     t0, Lcs7                        /* Yes!  Skip! */

Drew


More information about the cvs-all mailing list