HomeFreeBSD

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

Description

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

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 also 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

Reviewed by: kib, markj
Differential Revision: https://reviews.freebsd.org/D40306

Details

Provenance
alcAuthored on May 29 2023, 6:01 AM
Reviewer
kib
Differential Revision
D40306: arm64 pmap: Make VM_PAGE_TO_PV_LIST_LOCK() a constant-time operation
Parents
rG8792c03886d9: Apply clang fixes for crashes compiling ARM/AArch64 CRC intrinsics
Branches
Unknown
Tags
Unknown