sparc64 kernel code question..

Brian Fundakowski Feldman green at FreeBSD.ORG
Sun May 9 16:58:09 PDT 2004


RJulian Elischer <julian at elischer.org> wrote:
> 
> in vm_machdep.c the sparc64  code has
> void
> cpu_sched_exit(struct thread *td)
> {
>         struct vmspace *vm;
>         struct pcpu *pc;
>         struct proc *p;
> 
>         mtx_assert(&sched_lock, MA_OWNED);
>  
>         p = td->td_proc;
>         vm = p->p_vmspace;
>         if (vm->vm_refcnt > 1)
>                 return;
>         SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
>                 if (pc->pc_vmspace == vm) {
>                         vm->vm_pmap.pm_active &= ~pc->pc_cpumask;
>                         vm->vm_pmap.pm_context[pc->pc_cpuid] = -1;
>                         pc->pc_vmspace = NULL;
>                 }
>         }
> }
> 
> 
> 
> This is thw only architecture that has this..
> What does it do? And what does it have to do with the scheduler?

It would appear to detach the vmspace in question from other executing CPUs. 
This makes no sense -- how would other CPUs be executing on that vmspace if 
it's already single-threaded at that point (also, single-threaded in the 
rfork(2) sense because of the vm_refcnt check)?

-- 
Brian Fundakowski Feldman                           \'[ FreeBSD ]''''''''''\
  <> green at FreeBSD.org                               \  The Power to Serve! \
 Opinions expressed are my own.                       \,,,,,,,,,,,,,,,,,,,,,,\




More information about the freebsd-current mailing list