Mercurial > illumos > illumos-gate
changeset 10292:5f64d818187b
6867999 Seeing "WARNING: mmu-#ra-bits property not found in MD and DR disabled" during every reboot
6868039 Panics on install of build Nevada 120 on sun4v systems
author | Bijan Mottahedeh <bijan.mottahedeh@sun.com> |
---|---|
date | Tue, 11 Aug 2009 17:46:05 -0700 |
parents | 87d599b1efb6 |
children | ac02598ffdd8 |
files | usr/src/uts/sun4v/os/fillsysinfo.c usr/src/uts/sun4v/promif/promif_emul.c |
diffstat | 2 files changed, 34 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/sun4v/os/fillsysinfo.c Tue Aug 11 08:57:50 2009 -0700 +++ b/usr/src/uts/sun4v/os/fillsysinfo.c Tue Aug 11 17:46:05 2009 -0700 @@ -774,9 +774,6 @@ } } - cmn_err(CE_WARN, "mmu-#ra-bits property not found in MD"); - cmn_err(CE_WARN, "Memory DR disabled"); - memnodes = md_alloc_scan_dag(mdp, md_root_node(mdp), "memory", "fwd", &mem_list);
--- a/usr/src/uts/sun4v/promif/promif_emul.c Tue Aug 11 08:57:50 2009 -0700 +++ b/usr/src/uts/sun4v/promif/promif_emul.c Tue Aug 11 17:46:05 2009 -0700 @@ -233,7 +233,7 @@ unmap_prom_mappings(struct translation *transroot, size_t ntransroot) { int i, j, rv; - int npgs, nunmapped, nfreed, nskipped; + int npgs, nunmapped, nfreed, nskipped, nskipped_io; char *p; tte_t tte; pfn_t pfn; @@ -256,6 +256,7 @@ nfreed = 0; nunmapped = 0; nskipped = 0; + nskipped_io = 0; for (i = 0, promt = transroot; i < ntransroot; i++, promt++) { ASSERT(promt->tte_hi != 0); @@ -292,34 +293,41 @@ ASSERT(TTE_IS_8K(&tte)); /* - * Unload the current mapping for the page and - * if it is the last mapping, free the page. + * Unload the current mapping for the pfn and + * if it is the last mapping for a memory page, + * free the page. */ - pp = page_numtopp_nolock(pfn); - PMFREE_DEBUG("unmap vaddr=0x%lx pfn=0x%lx pp=0x%p", - vaddr, pfn, (void *)pp); - ASSERT(pp); - ASSERT(PAGE_EXCL(pp)); - ASSERT(PP_ISNORELOC(pp)); - ASSERT(!PP_ISFREE(pp)); - ASSERT(page_find(&prom_ppages, pfn)); - ASSERT(page_get_pagecnt(pp->p_szc) == 1); + PMFREE_DEBUG("unmap vaddr=0x%lx pfn=0x%lx", vaddr, pfn); hat_unload(kas.a_hat, (caddr_t)vaddr, PAGESIZE, HAT_UNLOAD_UNLOCK); - if (pp->p_mapping) { - PMFREE_DEBUG(" skip\n"); + if (pf_is_memory(pfn)) { + pp = page_numtopp_nolock(pfn); + PMFREE_DEBUG(" pp=0x%p", (void *)pp); + ASSERT(pp); + ASSERT(PAGE_EXCL(pp)); + ASSERT(PP_ISNORELOC(pp)); + ASSERT(!PP_ISFREE(pp)); + ASSERT(page_find(&prom_ppages, pfn)); + ASSERT(page_get_pagecnt(pp->p_szc) == 1); + + if (pp->p_mapping) { + PMFREE_DEBUG(" skip\n"); + } else { + PP_CLRNORELOC(pp); + page_destroy(pp, 0); + memlist_write_lock(); + rv = memlist_add_span(pfn << PAGESHIFT, + PAGESIZE, &phys_avail); + ASSERT(rv == MEML_SPANOP_OK); + memlist_write_unlock(); + PMFREE_DEBUG(" free\n"); + nfreed++; + } } else { - PP_CLRNORELOC(pp); - page_destroy(pp, 0); - memlist_write_lock(); - rv = memlist_add_span(pfn << PAGESHIFT, - PAGESIZE, &phys_avail); - ASSERT(rv == MEML_SPANOP_OK); - memlist_write_unlock(); - PMFREE_DEBUG(" free\n"); - nfreed++; + nskipped_io++; + PMFREE_DEBUG(" skip IO\n"); } nunmapped++; vaddr += PAGESIZE; @@ -327,8 +335,9 @@ } if (transroot) { - PMFREE_DEBUG("nunmapped=%d nfreed=%d nskipped=%d\n", - nunmapped, nfreed, nskipped); + PMFREE_DEBUG( + "nunmapped=%d nfreed=%d nskipped=%d nskipped_io=%d\n", + nunmapped, nfreed, nskipped, nskipped_io); kmem_free(transroot, ntransroot * sizeof (*transroot)); }