On Fri, Mar 20, 2026 at 02:08:12PM -0700, Nathan Chancellor wrote:
> Hi Lorenzo,
>
> On Thu, Mar 19, 2026 at 06:23:39PM +0000, Lorenzo Stoakes (Oracle) wrote:
> > A user can invoke mmap_action_map_kernel_pages() to specify that the
> > mapping should map kernel pages starting from desc->start of a specified
> > number of pages specified in an array.
> >
> > In order to implement this, adjust mmap_action_prepare() to be able to
> > return an error code, as it makes sense to assert that the specified
> > parameters are valid as quickly as possible as well as updating the VMA
> > flags to include VMA_MIXEDMAP_BIT as necessary.
> >
> > This provides an mmap_prepare equivalent of vm_insert_pages().  We
> > additionally update the existing vm_insert_pages() code to use
> > range_in_vma() and add a new range_in_vma_desc() helper function for the
> > mmap_prepare case, sharing the code between the two in range_is_subset().
> >
> > We add both mmap_action_map_kernel_pages() and
> > mmap_action_map_kernel_pages_full() to allow for both partial and full VMA
> > mappings.
> >
> > We update the documentation to reflect the new features.
> >
> > Finally, we update the VMA tests accordingly to reflect the changes.
> >
> > Reviewed-by: Suren Baghdasaryan <[email protected]>
> > Signed-off-by: Lorenzo Stoakes (Oracle) <[email protected]>
> ...
> > diff --git a/mm/util.c b/mm/util.c
> > index 8cf59267a9ac..682d0d24e1c6 100644
> > --- a/mm/util.c
> > +++ b/mm/util.c
> > @@ -1446,6 +1446,8 @@ int mmap_action_prepare(struct vm_area_desc *desc)
> >             return io_remap_pfn_range_prepare(desc);
> >     case MMAP_SIMPLE_IO_REMAP:
> >             return simple_ioremap_prepare(desc);
> > +   case MMAP_MAP_KERNEL_PAGES:
> > +           return map_kernel_pages_prepare(desc);
> >     }
> >
> >     WARN_ON_ONCE(1);
> > @@ -1476,6 +1478,9 @@ int mmap_action_complete(struct vm_area_struct *vma,
> >     case MMAP_REMAP_PFN:
> >             err = remap_pfn_range_complete(vma, action);
> >             break;
> > +   case MMAP_MAP_KERNEL_PAGES:
> > +           err = map_kernel_pages_complete(vma, action);
> > +           break;
> >     case MMAP_IO_REMAP_PFN:
> >     case MMAP_SIMPLE_IO_REMAP:
> >             /* Should have been delegated. */
> > @@ -1497,6 +1502,7 @@ int mmap_action_prepare(struct vm_area_desc *desc)
> >     case MMAP_REMAP_PFN:
> >     case MMAP_IO_REMAP_PFN:
> >     case MMAP_SIMPLE_IO_REMAP:
> > +   case MMAP_MAP_KERNEL_PAGES:
> >             WARN_ON_ONCE(1); /* nommu cannot handle these. */
> >             break;
> >     }
>
> Not sure if it has been reported/addressed yet but it looks like
> mmap_action_complete() was missed here, as pointed out by clang:
>
>   $ make -skj"$(nproc)" ARCH=arm LLVM=1 mrproper allnoconfig mm/util.o
>   mm/util.c:1520:10: warning: enumeration value 'MMAP_MAP_KERNEL_PAGES' not 
> handled in switch [-Wswitch]
>    1520 |         switch (action->type) {
>         |                 ^~~~~~~~~~~~
>
> I assume
>
> diff --git a/mm/util.c b/mm/util.c
> index 682d0d24e1c6..c41c119a5a74 100644
> --- a/mm/util.c
> +++ b/mm/util.c
> @@ -1523,6 +1523,7 @@ int mmap_action_complete(struct vm_area_struct *vma,
>       case MMAP_REMAP_PFN:
>       case MMAP_IO_REMAP_PFN:
>       case MMAP_SIMPLE_IO_REMAP:
> +     case MMAP_MAP_KERNEL_PAGES:
>               WARN_ON_ONCE(1); /* nommu cannot handle this. */
>
>               err = -EINVAL;
> --
>
> should be the fix?
>
> Cheers,
> Nathan

Thanks, will fix, working on a respin now anyway :)

Cheers, Lorenzo

Reply via email to