Message ID | 20240202080756.1453939-2-ryan.roberts@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Transparent Contiguous PTEs for User Mappings | expand |
On 02.02.24 09:07, Ryan Roberts wrote: > set_ptes() spec implies that it can only be used to set a present pte > because it interprets the PFN field to increment it. However, > set_pte_at() has been implemented on top of set_ptes() since set_ptes() > was introduced, and set_pte_at() allows setting a pte to a not-present > state. So clarify the spec to state that when nr==1, new state of pte > may be present or not present. When nr>1, new state of all ptes must be > present. > > While we are at it, tighten the spec to set requirements around the > initial state of ptes; when nr==1 it may be either present or > not-present. But when nr>1 all ptes must initially be not-present. All > set_ptes() callsites already conform to this requirement. Stating it > explicitly is useful because it allows for a simplification to the > upcoming arm64 contpte implementation. > > Signed-off-by: Ryan Roberts <ryan.roberts@arm.com> > --- > include/linux/pgtable.h | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h > index f0feae7f89fb..5e7eaf8f2b97 100644 > --- a/include/linux/pgtable.h > +++ b/include/linux/pgtable.h > @@ -229,6 +229,10 @@ static inline pte_t pte_next_pfn(pte_t pte) > * @pte: Page table entry for the first page. > * @nr: Number of pages to map. > * > + * When nr==1, initial state of pte may be present or not present, and new state > + * may be present or not present. When nr>1, initial state of all ptes must be > + * not present, and new state must be present. > + * > * May be overridden by the architecture, or the architecture can define > * set_pte() and PFN_PTE_SHIFT. > * Acked-by: David Hildenbrand <david@redhat.com>
diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h index f0feae7f89fb..5e7eaf8f2b97 100644 --- a/include/linux/pgtable.h +++ b/include/linux/pgtable.h @@ -229,6 +229,10 @@ static inline pte_t pte_next_pfn(pte_t pte) * @pte: Page table entry for the first page. * @nr: Number of pages to map. * + * When nr==1, initial state of pte may be present or not present, and new state + * may be present or not present. When nr>1, initial state of all ptes must be + * not present, and new state must be present. + * * May be overridden by the architecture, or the architecture can define * set_pte() and PFN_PTE_SHIFT. *
set_ptes() spec implies that it can only be used to set a present pte because it interprets the PFN field to increment it. However, set_pte_at() has been implemented on top of set_ptes() since set_ptes() was introduced, and set_pte_at() allows setting a pte to a not-present state. So clarify the spec to state that when nr==1, new state of pte may be present or not present. When nr>1, new state of all ptes must be present. While we are at it, tighten the spec to set requirements around the initial state of ptes; when nr==1 it may be either present or not-present. But when nr>1 all ptes must initially be not-present. All set_ptes() callsites already conform to this requirement. Stating it explicitly is useful because it allows for a simplification to the upcoming arm64 contpte implementation. Signed-off-by: Ryan Roberts <ryan.roberts@arm.com> --- include/linux/pgtable.h | 4 ++++ 1 file changed, 4 insertions(+)