lkml.org 
[lkml]   [2023]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH v2 00/12] arch: Make virt_to_pfn into a static inline
    Date
    This is an attempt to harden the typing on virt_to_pfn()
    and pfn_to_virt().

    Making virt_to_pfn() a static inline taking a strongly typed
    (const void *) makes the contract of a passing a pointer of that
    type to the function explicit and exposes any misuse of the
    macro virt_to_pfn() acting polymorphic and accepting many types
    such as (void *), (unitptr_t) or (unsigned long) as arguments
    without warnings.

    For symmetry, we do the same with pfn_to_virt().

    The problem with this inconsistent typing was pointed out by
    Russell King:
    https://lore.kernel.org/linux-arm-kernel/YoJDKJXc0MJ2QZTb@shell.armlinux.org.uk/

    And confirmed by Andrew Morton:
    https://lore.kernel.org/linux-mm/20220701160004.2ffff4e5ab59a55499f4c736@linux-foundation.org/

    So the recognition of the problem is widespread.

    These platforms have been chosen as initial conversion targets:

    - ARC
    - ARM
    - ARM64/Aarch64
    - asm-generic (including for example x86)
    - m68k

    The idea is that if this goes in, it will block further misuse
    of the function signatures due to the large compile coverage,
    and then I can go in and fix the remaining platforms on a
    one-by-one basis.

    Some of the patches have been circulated before but were not
    picked up by subsystem maintainers, so now the arch tree is
    target for this series.

    It has passed zeroday builds after a lot of iterations in my
    personal tree, but there could be some randconfig outliers.

    The To/Cc list would be too long if I include all the minor
    patches maintainers, so I have trimmed it down to the mailing
    lists since these people certainly have received the patches
    before.

    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    ---
    Changes in v2:
    - Fix some "void * x" into "void *x" in generic page accessors and
    in m68k.
    - Collected a few ACKs
    - All build tests appear to pass!
    - Added Andrew Mortin to To: line to see what he thinks
    - Link to v1: https://lore.kernel.org/r/20230503-virt-to-pfn-v6-4-rc1-v1-0-6c4698dcf9c8@linaro.org

    ---
    Linus Walleij (12):
    fs/proc/kcore.c: Pass a pointer to virt_addr_valid()
    m68k: Pass a pointer to virt_to_pfn() virt_to_page()
    ARC: init: Pass a pointer to virt_to_pfn() in init
    riscv: mm: init: Pass a pointer to virt_to_page()
    cifs: Pass a pointer to virt_to_page()
    cifs: Pass a pointer to virt_to_page() in cifsglob
    netfs: Pass a pointer to virt_to_page()
    arm64: vdso: Pass (void *) to virt_to_page()
    asm-generic/page.h: Make pfn accessors static inlines
    ARM: mm: Make virt_to_pfn() a static inline
    arm64: memory: Make virt_to_pfn() a static inline
    m68k/mm: Make pfn accessors static inlines

    arch/arc/mm/init.c | 2 +-
    arch/arm/common/sharpsl_param.c | 2 +-
    arch/arm/include/asm/delay.h | 2 +-
    arch/arm/include/asm/io.h | 2 +-
    arch/arm/include/asm/memory.h | 17 ++++++++++++-----
    arch/arm/include/asm/page.h | 4 ++--
    arch/arm/include/asm/pgtable.h | 2 +-
    arch/arm/include/asm/proc-fns.h | 2 --
    arch/arm/include/asm/sparsemem.h | 2 +-
    arch/arm/include/asm/uaccess-asm.h | 2 +-
    arch/arm/include/asm/uaccess.h | 2 +-
    arch/arm/kernel/asm-offsets.c | 2 +-
    arch/arm/kernel/entry-armv.S | 2 +-
    arch/arm/kernel/entry-common.S | 2 +-
    arch/arm/kernel/entry-v7m.S | 2 +-
    arch/arm/kernel/head-nommu.S | 3 +--
    arch/arm/kernel/head.S | 2 +-
    arch/arm/kernel/hibernate.c | 2 +-
    arch/arm/kernel/suspend.c | 2 +-
    arch/arm/kernel/tcm.c | 2 +-
    arch/arm/kernel/vmlinux-xip.lds.S | 3 +--
    arch/arm/kernel/vmlinux.lds.S | 3 +--
    arch/arm/mach-berlin/platsmp.c | 2 +-
    arch/arm/mach-keystone/keystone.c | 2 +-
    arch/arm/mach-omap2/sleep33xx.S | 2 +-
    arch/arm/mach-omap2/sleep43xx.S | 2 +-
    arch/arm/mach-omap2/sleep44xx.S | 2 +-
    arch/arm/mach-pxa/gumstix.c | 2 +-
    arch/arm/mach-rockchip/sleep.S | 2 +-
    arch/arm/mach-sa1100/pm.c | 2 +-
    arch/arm/mach-shmobile/headsmp-scu.S | 2 +-
    arch/arm/mach-shmobile/headsmp.S | 2 +-
    arch/arm/mach-socfpga/headsmp.S | 2 +-
    arch/arm/mach-spear/spear.h | 2 +-
    arch/arm/mm/cache-fa.S | 1 -
    arch/arm/mm/cache-v4wb.S | 1 -
    arch/arm/mm/dma-mapping.c | 2 +-
    arch/arm/mm/dump.c | 2 +-
    arch/arm/mm/init.c | 2 +-
    arch/arm/mm/kasan_init.c | 1 -
    arch/arm/mm/mmu.c | 2 +-
    arch/arm/mm/physaddr.c | 2 +-
    arch/arm/mm/pmsa-v8.c | 2 +-
    arch/arm/mm/proc-v7.S | 2 +-
    arch/arm/mm/proc-v7m.S | 2 +-
    arch/arm/mm/pv-fixup-asm.S | 2 +-
    arch/arm64/include/asm/memory.h | 9 ++++++++-
    arch/arm64/kernel/vdso.c | 2 +-
    arch/m68k/include/asm/mcf_pgtable.h | 4 ++--
    arch/m68k/include/asm/page_mm.h | 11 +++++++++--
    arch/m68k/include/asm/page_no.h | 11 +++++++++--
    arch/m68k/include/asm/sun3_pgtable.h | 4 ++--
    arch/m68k/mm/mcfmmu.c | 3 ++-
    arch/m68k/mm/motorola.c | 4 ++--
    arch/m68k/mm/sun3mmu.c | 2 +-
    arch/m68k/sun3/dvma.c | 2 +-
    arch/m68k/sun3x/dvma.c | 2 +-
    arch/riscv/mm/init.c | 4 ++--
    drivers/memory/ti-emif-sram-pm.S | 2 +-
    fs/cifs/cifsglob.h | 2 +-
    fs/cifs/smbdirect.c | 2 +-
    fs/netfs/iterator.c | 2 +-
    fs/proc/kcore.c | 2 +-
    include/asm-generic/page.h | 12 ++++++++++--
    64 files changed, 109 insertions(+), 80 deletions(-)
    ---
    base-commit: ac9a78681b921877518763ba0e89202254349d1b
    change-id: 20230503-virt-to-pfn-v6-4-rc1-4f5739e8d60d

    Best regards,
    --
    Linus Walleij <linus.walleij@linaro.org>

    \
     
     \ /
      Last update: 2023-05-22 09:01    [W:2.183 / U:0.360 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site