Skip to content

[PW_SID:1053085] arch, mm: consolidate empty_zero_page#1472

Closed
linux-riscv-bot wants to merge 5 commits intoworkflowfrom
pw1053085
Closed

[PW_SID:1053085] arch, mm: consolidate empty_zero_page#1472
linux-riscv-bot wants to merge 5 commits intoworkflowfrom
pw1053085

Conversation

@linux-riscv-bot
Copy link

PR for series 1053085 applied to workflow

Name: arch, mm: consolidate empty_zero_page
URL: https://patchwork.kernel.org/project/linux-riscv/list/?series=1053085
Version: 3

Linux RISC-V bot and others added 5 commits February 12, 2026 21:04
nommu architectures have empty_zero_page and define ZERO_PAGE() and
although they don't really use it to populate page tables, there is no
reason to hardwire !MMU implementation of is_zero_pfn() and my_zero_pfn()
to 0.

Drop #ifdef CONFIG_MMU around implementations of is_zero_pfn() and
my_zero_pfn() and remove !MMU version.

While on it, make zero_pfn __ro_after_init.

Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
Acked-by: David Hildenbrand (Arm) <david@kernel.org>
Acked-by: Liam R. Howlett <Liam.Howlett@oracle.com>
Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
my_zero_pfn() is a silly name.

Rename zero_pfn variable to zero_page_pfn and my_zero_pfn() function to
zero_pfn().

While on it, move extern declarations of zero_page_pfn outside the
functions that use it and add a comment about what ZERO_PAGE is.

Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
Acked-by: David Hildenbrand (Arm) <david@kernel.org>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Reviewed-by: Liam R. Howlett <Liam.Howlett@oracle.com>
Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
Reduce 22 declarations of empty_zero_page to 3 and 23 declarations of
ZERO_PAGE() to 4.

Every architecture defines empty_zero_page that way or another, but for the
most of them it is always a page aligned page in BSS and most definitions
of ZERO_PAGE do virt_to_page(empty_zero_page).

Move Linus vetted x86 definition of empty_zero_page and ZERO_PAGE() to the
core MM and drop these definitions in architectures that do not implement
colored zero page (MIPS and s390).

ZERO_PAGE() remains a macro because turning it to a wrapper for a static
inline causes severe pain in header dependencies.

For the most part the change is mechanical, with these being noteworthy:

* alpha: aliased empty_zero_page with ZERO_PGE that was also used for boot
  parameters. Switching to a generic empty_zero_page removes the aliasing
  and keeps ZERO_PGE for boot parameters only
* arm64: uses __pa_symbol() in ZERO_PAGE() so that definition of
  ZERO_PAGE() is kept intact.
* m68k/parisc/um: allocated empty_zero_page from memblock,
  although they do not support zero page coloring and having it in BSS
  will work fine.
* sparc64 can have empty_zero_page in BSS rather allocate it, but it
  can't use virt_to_page() for BSS. Keep it's definition of ZERO_PAGE()
  but instead of allocating it, make mem_map_zero point to
  empty_zero_page.
* sh: used empty_zero_page for boot parameters at the very early boot.
  Rename the parameters page to boot_params_page and let sh use the generic
  empty_zero_page.
* hexagon: had an amusing comment about empty_zero_page

	/* A handy thing to have if one has the RAM. Declared in head.S */

  that unfortunately had to go :)

Acked-by: Helge Deller <deller@gmx.de>   # parisc
Tested-by: Helge Deller <deller@gmx.de>  # parisc
Reviewed-by: Christophe Leroy (CS GROUP) <chleroy@kernel.org>
Acked-by: Dave Hansen <dave.hansen@linux.intel.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
Acked-by: Magnus Lindholm <linmag7@gmail.com>
Acked-by: Dinh Nguyen <dinguyen@kernel.org>
Acked-by: Andreas Larsson <andreas@gaisler.com> #sparc
Acked-by: David Hildenbrand (Arm) <david@kernel.org>
Acked-by: Liam R. Howlett <Liam.Howlett@oracle.com>
Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
For most architectures every invocation of ZERO_PAGE() does
virt_to_page(empty_zero_page). But empty_zero_page is in BSS and it is
enough to get its struct page once at initialization time and then use
it whenever a zero page should be accessed.

Add yet another __zero_page variable that will be initialized as
virt_to_page(empty_zero_page) for most architectures in a weak
arch_setup_zero_pages() function.

For architectures that use colored zero pages (MIPS and s390) rename their
setup_zero_pages() to arch_setup_zero_pages() and make it global rather
than static.

For architectures that cannot use virt_to_page() for BSS (arm64 and
sparc64) add override of arch_setup_zero_pages().

Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
Acked-by: David Hildenbrand (Arm) <david@kernel.org>
Acked-by: Liam R. Howlett <Liam.Howlett@oracle.com>
Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
@linux-riscv-bot
Copy link
Author

Patch 1: "[v3,1/4] mm: don't special case !MMU for is_zero_pfn() and my_zero_pfn()"
build-rv32-defconfig
Desc: Builds riscv32 defconfig
Duration: 121.05 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 1: "[v3,1/4] mm: don't special case !MMU for is_zero_pfn() and my_zero_pfn()"
build-rv64-clang-allmodconfig
Desc: Builds riscv64 allmodconfig with Clang, and checks for errors and added warnings
Duration: 2209.48 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 1: "[v3,1/4] mm: don't special case !MMU for is_zero_pfn() and my_zero_pfn()"
build-rv64-gcc-allmodconfig
Desc: Builds riscv64 allmodconfig with GCC, and checks for errors and added warnings
Duration: 2945.77 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 1: "[v3,1/4] mm: don't special case !MMU for is_zero_pfn() and my_zero_pfn()"
build-rv64-nommu-k210-defconfig
Desc: Builds riscv64 defconfig with NOMMU for K210
Duration: 27.18 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 1: "[v3,1/4] mm: don't special case !MMU for is_zero_pfn() and my_zero_pfn()"
build-rv64-nommu-k210-virt
Desc: Builds riscv64 defconfig with NOMMU for the virt platform
Duration: 28.35 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 1: "[v3,1/4] mm: don't special case !MMU for is_zero_pfn() and my_zero_pfn()"
checkpatch
Desc: Runs checkpatch.pl on the patch
Duration: 1.40 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 1: "[v3,1/4] mm: don't special case !MMU for is_zero_pfn() and my_zero_pfn()"
dtb-warn-rv64
Desc: Checks for Device Tree warnings/errors
Duration: 83.35 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 1: "[v3,1/4] mm: don't special case !MMU for is_zero_pfn() and my_zero_pfn()"
header-inline
Desc: Detects static functions without inline keyword in header files
Duration: 0.23 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 1: "[v3,1/4] mm: don't special case !MMU for is_zero_pfn() and my_zero_pfn()"
kdoc
Desc: Detects for kdoc errors
Duration: 1.00 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 1: "[v3,1/4] mm: don't special case !MMU for is_zero_pfn() and my_zero_pfn()"
module-param
Desc: Detect module_param changes
Duration: 0.28 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 1: "[v3,1/4] mm: don't special case !MMU for is_zero_pfn() and my_zero_pfn()"
verify-fixes
Desc: Verifies that the Fixes: tags exist
Duration: 0.21 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 1: "[v3,1/4] mm: don't special case !MMU for is_zero_pfn() and my_zero_pfn()"
verify-signedoff
Desc: Verifies that Signed-off-by: tags are correct
Duration: 0.29 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 2: "[v3,2/4] mm: rename my_zero_pfn() to zero_pfn()"
build-rv32-defconfig
Desc: Builds riscv32 defconfig
Duration: 120.67 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 2: "[v3,2/4] mm: rename my_zero_pfn() to zero_pfn()"
build-rv64-clang-allmodconfig
Desc: Builds riscv64 allmodconfig with Clang, and checks for errors and added warnings
Duration: 2197.22 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 2: "[v3,2/4] mm: rename my_zero_pfn() to zero_pfn()"
build-rv64-gcc-allmodconfig
Desc: Builds riscv64 allmodconfig with GCC, and checks for errors and added warnings
Duration: 2946.01 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 2: "[v3,2/4] mm: rename my_zero_pfn() to zero_pfn()"
build-rv64-nommu-k210-defconfig
Desc: Builds riscv64 defconfig with NOMMU for K210
Duration: 27.08 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 2: "[v3,2/4] mm: rename my_zero_pfn() to zero_pfn()"
build-rv64-nommu-k210-virt
Desc: Builds riscv64 defconfig with NOMMU for the virt platform
Duration: 27.89 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 2: "[v3,2/4] mm: rename my_zero_pfn() to zero_pfn()"
checkpatch
Desc: Runs checkpatch.pl on the patch
Duration: 3.65 seconds
Result: WARNING
Output:

CHECK: Alignment should match open parenthesis
#145: FILE: mm/memory.c:5219:
+		entry = pte_mkspecial(pfn_pte(zero_pfn(vmf->address),
 						vma->vm_page_prot));

CHECK: Alignment should match open parenthesis
#158: FILE: mm/migrate.c:325:
+	newpte = pte_mkspecial(pfn_pte(zero_pfn(pvmw->address),
 					pvmw->vma->vm_page_prot));

total: 0 errors, 0 warnings, 2 checks, 136 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

Commit 84e5704696fe ("mm: rename my_zero_pfn() to zero_pfn()") has style problems, please review.

NOTE: Ignored message types: ALLOC_SIZEOF_STRUCT CAMELCASE COMMIT_LOG_LONG_LINE GIT_COMMIT_ID MACRO_ARG_REUSE NO_AUTHOR_SIGN_OFF

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.
total: 0 errors, 0 warnings, 2 checks, 136 lines checked
CHECK: Alignment should match open parenthesis


@linux-riscv-bot
Copy link
Author

Patch 2: "[v3,2/4] mm: rename my_zero_pfn() to zero_pfn()"
dtb-warn-rv64
Desc: Checks for Device Tree warnings/errors
Duration: 82.69 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 2: "[v3,2/4] mm: rename my_zero_pfn() to zero_pfn()"
header-inline
Desc: Detects static functions without inline keyword in header files
Duration: 0.24 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 2: "[v3,2/4] mm: rename my_zero_pfn() to zero_pfn()"
kdoc
Desc: Detects for kdoc errors
Duration: 1.05 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 2: "[v3,2/4] mm: rename my_zero_pfn() to zero_pfn()"
module-param
Desc: Detect module_param changes
Duration: 2.54 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 2: "[v3,2/4] mm: rename my_zero_pfn() to zero_pfn()"
verify-fixes
Desc: Verifies that the Fixes: tags exist
Duration: 0.22 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 2: "[v3,2/4] mm: rename my_zero_pfn() to zero_pfn()"
verify-signedoff
Desc: Verifies that Signed-off-by: tags are correct
Duration: 0.29 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 4: "[v3,4/4] mm: cache struct page for empty_zero_page and return it from ZERO_PAGE()"
build-rv64-nommu-k210-defconfig
Desc: Builds riscv64 defconfig with NOMMU for K210
Duration: 26.76 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 4: "[v3,4/4] mm: cache struct page for empty_zero_page and return it from ZERO_PAGE()"
build-rv64-nommu-k210-virt
Desc: Builds riscv64 defconfig with NOMMU for the virt platform
Duration: 28.19 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 4: "[v3,4/4] mm: cache struct page for empty_zero_page and return it from ZERO_PAGE()"
checkpatch
Desc: Runs checkpatch.pl on the patch
Duration: 3.15 seconds
Result: WARNING
Output:

CHECK: Please use a blank line after function/struct/union/enum declarations
#216: FILE: include/linux/pgtable.h:1932:
+}
+#define ZERO_PAGE(vaddr) _zero_page(vaddr)

total: 0 errors, 0 warnings, 1 checks, 182 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

Commit 38551ee578d2 ("mm: cache struct page for empty_zero_page and return it from ZERO_PAGE()") has style problems, please review.

NOTE: Ignored message types: ALLOC_SIZEOF_STRUCT CAMELCASE COMMIT_LOG_LONG_LINE GIT_COMMIT_ID MACRO_ARG_REUSE NO_AUTHOR_SIGN_OFF

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.
total: 0 errors, 0 warnings, 1 checks, 182 lines checked
CHECK: Please use a blank line after function/struct/union/enum declarations


@linux-riscv-bot
Copy link
Author

Patch 4: "[v3,4/4] mm: cache struct page for empty_zero_page and return it from ZERO_PAGE()"
dtb-warn-rv64
Desc: Checks for Device Tree warnings/errors
Duration: 82.89 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 4: "[v3,4/4] mm: cache struct page for empty_zero_page and return it from ZERO_PAGE()"
header-inline
Desc: Detects static functions without inline keyword in header files
Duration: 0.57 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 4: "[v3,4/4] mm: cache struct page for empty_zero_page and return it from ZERO_PAGE()"
kdoc
Desc: Detects for kdoc errors
Duration: 0.97 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 4: "[v3,4/4] mm: cache struct page for empty_zero_page and return it from ZERO_PAGE()"
module-param
Desc: Detect module_param changes
Duration: 0.28 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 4: "[v3,4/4] mm: cache struct page for empty_zero_page and return it from ZERO_PAGE()"
verify-fixes
Desc: Verifies that the Fixes: tags exist
Duration: 0.22 seconds
Result: PASS

@linux-riscv-bot
Copy link
Author

Patch 4: "[v3,4/4] mm: cache struct page for empty_zero_page and return it from ZERO_PAGE()"
verify-signedoff
Desc: Verifies that Signed-off-by: tags are correct
Duration: 0.29 seconds
Result: PASS

@linux-riscv-bot linux-riscv-bot force-pushed the workflow branch 19 times, most recently from 58114d9 to 103798e Compare February 19, 2026 00:00
@linux-riscv-bot linux-riscv-bot deleted the pw1053085 branch February 19, 2026 00:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants