Port-sparc64 archive

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

re: V240 and V440 servers



   
   On Mar 19, 2010, at 17:50, matthew green wrote:
   > i now have a brand new-to-me ultra80 that exhibits the 4-way hang,
   > and i've seen my clocks complain about going backwards, but not
   > about losing time...
   
      Makes me feel lucky.  My E420R has 4 procs, and as far as I know,  
   doesn't hang. I suppose I should count my blessings, and avoid - 
   current, eh?  ;-)  (I'm running netbsd-5 on that box)


if the box isn't heavily loaded, i can imagine it stays up OK.

actually, i think i've figured this one out already.  pmap_lock can't
be an adaptive mutex.  the patch below changes it to IPL_VM, and
removes the two now-bogus KASSERT()'s that trigger with this change.
(it also has a minor change i'm working on but, unrelated to any
current problems or fixes..)


anyone with a 4-core box who has seen hangs please try this out and
get back to me.  this u80 is well beyond the 5 hangs i had seen before
i tracked down the cause, but it's still early days for it.

thanks!


.mrg.


Index: sparc64/pmap.c
===================================================================
RCS file: /cvsroot/src/sys/arch/sparc64/sparc64/pmap.c,v
retrieving revision 1.259
diff -p -r1.259 pmap.c
*** sparc64/pmap.c      10 Mar 2010 06:57:22 -0000      1.259
--- sparc64/pmap.c      20 Mar 2010 02:42:36 -0000
*************** pmap_init(void)
*** 1256,1261 ****
--- 1256,1263 ----
  
        BDPRINTF(PDB_BOOT1, ("pmap_init()\n"));
  
+       UVM_OBJ_INIT(&pmap_kernel()->pm_obj, NULL, 1);
+ 
        size = sizeof(struct pv_entry) * physmem;
        if (uvm_pglistalloc((psize_t)size, (paddr_t)0, (paddr_t)-1,
                (paddr_t)PAGE_SIZE, (paddr_t)0, &pglist, 1, 0) != 0)
*************** pmap_init(void)
*** 1293,1299 ****
        vm_first_phys = avail_start;
        vm_num_phys = avail_end - avail_start;
  
!       mutex_init(&pmap_lock, MUTEX_DEFAULT, IPL_NONE);
  #if defined(USE_LOCKSAFE_PSEG_GETSET)
        mutex_init(&pseg_lock, MUTEX_SPIN, IPL_VM);
  #endif
--- 1295,1301 ----
        vm_first_phys = avail_start;
        vm_num_phys = avail_end - avail_start;
  
!       mutex_init(&pmap_lock, MUTEX_DEFAULT, IPL_VM);
  #if defined(USE_LOCKSAFE_PSEG_GETSET)
        mutex_init(&pseg_lock, MUTEX_SPIN, IPL_VM);
  #endif
*************** pmap_is_modified(struct vm_page *pg)
*** 2621,2628 ****
        pv_entry_t pv, npv;
        bool res = false;
  
-       KASSERT(!mutex_owned(&pmap_lock));
- 
        /* Check if any mapping has been modified */
        pv = &pg->mdpage.mdpg_pvh;
        if (pv->pv_va & PV_MOD)
--- 2623,2628 ----
*************** pmap_is_referenced(struct vm_page *pg)
*** 2725,2732 ****
        pv_entry_t pv;
        bool res = false;
  
-       KASSERT(!mutex_owned(&pmap_lock));
- 
        /* Check if any mapping has been referenced */
        pv = &pg->mdpage.mdpg_pvh;
        if (pv->pv_va & PV_REF)
--- 2725,2730 ----


Home | Main Index | Thread Index | Old Index