arm64/mm: improve comment in contpte_ptep_get_lockless()
Make clear the atmicity/consistency requirements of the API and how we achieve them. Link: https://lore.kernel.org/linux-mm/Zc-Tqqfksho3BHmU@arm.com/ Link: https://lkml.kernel.org/r/20240226120321.1055731-3-ryan.roberts@arm.com Signed-off-by: Ryan Roberts <ryan.roberts@arm.com> Acked-by: David Hildenbrand <david@redhat.com> Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Cc: John Hubbard <jhubbard@nvidia.com> Cc: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
912609e96c
commit
94c18d5f7e
@ -183,16 +183,20 @@ EXPORT_SYMBOL_GPL(contpte_ptep_get);
|
|||||||
pte_t contpte_ptep_get_lockless(pte_t *orig_ptep)
|
pte_t contpte_ptep_get_lockless(pte_t *orig_ptep)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Gather access/dirty bits, which may be populated in any of the ptes
|
* The ptep_get_lockless() API requires us to read and return *orig_ptep
|
||||||
* of the contig range. We may not be holding the PTL, so any contiguous
|
* so that it is self-consistent, without the PTL held, so we may be
|
||||||
* range may be unfolded/modified/refolded under our feet. Therefore we
|
* racing with other threads modifying the pte. Usually a READ_ONCE()
|
||||||
* ensure we read a _consistent_ contpte range by checking that all ptes
|
* would suffice, but for the contpte case, we also need to gather the
|
||||||
* in the range are valid and have CONT_PTE set, that all pfns are
|
* access and dirty bits from across all ptes in the contiguous block,
|
||||||
* contiguous and that all pgprots are the same (ignoring access/dirty).
|
* and we can't read all of those neighbouring ptes atomically, so any
|
||||||
* If we find a pte that is not consistent, then we must be racing with
|
* contiguous range may be unfolded/modified/refolded under our feet.
|
||||||
* an update so start again. If the target pte does not have CONT_PTE
|
* Therefore we ensure we read a _consistent_ contpte range by checking
|
||||||
* set then that is considered consistent on its own because it is not
|
* that all ptes in the range are valid and have CONT_PTE set, that all
|
||||||
* part of a contpte range.
|
* pfns are contiguous and that all pgprots are the same (ignoring
|
||||||
|
* access/dirty). If we find a pte that is not consistent, then we must
|
||||||
|
* be racing with an update so start again. If the target pte does not
|
||||||
|
* have CONT_PTE set then that is considered consistent on its own
|
||||||
|
* because it is not part of a contpte range.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pgprot_t orig_prot;
|
pgprot_t orig_prot;
|
||||||
|
Loading…
Reference in New Issue
Block a user