NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: port-arm/38950 (shark, hpcarm kernels prone to hard hangs on process exit)



The following reply was made to PR port-arm/38950; it has been noted by GNATS.

From: Steve Woodford <scw%netbsd.org@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc: port-arm-maintainer%netbsd.org@localhost,
 gnats-admin%netbsd.org@localhost,
 netbsd-bugs%netbsd.org@localhost,
 rafal%pobox.com@localhost
Subject: Re: port-arm/38950 (shark,  hpcarm kernels prone to hard hangs on 
process exit)
Date: Mon, 23 Jun 2008 15:55:41 +0100

 On Friday 20 June 2008 04:35:01 Rafal Boni wrote:
 
 >  This just occurred to me after having filed this in the "I don't
 > have time to think about it right now" bin.  The issue here is that
 > the pmap code is using the last-active-lwp as a proxy for
 > last-active-pmap.  What we should do is just save the pmap pointed to
 > by the last-active-lwp vs. the lwp itself.
 
 While that may solve the problem, it may well work against the intention 
 of "last-active-pmap", which is to reduce the impact of 
 context-switching between user-mode processes/lwps.
 
 A simple fix would be to add the following to pmap_deactivate():
 
 Index: pmap.c
 ===================================================================
 RCS file: /cvsroot/src/sys/arch/arm/arm32/pmap.c,v
 retrieving revision 1.177
 diff -u -r1.177 pmap.c
 --- pmap.c      17 Jun 2008 08:04:26 -0000      1.177
 +++ pmap.c      23 Jun 2008 14:55:07 -0000
 @@ -3882,6 +3882,14 @@
  pmap_deactivate(struct lwp *l)
  {
 
 +       /*
 +        * If the process is exiting, make sure pmap_activate() does
 +        * a full MMU context-switch and cache flush, which we might
 +        * otherwise skip. See PR port-arm/38950.
 +        */
 +       if (l->l_proc->p_sflag & PS_WEXIT)
 +               pmap_previous_active_lwp = NULL;
 +
         l->l_proc->p_vmspace->vm_map.pmap->pm_activated = false;
  }
 
 
 Cheers, Steve
 


Home | Main Index | Thread Index | Old Index