Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 09 May 2004 19:58:06 -0400
From:      Brian Fundakowski Feldman <green@FreeBSD.ORG>
To:        Julian Elischer <julian@elischer.org>
Cc:        FreeBSD current users <current@FreeBSD.ORG>
Subject:   Re: sparc64 kernel code question.. 
Message-ID:  <200405092358.i49Nw6TJ019581@green.homeunix.org>
In-Reply-To: Message from Julian Elischer <julian@elischer.org>  <Pine.BSF.4.21.0405091542380.24403-100000@InterJet.elischer.org> 

next in thread | previous in thread | raw e-mail | index | archive | help
RJulian Elischer <julian@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@FreeBSD.org                               \  The Power to Serve! \
 Opinions expressed are my own.                       \,,,,,,,,,,,,,,,,,,,,,,\




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200405092358.i49Nw6TJ019581>