[PATCH] alloc_tag: hide execmem_vmap() on !MMU

Arnd Bergmann posted 1 patch 3 weeks, 6 days ago
There is a newer version of this series
mm/execmem.c | 2 ++
1 file changed, 2 insertions(+)
[PATCH] alloc_tag: hide execmem_vmap() on !MMU
Posted by Arnd Bergmann 3 weeks, 6 days ago
From: Arnd Bergmann <arnd@arndb.de>

The newly added function fails to link on nommu kernels, but is also
not needed there:

ld.lld-20: error: undefined symbol: __get_vm_area_node
>>> referenced by execmem.c
>>>               mm/execmem.o:(execmem_vmap) in archive vmlinux.a
>>> referenced by execmem.c
>>>               mm/execmem.o:(execmem_vmap) in archive vmlinux.a

Fixes: 57bc3834fb6f ("alloc_tag: populate memory for module tags as needed")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 mm/execmem.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/mm/execmem.c b/mm/execmem.c
index 5c0f9f2d6f83..b04cfece7356 100644
--- a/mm/execmem.c
+++ b/mm/execmem.c
@@ -368,6 +368,7 @@ void execmem_free(void *ptr)
 		vfree(ptr);
 }
 
+#ifdef CONFIG_MMU
 struct vm_struct *execmem_vmap(size_t size)
 {
 	struct execmem_range *range = &execmem_info->ranges[EXECMEM_MODULE_DATA];
@@ -383,6 +384,7 @@ struct vm_struct *execmem_vmap(size_t size)
 
 	return area;
 }
+#endif
 
 void *execmem_update_copy(void *dst, const void *src, size_t size)
 {
-- 
2.39.5
Re: [PATCH] alloc_tag: hide execmem_vmap() on !MMU
Posted by Mike Rapoport 3 weeks, 6 days ago
On Mon, Oct 28, 2024 at 02:18:09PM +0000, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd@arndb.de>
> 
> The newly added function fails to link on nommu kernels, but is also
> not needed there:
> 
> ld.lld-20: error: undefined symbol: __get_vm_area_node
> >>> referenced by execmem.c
> >>>               mm/execmem.o:(execmem_vmap) in archive vmlinux.a
> >>> referenced by execmem.c
> >>>               mm/execmem.o:(execmem_vmap) in archive vmlinux.a
> 
> Fixes: 57bc3834fb6f ("alloc_tag: populate memory for module tags as needed")
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
>  mm/execmem.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/mm/execmem.c b/mm/execmem.c
> index 5c0f9f2d6f83..b04cfece7356 100644
> --- a/mm/execmem.c
> +++ b/mm/execmem.c
> @@ -368,6 +368,7 @@ void execmem_free(void *ptr)
>  		vfree(ptr);
>  }
>  
> +#ifdef CONFIG_MMU
>  struct vm_struct *execmem_vmap(size_t size)
>  {
>  	struct execmem_range *range = &execmem_info->ranges[EXECMEM_MODULE_DATA];
> @@ -383,6 +384,7 @@ struct vm_struct *execmem_vmap(size_t size)
>  
>  	return area;
>  }
> +#endif

Nit: there is already #ifdef CONFIG_MMU block in execmem.c, better to move
execmem_vmap() there

Other than that
  
Acked-by: Mike Rapoport (Microsoft) <rppt@kernel.org>

>  void *execmem_update_copy(void *dst, const void *src, size_t size)
>  {
> -- 
> 2.39.5
> 

-- 
Sincerely yours,
Mike.
Re: [PATCH] alloc_tag: hide execmem_vmap() on !MMU
Posted by Suren Baghdasaryan 3 weeks, 6 days ago
On Mon, Oct 28, 2024 at 7:43 AM Mike Rapoport <rppt@kernel.org> wrote:
>
> On Mon, Oct 28, 2024 at 02:18:09PM +0000, Arnd Bergmann wrote:
> > From: Arnd Bergmann <arnd@arndb.de>
> >
> > The newly added function fails to link on nommu kernels, but is also
> > not needed there:
> >
> > ld.lld-20: error: undefined symbol: __get_vm_area_node
> > >>> referenced by execmem.c
> > >>>               mm/execmem.o:(execmem_vmap) in archive vmlinux.a
> > >>> referenced by execmem.c
> > >>>               mm/execmem.o:(execmem_vmap) in archive vmlinux.a
> >
> > Fixes: 57bc3834fb6f ("alloc_tag: populate memory for module tags as needed")
> > Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> > ---
> >  mm/execmem.c | 2 ++
> >  1 file changed, 2 insertions(+)
> >
> > diff --git a/mm/execmem.c b/mm/execmem.c
> > index 5c0f9f2d6f83..b04cfece7356 100644
> > --- a/mm/execmem.c
> > +++ b/mm/execmem.c
> > @@ -368,6 +368,7 @@ void execmem_free(void *ptr)
> >               vfree(ptr);
> >  }
> >
> > +#ifdef CONFIG_MMU
> >  struct vm_struct *execmem_vmap(size_t size)
> >  {
> >       struct execmem_range *range = &execmem_info->ranges[EXECMEM_MODULE_DATA];
> > @@ -383,6 +384,7 @@ struct vm_struct *execmem_vmap(size_t size)
> >
> >       return area;
> >  }
> > +#endif
>
> Nit: there is already #ifdef CONFIG_MMU block in execmem.c, better to move
> execmem_vmap() there
>
> Other than that
>
> Acked-by: Mike Rapoport (Microsoft) <rppt@kernel.org>

Thanks for the fix but execmem_vmap() is used if
CONFIG_MEM_ALLOC_PROFILING=y. Please give me an hour to post a fix
dealing with that.

>
> >  void *execmem_update_copy(void *dst, const void *src, size_t size)
> >  {
> > --
> > 2.39.5
> >
>
> --
> Sincerely yours,
> Mike.