[PATCH v7 01/15] genpt: Generic Page Table base API
Pasha Tatashin
pasha.tatashin at soleen.com
Sat Oct 25 08:13:28 PDT 2025
On Thu, Oct 23, 2025 at 2:21 PM Jason Gunthorpe <jgg at nvidia.com> wrote:
>
> The generic API is intended to be separated from the implementation of
> page table algorithms. It contains only accessors for walking and
> manipulating the table and helpers that are useful for building an
> implementation. Memory management is not in the generic API, but part of
> the implementation.
>
> Using a multi-compilation approach the implementation module would include
> headers in this order:
>
> common.h
> defs_FMT.h
> pt_defs.h
> FMT.h
> pt_common.h
> IMPLEMENTATION.h
>
> Where each compilation unit would have a combination of FMT and
> IMPLEMENTATION to produce a per-format per-implementation module.
>
> The API is designed so that the format headers have minimal logic, and
> default implementations are provided if the format doesn't include one.
>
> Generally formats provide their code via an inline function using the
> pattern:
>
> static inline FMTpt_XX(..) {}
> #define pt_XX FMTpt_XX
>
> The common code then enforces a function signature so that there is no
> drift in function arguments, or accidental polymorphic functions (as has
> been slightly troublesome in mm). Use of function-like #defines are
> avoided in the format even though many of the functions are small enough.
>
> Provide kdocs for the API surface.
>
> This is enough to implement the 8 initial format variations with all of
> their features:
> * Entries comprised of contiguous blocks of IO PTEs for larger page
> sizes (AMDv1, ARMv8)
> * Multi-level tables, up to 6 levels. Runtime selected top level
> * The size of the top table level can be selected at runtime (ARM's
> concatenated tables)
> * The number of levels in the table can optionally increase dynamically
> during map (AMDv1)
> * Optional leaf entries at any level
> * 32 bit/64 bit virtual and output addresses, using every bit
> * Sign extended addressing (x86)
> * Dirty tracking
>
> A basic simple format takes about 200 lines to declare the require inline
> functions.
>
> Tested-by: Alejandro Jimenez <alejandro.j.jimenez at oracle.com>
> Reviewed-by: Kevin Tian <kevin.tian at intel.com>
> Signed-off-by: Jason Gunthorpe <jgg at nvidia.com>
Reviewed-by: Pasha Tatashin <pasha.tatashin at soleen.com>
More information about the linux-riscv
mailing list