#### #### DO NOT USE! HERE FOR REFERENCE ONLY. see smallpv4.diff #### ==== //depot/yahoo/ybsd_6/src/sys/amd64/amd64/pmap.c#8 - /home/peter/ybsd_6/src/sys/amd64/amd64/pmap.c ==== @@ -1472,25 +1472,31 @@ pv_entry_t pv; PMAP_LOCK_ASSERT(pmap, MA_OWNED); mtx_assert(&vm_page_queue_mtx, MA_OWNED); +#ifndef SMALL_PV if (m->md.pv_list_count < pmap->pm_stats.resident_count) { +#endif TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { if (pmap == pv->pv_pmap && va == pv->pv_va) break; } +#ifndef SMALL_PV } else { TAILQ_FOREACH(pv, &pmap->pm_pvlist, pv_plist) { if (va == pv->pv_va) break; } } +#endif KASSERT(pv != NULL, ("pmap_remove_entry: pv not found")); TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); m->md.pv_list_count--; if (TAILQ_EMPTY(&m->md.pv_list)) vm_page_flag_clear(m, PG_WRITEABLE); +#ifndef SMALL_PV TAILQ_REMOVE(&pmap->pm_pvlist, pv, pv_plist); +#endif free_pv_entry(pv); } /* @@ -1509,9 +1515,11 @@ pv->pv_pmap = pmap; PMAP_LOCK_ASSERT(pmap, MA_OWNED); mtx_assert(&vm_page_queue_mtx, MA_OWNED); +#ifndef SMALL_PV TAILQ_INSERT_TAIL(&pmap->pm_pvlist, pv, pv_plist); +#endif TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list); m->md.pv_list_count++; } @@ -1733,9 +1741,11 @@ if (pmap_track_modified(pv->pv_va)) vm_page_dirty(m); } pmap_invalidate_page(pv->pv_pmap, pv->pv_va); +#ifndef SMALL_PV TAILQ_REMOVE(&pv->pv_pmap->pm_pvlist, pv, pv_plist); +#endif TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); m->md.pv_list_count--; pmap_unuse_pt(pv->pv_pmap, pv->pv_va, ptepde); PMAP_UNLOCK(pv->pv_pmap); @@ -2533,8 +2543,9 @@ pmap_remove_pages(pmap, sva, eva) pmap_t pmap; vm_offset_t sva, eva; { +#ifndef SMALL_PV pt_entry_t *pte, tpte; vm_page_t m; pv_entry_t pv, npv; @@ -2609,8 +2620,9 @@ } pmap_invalidate_all(pmap); PMAP_UNLOCK(pmap); vm_page_unlock_queues(); +#endif } /* * pmap_is_modified: ==== //depot/yahoo/ybsd_6/src/sys/amd64/include/pmap.h#3 - /home/peter/ybsd_6/src/sys/amd64/include/pmap.h ==== @@ -264,9 +264,11 @@ typedef struct pv_entry { pmap_t pv_pmap; /* pmap where mapping lies */ vm_offset_t pv_va; /* virtual address for mapping */ TAILQ_ENTRY(pv_entry) pv_list; +#ifndef SMALL_PV TAILQ_ENTRY(pv_entry) pv_plist; +#endif } *pv_entry_t; #ifdef _KERNEL ==== //depot/yahoo/ybsd_6/src/sys/conf/options.amd64#5 - /home/peter/ybsd_6/src/sys/conf/options.amd64 ==== @@ -5,8 +5,9 @@ AUTO_EOI_2 opt_auto_eoi.h MAXMEM PERFMON opt_perfmon.h PMAP_SHPGPERPROC opt_pmap.h +SMALL_PV opt_pmap.h MP_WATCHDOG opt_mp_watchdog.h # Options for emulators. These should only be used at config time, so # they are handled like options for static filesystems