Skip to contentSkip to conversation

misc dead code removals in arch/* - mostly asm/pgtable.h

PATCH New Al Viro 5 participants 11 messages Sep 11, 2025 – Sep 15, 2025

Subsystems (7)
lore
Share & tools
lore

Al Viro

author
#0 lore raw

PATCH 1/1 misc dead code removals in arch/* - mostly asm/pgtable.h

Several old patches that had been bouncing around in
my tree for a while. This stuff sits in
git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git #work.misc if any architecture tree would like to pick some of those - just yell, I'll be only glad to get that off my hands. Anything left unclaimed will go to Linus come next window, so if you have objections, please say so.
Individual patches in followups.

Shortlog:
csky: remove BS check for FAULT_FLAG_ALLOW_RETRY PAGE_PTR() had been last used outside of arch/* in 1.1.94 SET_PAGE_DIR() users had been gone since 2.3.12pre1
alpha: get rid of the remnants of BAD_PAGE and friends kill FIRST_USER_PGD_NR
alpha: unobfuscate _PAGE_P() definition

Diffstat:

 arch/alpha/include/asm/pgtable.h      | 25 +------------------------
 arch/alpha/mm/init.c                  | 27 ---------------------------
 arch/csky/mm/fault.c                  |  2 +-
 arch/m68k/include/asm/pgtable_mm.h    | 10 ----------
 arch/microblaze/include/asm/pgtable.h |  1 -
 arch/openrisc/include/asm/pgtable.h   | 17 -----------------
 arch/xtensa/include/asm/pgtable.h     |  1 -
 7 files changed, 2 insertions(+), 81 deletions(-)
author
#1 lore raw

PATCH 1/6 csky: remove BS check for FAULT_FLAG_ALLOW_RETRY

flags are initialized as FAULT_FLAG_DEFAULT, and the only thing done to that afterwards is |=; since FAULT_FLAG_DEFAULT already includes FAULT_FLAG_ALLOW_RETRY, it's guaranteed to remain there all along.

---
 arch/csky/mm/fault.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/csky/mm/fault.c +1 -1
index a885518ce1dd..a6ca7dff4215 100644
@@ -277,7 +277,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs)
 	if (fault & VM_FAULT_COMPLETED)
 		return;
 
-	if (unlikely((fault & VM_FAULT_RETRY) && (flags & FAULT_FLAG_ALLOW_RETRY))) {
+	if (unlikely(fault & VM_FAULT_RETRY)) {
 		flags |= FAULT_FLAG_TRIED;
 
 		/*
Signature · 1 line
2.47.2
maintainer Reviewed-by on v1 1/6
#2 lore raw

Re: [PATCH 1/6] csky: remove BS check for FAULT_FLAG_ALLOW_RETRY

Quoted 15 lines · Al Viro

flags are initialized as FAULT_FLAG_DEFAULT, and the only thing done to that afterwards is |=; since FAULT_FLAG_DEFAULT already includes FAULT_FLAG_ALLOW_RETRY, it's guaranteed to remain there all along.

---
 arch/csky/mm/fault.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/csky/mm/fault.c +0 -0
index a885518ce1dd..a6ca7dff4215 100644

arch/csky/mm/fault.c asmlinkage void do_page_fault(struct pt_regs *regs) · line 280

Quoted 5 lines
arch/csky/mm/fault.c +1 -1
@@ -277,7 +277,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs)
        if (fault & VM_FAULT_COMPLETED)
                return;
 
-       if (unlikely((fault & VM_FAULT_RETRY) && (flags & FAULT_FLAG_ALLOW_RETRY))) {
+       if (unlikely(fault & VM_FAULT_RETRY)) {

Yes, FAULT_FLAG_ALLOW_RETRY is unnecessary.

LGTM!

Quoted 6 lines
arch/csky/mm/fault.c +0 -1
                flags |= FAULT_FLAG_TRIED;
 
                /*
--

2.47.2

Signature · 2 lines
Best Regards
 Guo Ren
author
#3 lore raw

PATCH 2/6 PAGE_PTR() had been last used outside of arch/* in 1.1.94

In reply to Al Viro

.. and in arch/* - circa 2.2.7.

---
 arch/alpha/include/asm/pgtable.h    | 13 -------------
 arch/m68k/include/asm/pgtable_mm.h  | 10 ----------
 arch/openrisc/include/asm/pgtable.h | 14 --------------
 3 files changed, 37 deletions(-)
arch/alpha/include/asm/pgtable.h +0 -13
index 44e7aedac6e8..ae2bdbeec91c 100644
@@ -141,19 +141,6 @@ extern unsigned long __zero_page(void);
 #define BAD_PAGE	__bad_page()
 #define ZERO_PAGE(vaddr)	(virt_to_page(ZERO_PGE))
 
-/* number of bits that fit into a memory pointer */
-#define BITS_PER_PTR			(8*sizeof(unsigned long))
-
-/* to align the pointer to a pointer address */
-#define PTR_MASK			(~(sizeof(void*)-1))
-
-/* sizeof(void*)==1<<SIZEOF_PTR_LOG2 */
-#define SIZEOF_PTR_LOG2			3
-
-/* to find an entry in a page-table */
-#define PAGE_PTR(address)		\
-  ((unsigned long)(address)>>(PAGE_SHIFT-SIZEOF_PTR_LOG2)&PTR_MASK&~PAGE_MASK)
-
 /*
  * On certain platforms whose physical address space can overlap KSEG,
  * namely EV6 and above, we must re-twiddle the physaddr to restore the
arch/m68k/include/asm/pgtable_mm.h +0 -10
index 62f2ff4e6799..bba64a9c49ac 100644
@@ -119,16 +119,6 @@ extern void *empty_zero_page;
  */
 #define ZERO_PAGE(vaddr)	(virt_to_page(empty_zero_page))
 
-/* number of bits that fit into a memory pointer */
-#define BITS_PER_PTR			(8*sizeof(unsigned long))
-
-/* to align the pointer to a pointer address */
-#define PTR_MASK			(~(sizeof(void*)-1))
-
-/* sizeof(void*)==1<<SIZEOF_PTR_LOG2 */
-/* 64-bit machines, beware!  SRB. */
-#define SIZEOF_PTR_LOG2			       2
-
 extern void kernel_set_cachemode(void *addr, unsigned long size, int cmode);
 
 /*
arch/openrisc/include/asm/pgtable.h +0 -14
index d33702831505..138f46fc838b 100644
@@ -183,20 +183,6 @@ extern void paging_init(void);
 extern unsigned long empty_zero_page[2048];
 #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page))
 
-/* number of bits that fit into a memory pointer */
-#define BITS_PER_PTR			(8*sizeof(unsigned long))
-
-/* to align the pointer to a pointer address */
-#define PTR_MASK			(~(sizeof(void *)-1))
-
-/* sizeof(void*)==1<<SIZEOF_PTR_LOG2 */
-/* 64-bit machines, beware!  SRB. */
-#define SIZEOF_PTR_LOG2			2
-
-/* to find an entry in a page-table */
-#define PAGE_PTR(address) \
-((unsigned long)(address)>>(PAGE_SHIFT-SIZEOF_PTR_LOG2)&PTR_MASK&~PAGE_MASK)
-
 /* to set the page-dir */
 #define SET_PAGE_DIR(tsk, pgdir)
 
Signature · 1 line
2.47.2
maintainer Reviewed-by Acked-by on v1 2/6
#4 lore raw

Re: [PATCH 2/6][alpha,m68k,openrisc] PAGE_PTR() had been last used outside of arch/* in 1.1.94

Quoted 7 lines · Al Viro

.. and in arch/* - circa 2.2.7.

---
 arch/alpha/include/asm/pgtable.h    | 13 -------------
 arch/m68k/include/asm/pgtable_mm.h  | 10 ----------
 arch/openrisc/include/asm/pgtable.h | 14 --------------

(I would have just taken it if it wasn't mixed with non-m68k stuff ;-)

Gr{oetje,eeting}s,

Geert

Signature · 5 lines
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
author
#5 lore raw

PATCH 3/6 SET_PAGE_DIR() users had been gone since 2.3.12pre1

In reply to Al Viro
---
 arch/openrisc/include/asm/pgtable.h | 3 ---
 1 file changed, 3 deletions(-)
arch/openrisc/include/asm/pgtable.h +0 -3
index 138f46fc838b..b218050e2f6d 100644
@@ -183,9 +183,6 @@ extern void paging_init(void);
 extern unsigned long empty_zero_page[2048];
 #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page))
 
-/* to set the page-dir */
-#define SET_PAGE_DIR(tsk, pgdir)
-
 #define pte_none(x)	(!pte_val(x))
 #define pte_present(x)	(pte_val(x) & _PAGE_PRESENT)
 #define pte_clear(mm, addr, xp)	do { pte_val(*(xp)) = 0; } while (0)
Signature · 1 line
2.47.2
author
#6 lore raw

PATCH 4/6 alpha: get rid of the remnants of BAD_PAGE and friends

In reply to Al Viro

unused since 2.4 times...

---
 arch/alpha/include/asm/pgtable.h | 10 ----------
 arch/alpha/mm/init.c             | 27 ---------------------------
 2 files changed, 37 deletions(-)
arch/alpha/include/asm/pgtable.h +0 -10
index ae2bdbeec91c..84014e9be504 100644
@@ -126,19 +126,9 @@ struct vm_area_struct;
 #define pgprot_noncached(prot)	(prot)
 
 /*
- * BAD_PAGETABLE is used when we need a bogus page-table, while
- * BAD_PAGE is used for a bogus page.
- *
  * ZERO_PAGE is a global shared page that is always zero:  used
  * for zero-mapped memory areas etc..
  */
-extern pte_t __bad_page(void);
-extern pmd_t * __bad_pagetable(void);
-
-extern unsigned long __zero_page(void);
-
-#define BAD_PAGETABLE	__bad_pagetable()
-#define BAD_PAGE	__bad_page()
 #define ZERO_PAGE(vaddr)	(virt_to_page(ZERO_PGE))
 
 /*
arch/alpha/mm/init.c +0 -27
index 2d491b8cdab9..4c5ab9cd8a0a 100644
@@ -60,33 +60,6 @@ pgd_alloc(struct mm_struct *mm)
 }
 
 
-/*
- * BAD_PAGE is the page that is used for page faults when linux
- * is out-of-memory. Older versions of linux just did a
- * do_exit(), but using this instead means there is less risk
- * for a process dying in kernel mode, possibly leaving an inode
- * unused etc..
- *
- * BAD_PAGETABLE is the accompanying page-table: it is initialized
- * to point to BAD_PAGE entries.
- *
- * ZERO_PAGE is a special page that is used for zero-initialized
- * data and COW.
- */
-pmd_t *
-__bad_pagetable(void)
-{
-	memset(absolute_pointer(EMPTY_PGT), 0, PAGE_SIZE);
-	return (pmd_t *) EMPTY_PGT;
-}
-
-pte_t
-__bad_page(void)
-{
-	memset(absolute_pointer(EMPTY_PGE), 0, PAGE_SIZE);
-	return pte_mkdirty(mk_pte(virt_to_page(EMPTY_PGE), PAGE_SHARED));
-}
-
 static inline unsigned long
 load_PCB(struct pcb_struct *pcb)
 {
Signature · 1 line
2.47.2
author
#7 lore raw

PATCH 5/6 kill FIRST_USER_PGD_NR

In reply to Al Viro

dead since 2005, time to bury the body...

---
 arch/microblaze/include/asm/pgtable.h | 1 -
 arch/xtensa/include/asm/pgtable.h     | 1 -
 2 files changed, 2 deletions(-)
arch/microblaze/include/asm/pgtable.h +0 -1
index bae1abfa6f6b..ec10ec9ca639 100644
@@ -99,7 +99,6 @@ extern pte_t *va_to_pte(unsigned long address);
 #define PTRS_PER_PGD	(1 << (32 - PGDIR_SHIFT))
 
 #define USER_PTRS_PER_PGD	(TASK_SIZE / PGDIR_SIZE)
-#define FIRST_USER_PGD_NR	0
 
 #define USER_PGD_PTRS (PAGE_OFFSET >> PGDIR_SHIFT)
 #define KERNEL_PGD_PTRS (PTRS_PER_PGD-USER_PGD_PTRS)
arch/xtensa/include/asm/pgtable.h +0 -1
index d6eb695f2b26..50a136213b2b 100644
@@ -58,7 +58,6 @@
 #define PTRS_PER_PTE_SHIFT	10
 #define PTRS_PER_PGD		1024
 #define USER_PTRS_PER_PGD	(TASK_SIZE/PGDIR_SIZE)
-#define FIRST_USER_PGD_NR	(FIRST_USER_ADDRESS >> PGDIR_SHIFT)
 
 #ifdef CONFIG_MMU
 /*
Signature · 1 line
2.47.2
maintainer Reviewed-by on v1 5/6
#8 lore raw

Re: [PATCH 5/6][microblaze,xtensa] kill FIRST_USER_PGD_NR

Quoted 8 lines · Al Viro

dead since 2005, time to bury the body...

---
 arch/microblaze/include/asm/pgtable.h | 1 -
 arch/xtensa/include/asm/pgtable.h     | 1 -
 2 files changed, 2 deletions(-)
Signature · 2 lines
Thanks.
-- Max
maintainer Reviewed-by on v1 5/6
#9 lore raw

Re: [PATCH 5/6][microblaze,xtensa] kill FIRST_USER_PGD_NR

In reply to Al Viro
Quoted 5 lines · Al Viro

dead since 2005, time to bury the body...

---
  arch/microblaze/include/asm/pgtable.h | 1 -

Thanks
Michal

Signature · 6 lines
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Xilinx Microblaze
Maintainer of Linux kernel - Xilinx Zynq ARM and ZynqMP/Versal ARM64 SoCs
U-Boot custodian - Xilinx Microblaze/Zynq/ZynqMP/Versal/Versal NET SoCs
TF-A maintainer - Xilinx ZynqMP/Versal/Versal NET SoCs
author
#10 lore raw

PATCH 6/6 alpha: unobfuscate _PAGE_P() definition

In reply to Al Viro

Way, way back it used to be

	_PAGE_NORMAL((x) | ((x & _PAGE_FOW) ? 0 : _PAGE_FOW | _PAGE_COW))
Then (in 1.3.54) _PAGE_COW had died.  Result:
	_PAGE_NORMAL((x) | ((x & _PAGE_FOW) ? 0 : _PAGE_FOW))
which is somewhat... obscure.  What it does is simply
	_PAGE_NORMAL((x) | _PAGE_FOW)

and IMO that's easier to follow.

---
 arch/alpha/include/asm/pgtable.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/alpha/include/asm/pgtable.h +1 -1
index 84014e9be504..90e7a9539102 100644
@@ -107,7 +107,7 @@ struct vm_area_struct;
 
 #define _PAGE_NORMAL(x) __pgprot(_PAGE_VALID | __ACCESS_BITS | (x))
 
-#define _PAGE_P(x) _PAGE_NORMAL((x) | (((x) & _PAGE_FOW)?0:_PAGE_FOW))
+#define _PAGE_P(x) _PAGE_NORMAL((x) | _PAGE_FOW)
 #define _PAGE_S(x) _PAGE_NORMAL(x)
 
 /*
Signature · 1 line
2.47.2