Date: Thu, 17 Apr 2014 09:21:58 +0000 (UTC) From: "Cherry G. Mathew" <cherry@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r264584 - projects/amd64_xen_pv/sys/amd64/xen Message-ID: <201404170921.s3H9LwoY051195@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: cherry Date: Thu Apr 17 09:21:58 2014 New Revision: 264584 URL: http://svnweb.freebsd.org/changeset/base/264584 Log: Implement pmap_extract() for userland. Single user boot should now happen for 64M ram. Approved by: gibbs (implicit) Modified: projects/amd64_xen_pv/sys/amd64/xen/pmap.c Modified: projects/amd64_xen_pv/sys/amd64/xen/pmap.c ============================================================================== --- projects/amd64_xen_pv/sys/amd64/xen/pmap.c Thu Apr 17 09:14:52 2014 (r264583) +++ projects/amd64_xen_pv/sys/amd64/xen/pmap.c Thu Apr 17 09:21:58 2014 (r264584) @@ -1646,9 +1646,31 @@ pmap_remove_all(vm_page_t m) vm_paddr_t pmap_extract(pmap_t pmap, vm_offset_t va) { - KASSERT(pmap == kernel_pmap, ("XXX: %s: TODO\n", __func__)); - return pmap_kextract(va); + if (pmap == kernel_pmap) { + return pmap_kextract(va); + } + + pt_entry_t *pte; + vm_paddr_t ma = 0; + + + /* Walk the PT hierarchy to get the ma */ + char tbuf[tsz]; /* Safe to do this on the stack since tsz is + * effectively const. + */ + + mmu_map_t tptr = tbuf; + + pte = pmap_vtopte_inspect(pmap, va, &tptr); + + if (pte != NULL && (*pte & PG_V)) { + ma = (*pte & PG_FRAME) | (va & PAGE_MASK); + } + + pmap_vtopte_release(pmap, va, &tptr); + + return xpmap_mtop(ma); } vm_page_t
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201404170921.s3H9LwoY051195>