Hi Lorenzo,

On 9/10/25 1:22 PM, Lorenzo Stoakes wrote:

...

> diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
> index 4a441f78340d..ae6c7a0a18a7 100644
> --- a/include/linux/mm_types.h
> +++ b/include/linux/mm_types.h
> @@ -770,6 +770,64 @@ struct pfnmap_track_ctx {
>  };
>  #endif
>  
> +/* What action should be taken after an .mmap_prepare call is complete? */
> +enum mmap_action_type {
> +     MMAP_NOTHING,            /* Mapping is complete, no further action. */
> +     MMAP_REMAP_PFN,          /* Remap PFN range based on desc->remap. */
> +     MMAP_INSERT_MIXED,       /* Mixed map based on desc->mixedmap. */
> +     MMAP_INSERT_MIXED_PAGES, /* Mixed map based on desc->mixedmap_pages. */
> +     MMAP_CUSTOM_ACTION,      /* User-provided hook. */
> +};
> +
> +struct mmap_action {
> +     union {
> +             /* Remap range. */
> +             struct {
> +                     unsigned long addr;
> +                     unsigned long pfn;
> +                     unsigned long size;
> +                     pgprot_t pgprot;
> +             } remap;
> +             /* Insert mixed map. */
> +             struct {
> +                     unsigned long addr;
> +                     unsigned long pfn;
> +                     unsigned long num_pages;
> +             } mixedmap;
> +             /* Insert specific mixed map pages. */
> +             struct {
> +                     unsigned long addr;
> +                     struct page **pages;
> +                     unsigned long num_pages;
> +                     /* kfree pages on completion? */
> +                     bool kfree_pages :1;
> +             } mixedmap_pages;
> +             struct {
> +                     int (*action_hook)(struct vm_area_struct *vma);
> +             } custom;
> +     };
> +     enum mmap_action_type type;
> +
> +     /*
> +      * If specified, this hook is invoked after the selected action has been
> +      * successfully completed. Not that the VMA write lock still held.

A typo that may trip tired eyes: Not -> Note ? (perhaps also "is still held"?)
(also in the duplicate changes to tools/testing/vma/vma_internal.h)

> +      *
> +      * The absolute minimum ought to be done here.
> +      *
> +      * Returns 0 on success, or an error code.
> +      */
> +     int (*success_hook)(struct vm_area_struct *vma);
> +
> +     /*
> +      * If specified, this hook is invoked when an error occurred when
> +      * attempting the selection action.
> +      *
> +      * The hook can return an error code in order to filter the error, but
> +      * it is not valid to clear the error here.
> +      */
> +     int (*error_hook)(int err);
> +};

Reinette



Reply via email to