diff mbox series

mm: add dummy can_do_mlock() helper

Message ID 20190909204201.931830-1-arnd@arndb.de (mailing list archive)
State Not Applicable
Headers show
Series mm: add dummy can_do_mlock() helper | expand

Commit Message

Arnd Bergmann Sept. 9, 2019, 8:41 p.m. UTC
On kernels without CONFIG_MMU, we get a link error for the siw
driver:

drivers/infiniband/sw/siw/siw_mem.o: In function `siw_umem_get':
siw_mem.c:(.text+0x4c8): undefined reference to `can_do_mlock'

This is probably not the only driver that needs the function
and could otherwise build correctly without CONFIG_MMU, so
add a dummy variant that always returns false.

Fixes: 2251334dcac9 ("rdma/siw: application buffer management")
Suggested-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 include/linux/mm.h | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Michal Hocko Sept. 10, 2019, 7:10 a.m. UTC | #1
On Mon 09-09-19 22:41:40, Arnd Bergmann wrote:
> On kernels without CONFIG_MMU, we get a link error for the siw
> driver:
> 
> drivers/infiniband/sw/siw/siw_mem.o: In function `siw_umem_get':
> siw_mem.c:(.text+0x4c8): undefined reference to `can_do_mlock'
> 
> This is probably not the only driver that needs the function
> and could otherwise build correctly without CONFIG_MMU, so
> add a dummy variant that always returns false.
> 
> Fixes: 2251334dcac9 ("rdma/siw: application buffer management")
> Suggested-by: Jason Gunthorpe <jgg@mellanox.com>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Makes sense
Acked-by: Michal Hocko <mhocko@suse.com>

but IB on nonMMU? Whut? Is there any HW that actually supports this?
Just wondering...

> ---
>  include/linux/mm.h | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index 66f296181bcc..cc292273e6ba 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -1424,7 +1424,11 @@ extern void pagefault_out_of_memory(void);
>  
>  extern void show_free_areas(unsigned int flags, nodemask_t *nodemask);
>  
> +#ifdef CONFIG_MMU
>  extern bool can_do_mlock(void);
> +#else
> +static inline bool can_do_mlock(void) { return false; }
> +#endif
>  extern int user_shm_lock(size_t, struct user_struct *);
>  extern void user_shm_unlock(size_t, struct user_struct *);
>  
> -- 
> 2.20.0
>
Arnd Bergmann Sept. 10, 2019, 7:31 a.m. UTC | #2
On Tue, Sep 10, 2019 at 9:10 AM Michal Hocko <mhocko@kernel.org> wrote:

> but IB on nonMMU? Whut? Is there any HW that actually supports this?
> Just wondering...

Probably not, but I can't think of a good reason to completely disable
it in Kconfig.
Almost everything can be built without MMU at the moment, but the subset
of things that are actually useful is hard to know.

         Arnd
Jason Gunthorpe Sept. 10, 2019, 8:40 a.m. UTC | #3
On Tue, Sep 10, 2019 at 09:10:30AM +0200, Michal Hocko wrote:
> On Mon 09-09-19 22:41:40, Arnd Bergmann wrote:
> > On kernels without CONFIG_MMU, we get a link error for the siw
> > driver:
> > 
> > drivers/infiniband/sw/siw/siw_mem.o: In function `siw_umem_get':
> > siw_mem.c:(.text+0x4c8): undefined reference to `can_do_mlock'
> > 
> > This is probably not the only driver that needs the function
> > and could otherwise build correctly without CONFIG_MMU, so
> > add a dummy variant that always returns false.
> > 
> > Fixes: 2251334dcac9 ("rdma/siw: application buffer management")
> > Suggested-by: Jason Gunthorpe <jgg@mellanox.com>
> > Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> 
> Makes sense
> Acked-by: Michal Hocko <mhocko@suse.com>
> 
> but IB on nonMMU? Whut? Is there any HW that actually supports this?
> Just wondering...

I've never heard of anyone doing this configuration, and I don't
really know much about nommu to comment if it could even potentially
work or not..

Jason
diff mbox series

Patch

diff --git a/include/linux/mm.h b/include/linux/mm.h
index 66f296181bcc..cc292273e6ba 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -1424,7 +1424,11 @@  extern void pagefault_out_of_memory(void);
 
 extern void show_free_areas(unsigned int flags, nodemask_t *nodemask);
 
+#ifdef CONFIG_MMU
 extern bool can_do_mlock(void);
+#else
+static inline bool can_do_mlock(void) { return false; }
+#endif
 extern int user_shm_lock(size_t, struct user_struct *);
 extern void user_shm_unlock(size_t, struct user_struct *);