sparclinux.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 00/12] mm: establish const-correctness for pointer parameters
@ 2025-09-01 12:30 Max Kellermann
  2025-09-01 12:30 ` [PATCH v5 01/12] mm: constify shmem related test functions for improved const-correctness Max Kellermann
                   ` (14 more replies)
  0 siblings, 15 replies; 53+ messages in thread
From: Max Kellermann @ 2025-09-01 12:30 UTC (permalink / raw)
  To: akpm, david, axelrasmussen, yuanchu, willy, hughd, mhocko,
	linux-kernel, linux-mm, lorenzo.stoakes, Liam.Howlett, vbabka,
	rppt, surenb, vishal.moola, linux, James.Bottomley, deller,
	agordeev, gerald.schaefer, hca, gor, borntraeger, svens, davem,
	andreas, dave.hansen, luto, peterz, tglx, mingo, bp, x86, hpa,
	chris, jcmvbkbc, viro, brauner, jack, weixugc, baolin.wang,
	rientjes, shakeel.butt, max.kellermann, thuth, broonie, osalvador,
	jfalempe, mpe, nysal, linux-arm-kernel, linux-parisc, linux-s390,
	sparclinux, linux-fsdevel

For improved const-correctness.

This patch series systematically adds const qualifiers to pointer
parameters throughout the memory management subsystem, establishing a
foundation for improved const-correctness across the entire Linux
kernel.

Const-correctness provides multiple benefits:

1. Type Safety: The compiler enforces that functions marked as taking
   const parameters cannot accidentally modify the data, catching
   potential bugs at compile time rather than runtime.

2. Compiler Optimizations: When the compiler knows data won't be
   modified, it can generate more efficient code through better
   register allocation, code motion, and aliasing analysis.

3. API Documentation: Const qualifiers serve as self-documenting code,
   making it immediately clear to developers which functions are
   read-only operations versus those that modify state.

4. Maintenance Safety: Future modifications to const-correct code are
   less likely to introduce subtle bugs, as the compiler will reject
   attempts to modify data that should remain unchanged.

The memory management subsystem is a fundamental building block of the
kernel.  Most higher-level kernel subsystems (filesystems, drivers,
networking) depend on mm interfaces.  By establishing
const-correctness at this foundational level:

1. Enables Propagation: Higher-level subsystems can adopt
   const-correctness in their own interfaces.  Without const-correct
   mm functions, filesystems cannot mark their own parameters const
   when they need to call mm functions.

2. Maximum Impact: Changes to core mm APIs benefit the entire kernel, as
   these functions are called from virtually every subsystem.

3. Prevents Impedance Mismatch: Without const-correctness in mm, other
   subsystems must either cast away const (dangerous) or avoid using
   const altogether (missing optimization opportunities).

Each patch focuses on a specific header or subsystem component to ease review
and bisection.

This work was initially posted as a single large patch:
 https://lore.kernel.org/lkml/20250827192233.447920-1-max.kellermann@ionos.com/

Following feedback from Lorenzo Stoakes and David Hildenbrand, it has been
split into focused, reviewable chunks. The approach was validated with a
smaller patch that received agreement:
 https://lore.kernel.org/lkml/20250828130311.772993-1-max.kellermann@ionos.com/

Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
---
v1 -> v2:
- made several parameter values const (i.e. the pointer address, not
  just the pointed-to memory), as suggested by Andrew Morton and
  Yuanchu Xie
- drop existing+obsolete "extern" keywords on lines modified by these
  patches (suggested by Vishal Moola)
- add missing parameter names on lines modified by these patches
  (suggested by Vishal Moola)
- more "const" pointers (e.g. the task_struct passed to
  process_shares_mm())
- add missing "const" to s390, fixing s390 build failure
- moved the mmap_is_legacy() change in arch/s390/mm/mmap.c from 08/12
  to 06/12 (suggested by Vishal Moola)

v2 -> v3:
- remove garbage from 06/12
- changed tags on subject line (suggested by Matthew Wilcox)

v3 -> v4:
- more verbose commit messages including a listing of function names
  (suggested by David Hildenbrand and Lorenzo Stoakes)

v4 -> v5:
- back to shorter commit messages after an agreement between David
  Hildenbrand and Lorenzo Stoakes was found

Max Kellermann (12):
  mm: constify shmem related test functions for improved
    const-correctness
  mm: constify pagemap related test functions for improved
    const-correctness
  mm: constify zone related test functions for improved
    const-correctness
  fs: constify mapping related test functions for improved
    const-correctness
  mm: constify process_shares_mm() for improved const-correctness
  mm, s390: constify mapping related test functions for improved
    const-correctness
  parisc: constify mmap_upper_limit() parameter for improved
    const-correctness
  mm: constify arch_pick_mmap_layout() for improved const-correctness
  mm: constify ptdesc_pmd_pts_count() and folio_get_private()
  mm: constify various inline test functions for improved
    const-correctness
  mm: constify assert/test functions in mm.h
  mm: constify highmem related functions for improved const-correctness

 arch/arm/include/asm/highmem.h      |  6 +--
 arch/parisc/include/asm/processor.h |  2 +-
 arch/parisc/kernel/sys_parisc.c     |  2 +-
 arch/s390/mm/mmap.c                 |  7 ++--
 arch/sparc/kernel/sys_sparc_64.c    |  3 +-
 arch/x86/mm/mmap.c                  |  7 ++--
 arch/xtensa/include/asm/highmem.h   |  2 +-
 include/linux/fs.h                  |  7 ++--
 include/linux/highmem-internal.h    | 44 +++++++++++----------
 include/linux/highmem.h             |  8 ++--
 include/linux/mm.h                  | 56 +++++++++++++--------------
 include/linux/mm_inline.h           | 26 +++++++------
 include/linux/mm_types.h            |  4 +-
 include/linux/mmzone.h              | 42 ++++++++++----------
 include/linux/pagemap.h             | 59 +++++++++++++++--------------
 include/linux/sched/mm.h            |  4 +-
 include/linux/shmem_fs.h            |  4 +-
 mm/highmem.c                        | 10 ++---
 mm/oom_kill.c                       |  7 ++--
 mm/shmem.c                          |  6 +--
 mm/util.c                           | 20 ++++++----
 21 files changed, 171 insertions(+), 155 deletions(-)

-- 
2.47.2


^ permalink raw reply	[flat|nested] 53+ messages in thread

end of thread, other threads:[~2025-09-02  8:15 UTC | newest]

Thread overview: 53+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-01 12:30 [PATCH v5 00/12] mm: establish const-correctness for pointer parameters Max Kellermann
2025-09-01 12:30 ` [PATCH v5 01/12] mm: constify shmem related test functions for improved const-correctness Max Kellermann
2025-09-01 13:48   ` David Hildenbrand
2025-09-01 13:58   ` Lorenzo Stoakes
2025-09-01 12:30 ` [PATCH v5 02/12] mm: constify pagemap " Max Kellermann
2025-09-01 13:49   ` David Hildenbrand
2025-09-01 14:39     ` Max Kellermann
2025-09-01 14:09   ` Lorenzo Stoakes
2025-09-01 14:24   ` Lorenzo Stoakes
2025-09-01 14:50     ` Max Kellermann
2025-09-01 15:14       ` Lorenzo Stoakes
2025-09-01 15:47         ` Vlastimil Babka
2025-09-01 15:52           ` David Hildenbrand
2025-09-01 15:55             ` Lorenzo Stoakes
2025-09-01 12:30 ` [PATCH v5 03/12] mm: constify zone " Max Kellermann
2025-09-01 13:50   ` David Hildenbrand
2025-09-01 14:37   ` Lorenzo Stoakes
2025-09-01 12:30 ` [PATCH v5 04/12] fs: constify mapping " Max Kellermann
2025-09-01 13:50   ` David Hildenbrand
2025-09-01 13:51   ` David Hildenbrand
2025-09-01 14:40   ` Lorenzo Stoakes
2025-09-01 12:30 ` [PATCH v5 05/12] mm: constify process_shares_mm() " Max Kellermann
2025-09-01 14:46   ` Lorenzo Stoakes
2025-09-01 12:30 ` [PATCH v5 06/12] mm, s390: constify mapping related test functions " Max Kellermann
2025-09-01 13:54   ` David Hildenbrand
2025-09-01 14:47     ` Lorenzo Stoakes
2025-09-01 15:02     ` Max Kellermann
2025-09-01 15:11       ` David Hildenbrand
2025-09-01 15:22         ` Max Kellermann
2025-09-01 15:31           ` David Hildenbrand
2025-09-01 12:30 ` [PATCH v5 07/12] parisc: constify mmap_upper_limit() parameter " Max Kellermann
2025-09-01 13:55   ` David Hildenbrand
2025-09-01 14:48     ` Lorenzo Stoakes
2025-09-01 12:30 ` [PATCH v5 08/12] mm: constify arch_pick_mmap_layout() " Max Kellermann
2025-09-01 13:58   ` David Hildenbrand
2025-09-01 14:49     ` Lorenzo Stoakes
2025-09-01 15:06     ` Max Kellermann
2025-09-01 12:30 ` [PATCH v5 09/12] mm: constify ptdesc_pmd_pts_count() and folio_get_private() Max Kellermann
2025-09-01 13:58   ` David Hildenbrand
2025-09-01 14:50   ` Lorenzo Stoakes
2025-09-01 12:30 ` [PATCH v5 10/12] mm: constify various inline test functions for improved const-correctness Max Kellermann
2025-09-01 14:00   ` David Hildenbrand
2025-09-01 15:13     ` Max Kellermann
2025-09-01 12:30 ` [PATCH v5 11/12] mm: constify assert/test functions in mm.h Max Kellermann
2025-09-01 14:06   ` David Hildenbrand
2025-09-01 15:17     ` Max Kellermann
2025-09-01 15:25       ` David Hildenbrand
2025-09-01 12:30 ` [PATCH v5 12/12] mm: constify highmem related functions for improved const-correctness Max Kellermann
2025-09-01 14:51   ` Lorenzo Stoakes
2025-09-01 13:44 ` [PATCH v5 00/12] mm: establish const-correctness for pointer parameters Christian Brauner
2025-09-01 14:32 ` Lorenzo Stoakes
2025-09-02  2:50 ` Matthew Wilcox
2025-09-02  8:15   ` David Hildenbrand

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).