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)
Sat, Mar 15, 6:16 AM
Unknown Object (File)
Thu, Feb 27, 3:11 PM
Unknown Object (File)
Feb 16 2025, 1:02 AM
Unknown Object (File)
Feb 10 2025, 11:24 PM
Unknown Object (File)
Feb 7 2025, 7:25 AM
Unknown Object (File)
Feb 4 2025, 3:19 PM
Unknown Object (File)
Jan 27 2025, 2:27 AM
Unknown Object (File)
Jan 26 2025, 3:56 AM
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