[PATCH] mm: move phys_mem_access_prot_allowed to header

Rosen Penev posted 1 patch 1 month, 2 weeks ago
drivers/char/mem.c      | 6 ------
include/linux/pgtable.h | 8 ++++++++
2 files changed, 8 insertions(+), 6 deletions(-)
[PATCH] mm: move phys_mem_access_prot_allowed to header
Posted by Rosen Penev 1 month, 2 weeks ago
phys_mem_access_prot_allowed is only implemented for X86. For others, it
returns 1. Move it to header to avoid using __weak.

Fixes compilation with make LLVM=1 ARCH=mips

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 drivers/char/mem.c      | 6 ------
 include/linux/pgtable.h | 8 ++++++++
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/char/mem.c b/drivers/char/mem.c
index 5fd421e48c04..ae8449674f46 100644
--- a/drivers/char/mem.c
+++ b/drivers/char/mem.c
@@ -239,12 +239,6 @@ static ssize_t write_mem(struct file *file, const char __user *buf,
 	return written;
 }
 
-int __weak phys_mem_access_prot_allowed(struct file *file,
-	unsigned long pfn, unsigned long size, pgprot_t *vma_prot)
-{
-	return 1;
-}
-
 #ifndef __HAVE_PHYS_MEM_ACCESS_PROT
 
 /*
diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h
index cdd68ed3ae1a..72a7fa388e88 100644
--- a/include/linux/pgtable.h
+++ b/include/linux/pgtable.h
@@ -2154,8 +2154,16 @@ static inline int pmd_free_pte_page(pmd_t *pmd, unsigned long addr)
 #endif
 
 struct file;
+#ifdef CONFIG_X86
 int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn,
 			unsigned long size, pgprot_t *vma_prot);
+#else
+static inline
+int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn,
+			unsigned long size, pgprot_t *vma_prot) {
+	return 1;
+}
+#endif
 
 #ifndef CONFIG_X86_ESPFIX64
 static inline void init_espfix_bsp(void) { }
-- 
2.54.0
Re: [PATCH] mm: move phys_mem_access_prot_allowed to header
Posted by Arnd Bergmann 1 month, 2 weeks ago
On Tue, May 5, 2026, at 03:01, Rosen Penev wrote:
> phys_mem_access_prot_allowed is only implemented for X86. For others, it
> returns 1. Move it to header to avoid using __weak.
>
> Fixes compilation with make LLVM=1 ARCH=mips

Can you describe what exactly goes wrong here on mips?

> @@ -239,12 +239,6 @@ static ssize_t write_mem(struct file *file, const 
> char __user *buf,
>  	return written;
>  }
> 
> -int __weak phys_mem_access_prot_allowed(struct file *file,
> -	unsigned long pfn, unsigned long size, pgprot_t *vma_prot)
> -{
> -	return 1;
> -}
> -

Removing __weak functions is usually an improvement, but I think
we can go further here, see the discussion from last year at

https://lore.kernel.org/all/20250520152030.1499670-1-arnd@kernel.org/#t

     Arnd
Re: [PATCH] mm: move phys_mem_access_prot_allowed to header
Posted by Rosen Penev 1 month, 2 weeks ago
On Mon, May 4, 2026 at 10:54 PM Arnd Bergmann <arnd@arndb.de> wrote:
>
> On Tue, May 5, 2026, at 03:01, Rosen Penev wrote:
> > phys_mem_access_prot_allowed is only implemented for X86. For others, it
> > returns 1. Move it to header to avoid using __weak.
> >
> > Fixes compilation with make LLVM=1 ARCH=mips
>
> Can you describe what exactly goes wrong here on mips?
Cannot find symbol for section 4: .text.phys_mem_access_prot_allowed.
drivers/char/mem.o: failed

It's full of similar errors in drivers/pci/ as well. clang on MIPS
doesn't seem to like __weak.
>
> > @@ -239,12 +239,6 @@ static ssize_t write_mem(struct file *file, const
> > char __user *buf,
> >       return written;
> >  }
> >
> > -int __weak phys_mem_access_prot_allowed(struct file *file,
> > -     unsigned long pfn, unsigned long size, pgprot_t *vma_prot)
> > -{
> > -     return 1;
> > -}
> > -
>
> Removing __weak functions is usually an improvement, but I think
> we can go further here, see the discussion from last year at
>
> https://lore.kernel.org/all/20250520152030.1499670-1-arnd@kernel.org/#t
I hold no opinion on that.
>
>      Arnd