Page MenuHomeFreeBSD

arm64 pmap: Make VM_PAGE_TO_PV_LIST_LOCK() a constant-time operation
ClosedPublic

Authored by alc on May 28 2023, 5:27 AM.
Tags
None
Referenced Files
Unknown Object (File)
Sun, Oct 13, 9:46 AM
Unknown Object (File)
Sun, Oct 13, 9:45 AM
Unknown Object (File)
Sun, Oct 13, 9:45 AM
Unknown Object (File)
Sun, Oct 13, 9:37 AM
Unknown Object (File)
Thu, Oct 10, 9:24 AM
Unknown Object (File)
Oct 9 2024, 11:42 AM
Unknown Object (File)
Oct 9 2024, 12:32 AM
Unknown Object (File)
Oct 8 2024, 7:40 PM
Subscribers

Details

Summary

The prior implementation of VM_PAGE_TO_PV_LIST_LOCK() performed a linear-time search of the vm_phys_segs[] array. However, in contrast to PHYS_TO_PV_LIST_LOCK(), that search is unnecessary because every (non-fictitious) vm_page contains the index of the vm_phys_seg in which it resides.

Change most of the remaining uses of CHANGE_PV_LIST_LOCK_TO_PHYS() and PHYS_TO_PV_LIST_LOCK() to CHANGE_PV_LIST_LOCK_TO_VM_PAGE() and VM_PAGE_TO_PV_LIST_LOCK(), respectively.

Collectively, these changes reduce the size of a GENERIC-NODEBUG kernel's pmap.

Before:

 text   data    bss     dec       hex   filename
70144   3200   2248   75592   0x12748   pmap.o

After:

 text   data    bss     dec       hex   filename
69192   3200   2248   74640   0x12390   pmap.o

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable