HomeFreeBSD

arm64: Implement final level only TLB invalidations

Description

arm64: Implement final level only TLB invalidations

A feature of arm64's instruction for TLB invalidation is the ability
to determine whether cached intermediate entries, i.e., L{0,1,2}_TABLE
entries, are invalidated in addition to the final entry, e.g., an
L3_PAGE entry.

Update pmap_invalidate_{page,range}() to support both types of
invalidation, allowing the caller to determine which type of
invalidation is performed.

Update the callers to request the appropriate type of invalidation.

Eliminate redundant TLB invalidations in pmap_abort_ptp() and
pmap_remove_l3_range().

Add a comment to pmap_invalidate_all() making clear that it always
invalidates entries at all levels.

As expected, these changes result in a tiny yet measurable
performance improvement.

Reviewed by: kib, markj
MFC after: 3 weeks
Differential Revision: https://reviews.freebsd.org/D33705

(cherry picked from commit 4ccd6c137f5b53361efe54b78b815c7902258572)

Details

Provenance
alcAuthored on Dec 29 2021, 7:50 AM
andrewCommitted on Sep 21 2022, 9:45 AM
Reviewer
kib
Differential Revision
D33705: arm64: Eliminate unnecessary "page walk cache" invalidations
Parents
rGde7a32eaa528: i386: explain the handshake between copyout_fast.s and page fault handler
Branches
Unknown
Tags
Unknown