4442f74b81
PV entries are now roughly half the size. Instead of using a shared UMA zone for 28 byte pv entries (two 8-byte tailq nodes, a 4 byte pointer, a 4 byte address and 4 byte flags), we allocate a page at a time per process. This provides 252 pv entries per process (actually, per pmap address space) and eliminates one of the 8-byte tailq entries since we now can track per-process pv entries implicitly. The pointer to the pmap can be eliminated by doing address arithmetic to find the metadata on the page headers to find a single pointer shared by all 252 entries. There is an 8-int bitmap for the freelist of those 252 entries. When in serious low memory condition, allocation of another pv_chunk is possible by freeing some pages in pmap_pv_reclaim(). Added pv_entry/pv_chunk related statistics to pmap. pv_entry/pv_chunk statistics can be accessed via sysctl vm.pmap. Ported PTE freelist of KVA allocation and maintenance from i386. Using an idea from Stephan Uphoff, use the empty pte's that correspond to the unused kva in the pv memory block to thread a freelist through. This allows us to free pages that used to be used for pv entry chunks since we can now track holes in the kva memory block. As both ARM pmap.c and pmap-v6.c use the same header and pv_entry, pmap and md_page structures are different, it was needed to separate code designed for ARMv6/7 from the one for other ARMs. Submitted by: Zbigniew Bodek <zbb@semihalf.com> Reviewed by: alc Sponsored by: The FreeBSD Foundation, Semihalf
64 lines
1.7 KiB
Plaintext
64 lines
1.7 KiB
Plaintext
#$FreeBSD$
|
|
ARM9_CACHE_WRITE_THROUGH opt_global.h
|
|
ARM_CACHE_LOCK_ENABLE opt_global.h
|
|
ARMFPE opt_global.h
|
|
ARM_KERN_DIRECTMAP opt_vm.h
|
|
ARM_L2_PIPT opt_global.h
|
|
ARM_MANY_BOARD opt_global.h
|
|
ARM_USE_SMALL_ALLOC opt_global.h
|
|
ARM_VFP_SUPPORT opt_global.h
|
|
ARM_WANT_TP_ADDRESS opt_global.h
|
|
COUNTS_PER_SEC opt_timer.h
|
|
CPU_ARM9 opt_global.h
|
|
CPU_ARM9E opt_global.h
|
|
CPU_ARM1136 opt_global.h
|
|
CPU_ARM1176 opt_global.h
|
|
CPU_CORTEXA opt_global.h
|
|
CPU_FA526 opt_global.h
|
|
CPU_FA626TE opt_global.h
|
|
CPU_MV_PJ4B opt_global.h
|
|
CPU_SA1100 opt_global.h
|
|
CPU_SA1110 opt_global.h
|
|
CPU_XSCALE_80219 opt_global.h
|
|
CPU_XSCALE_80321 opt_global.h
|
|
CPU_XSCALE_81342 opt_global.h
|
|
CPU_XSCALE_IXP425 opt_global.h
|
|
CPU_XSCALE_IXP435 opt_global.h
|
|
CPU_XSCALE_PXA2X0 opt_global.h
|
|
FLASHADDR opt_global.h
|
|
IPI_IRQ_START opt_smp.h
|
|
IPI_IRQ_END opt_smp.h
|
|
FREEBSD_BOOT_LOADER opt_global.h
|
|
IXP4XX_FLASH_SIZE opt_global.h
|
|
KERNPHYSADDR opt_global.h
|
|
KERNVIRTADDR opt_global.h
|
|
LINUX_BOOT_ABI opt_global.h
|
|
LOADERRAMADDR opt_global.h
|
|
NO_EVENTTIMERS opt_timer.h
|
|
PHYSADDR opt_global.h
|
|
PV_STATS opt_pmap.h
|
|
QEMU_WORKAROUNDS opt_global.h
|
|
SOC_MV_ARMADAXP opt_global.h
|
|
SOC_MV_DISCOVERY opt_global.h
|
|
SOC_MV_DOVE opt_global.h
|
|
SOC_MV_FREY opt_global.h
|
|
SOC_MV_KIRKWOOD opt_global.h
|
|
SOC_MV_LOKIPLUS opt_global.h
|
|
SOC_MV_ORION opt_global.h
|
|
SOC_OMAP3 opt_global.h
|
|
SOC_OMAP4 opt_global.h
|
|
SOC_TI_AM335X opt_global.h
|
|
SOC_TEGRA2 opt_global.h
|
|
STARTUP_PAGETABLE_ADDR opt_global.h
|
|
XSCALE_CACHE_READ_WRITE_ALLOCATE opt_global.h
|
|
XSACLE_DISABLE_CCNT opt_timer.h
|
|
VERBOSE_INIT_ARM opt_global.h
|
|
VM_MAXUSER_ADDRESS opt_global.h
|
|
AT91_ATE_USE_RMII opt_at91.h
|
|
AT91_MCI_HAS_4WIRE opt_at91.h
|
|
AT91_MCI_SLOT_B opt_at91.h
|
|
GFB_DEBUG opt_gfb.h
|
|
GFB_NO_FONT_LOADING opt_gfb.h
|
|
GFB_NO_MODE_CHANGE opt_gfb.h
|
|
AT91C_MAIN_CLOCK opt_at91.h
|