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