Change various kernel APIs to work with pointers instead of vm_offset_t #2
Open
jhb
wants to merge 20 commits from
reviews/jhb/pmap_pointer into main
pull from: reviews/jhb/pmap_pointer
merge into: FreeBSD:main
FreeBSD:main
FreeBSD:stable/14
FreeBSD:stable/15
FreeBSD:vendor/xz
FreeBSD:releng/13.5
FreeBSD:stable/13
FreeBSD:releng/14.3
FreeBSD:releng/14.4
FreeBSD:releng/15.0
FreeBSD:vendor/libfido2
FreeBSD:vendor/libcbor
FreeBSD:vendor/openzfs/master
FreeBSD:vendor/zlib
FreeBSD:vendor/openssh
FreeBSD:reviews/bapt/libusb
FreeBSD:vendor/NetBSD/libedit
FreeBSD:vendor/tzdata
FreeBSD:vendor/tzcode
FreeBSD:vendor/tcpdump
FreeBSD:vendor/less
FreeBSD:vendor/openzfs/zfs-2.4-release
FreeBSD:vendor/NetBSD/tests
FreeBSD:vendor/blocklist
FreeBSD:vendor/spleen
FreeBSD:vendor/openssl-3.0
FreeBSD:vendor/openssl-3.5
FreeBSD:vendor/Linux/rtw89
FreeBSD:vendor/Linux/rtw88
FreeBSD:vendor/Linux/mt76
FreeBSD:vendor/Linux/iwlwifi
FreeBSD:vendor/Linux/brcm80211
FreeBSD:vendor/Linux/ath12k
FreeBSD:vendor/Linux/ath11k
FreeBSD:vendor/Linux/ath10k
FreeBSD:vendor/nvi
FreeBSD:vendor/ncurses
FreeBSD:vendor/NetBSD/mtree
FreeBSD:vendor/llvm-project/release-21.x
FreeBSD:vendor/libucl
FreeBSD:vendor/libpcap
FreeBSD:vendor/libarchive
FreeBSD:vendor/acpica
FreeBSD:vendor/llvm-project/main
FreeBSD:vendor/NetBSD/bmake
FreeBSD:vendor/sqlite3
FreeBSD:vendor/device-tree
FreeBSD:vendor/openzfs/zfs-2.2-release
FreeBSD:vendor/bsddialog
FreeBSD:vendor/unbound
FreeBSD:vendor/Linux/ath-common
FreeBSD:vendor/sendmail
FreeBSD:releng/14.2
FreeBSD:vendor/mandoc
FreeBSD:vendor/expat
FreeBSD:vendor/google/googletest
FreeBSD:vendor/bc
FreeBSD:vendor/lua
FreeBSD:vendor/krb5
FreeBSD:vendor/one-true-awk
FreeBSD:vendor/libsamplerate
FreeBSD:vendor/lyaml
FreeBSD:vendor/llvm-project/release-19.x
FreeBSD:vendor/libyaml
FreeBSD:vendor/openpam
FreeBSD:vendor/pam-krb5
FreeBSD:vendor/wireguard-tools
FreeBSD:vendor/edk2
FreeBSD:releng/13.4
FreeBSD:releng/14.1
FreeBSD:vendor/jemalloc
FreeBSD:vendor/arm-optimized-routines
FreeBSD:vendor/libder
FreeBSD:vendor/libecc
FreeBSD:stable/12
FreeBSD:vendor/file
FreeBSD:vendor/libcxxrt
FreeBSD:releng/13.3
FreeBSD:vendor/ena-com
FreeBSD:releng/14.0
FreeBSD:vendor/wpa
FreeBSD:releng/13.2
FreeBSD:vendor/byacc
FreeBSD:vendor/llvm-project/release-18.x
FreeBSD:vendor/netcat
FreeBSD:vendor/dhcpcd
FreeBSD:vendor/ntp
FreeBSD:vendor/ldns
FreeBSD:vendor/got/diff
FreeBSD:vendor/openzfs/zfs-2.1-release
FreeBSD:vendor/kyua
FreeBSD:releng/12.4
FreeBSD:releng/12.3
FreeBSD:vendor/llvm-project/release-17.x
FreeBSD:vendor/libevent
FreeBSD:vendor/pam_modules
FreeBSD:vendor/openssl-1.1.1
FreeBSD:stable/11
FreeBSD:vendor/unifdef
FreeBSD:vendor/NetBSD/libc-vis
FreeBSD:releng/13.1
FreeBSD:vendor/heimdal
FreeBSD:vendor/llvm-project/release-16.x
FreeBSD:vendor/opencsd
FreeBSD:vendor/openssl
FreeBSD:vendor/bearssl
FreeBSD:vendor/Juniper/libxo
FreeBSD:vendor/tcsh
FreeBSD:vendor/zstd
FreeBSD:vendor/llvm-project/release-15.x
FreeBSD:stable/8
FreeBSD:vendor/google/capsicum-test
FreeBSD:releng/13.0
FreeBSD:vendor/bionic-x86_64-string
FreeBSD:vendor/xz-embedded
FreeBSD:vendor/llvm-project/release-14.x
FreeBSD:releng/12.2
FreeBSD:vendor/llvm-project/release-13.x
FreeBSD:vendor/terminus
FreeBSD:vendor/dma
FreeBSD:vendor/ck
FreeBSD:vendor/atf
FreeBSD:releng/11.4
FreeBSD:vendor/llvm-project/release-12.x
FreeBSD:vendor/NetBSD/vis
FreeBSD:stable/9
FreeBSD:stable/10
FreeBSD:vendor/openzfs/legacy
FreeBSD:vendor/dialog
FreeBSD:vendor/subversion
FreeBSD:releng/12.1
FreeBSD:vendor/llvm-project/release-11.x
FreeBSD:vendor/pnglite
FreeBSD:releng/11.3
FreeBSD:vendor/lib9p
FreeBSD:vendor/pcg-c
FreeBSD:vendor/llvm-project/master
FreeBSD:stable/7
FreeBSD:vendor/llvm-project/release-10.x
FreeBSD:vendor/flex
FreeBSD:vendor/apr
FreeBSD:vendor/bsnmp
FreeBSD:vendor/openbsm
FreeBSD:vendor/lutok
FreeBSD:releng/12.0
FreeBSD:vendor/llvm-project/release-9.x
FreeBSD:vendor/openssl-1.0.2
FreeBSD:vendor/llvm-project/release-8.x
FreeBSD:vendor/illumos
FreeBSD:vendor/openresolv
FreeBSD:vendor/NetBSD/blacklist
FreeBSD:vendor/llvm-openmp
FreeBSD:vendor/lldb
FreeBSD:vendor/lld
FreeBSD:vendor/llvm-libunwind
FreeBSD:vendor/libc++
FreeBSD:vendor/compiler-rt
FreeBSD:vendor/clang
FreeBSD:vendor/llvm
FreeBSD:releng/11.2
FreeBSD:vendor/lldb-90
FreeBSD:vendor/clang-90
FreeBSD:vendor/llvm-90
FreeBSD:vendor/lld-90
FreeBSD:vendor/libc++-90
FreeBSD:vendor/compiler-rt-90
FreeBSD:vendor/llvm-openmp-90
FreeBSD:vendor/llvm-libunwind-90
FreeBSD:vendor/bzip2
FreeBSD:vendor/llvm-libunwind-80
FreeBSD:vendor/clang-80
FreeBSD:vendor/llvm-openmp-80
FreeBSD:vendor/lldb-80
FreeBSD:vendor/lld-80
FreeBSD:vendor/elftoolchain
FreeBSD:vendor/libc++-80
FreeBSD:vendor/compiler-rt-80
FreeBSD:vendor/llvm-80
FreeBSD:vendor/libfdt
FreeBSD:vendor/clang-70
FreeBSD:vendor/libc++-70
FreeBSD:vendor/llvm-70
FreeBSD:vendor/lldb-70
FreeBSD:vendor/lld-70
FreeBSD:vendor/apr-util
FreeBSD:vendor/serf
FreeBSD:releng/10.4
FreeBSD:releng/11.1
FreeBSD:vendor/compiler-rt-70
FreeBSD:vendor/tzdb
FreeBSD:vendor/lldb-60
FreeBSD:vendor/lld-60
FreeBSD:vendor/libc++-60
FreeBSD:vendor/compiler-rt-60
FreeBSD:vendor/clang-60
FreeBSD:vendor/llvm-60
FreeBSD:releng/10.3
FreeBSD:vendor/dtc
FreeBSD:releng/11.0
FreeBSD:vendor/ctfdump
FreeBSD:vendor/pjdfstest
FreeBSD:vendor/heirloom-doctools
FreeBSD:releng/10.1
FreeBSD:releng/10.2
FreeBSD:releng/9.3
FreeBSD:vendor/bind9
FreeBSD:vendor/openssl-1.0.1
FreeBSD:vendor/alpine-hal
FreeBSD:vendor/cortex-strings
FreeBSD:vendor/amd
FreeBSD:vendor/libdivsufsort
FreeBSD:vendor/gcc
FreeBSD:vendor/ldns-host
FreeBSD:vendor/skein
FreeBSD:vendor/tnftp
FreeBSD:vendor/openssl-0.9.8
FreeBSD:stable/6
FreeBSD:vendor/pciids
FreeBSD:releng/8.4
FreeBSD:vendor/ficl
FreeBSD:releng/10.0
FreeBSD:vendor/gdb
FreeBSD:releng/9.2
FreeBSD:releng/9.1
FreeBSD:vendor/resolver
FreeBSD:stable/4
FreeBSD:releng/8.3
FreeBSD:vendor/bind9-9.8
FreeBSD:vendor/ipfilter
FreeBSD:vendor/ipfilter-sys
FreeBSD:vendor/NetBSD/libexecinfo
FreeBSD:vendor/misc-GNU/patch
FreeBSD:vendor/ipfilter-sys-old
FreeBSD:vendor/v4l
FreeBSD:vendor/hyperv
FreeBSD:vendor/libregex
FreeBSD:vendor/qcamain_open_hal
FreeBSD:releng/9.0
FreeBSD:vendor/NetBSD/unvis
FreeBSD:releng/7.4
FreeBSD:vendor/NetBSD/mknod
FreeBSD:vendor/bind9-9.6
FreeBSD:vendor/NetBSD/libc-pwcache
FreeBSD:releng/8.1
FreeBSD:releng/8.2
FreeBSD:vendor/groff
FreeBSD:vendor/opensolaris
FreeBSD:vendor/dtracetoolkit
FreeBSD:vendor/octeon-sdk
FreeBSD:vendor/NetBSD/softfloat
FreeBSD:releng/7.3
FreeBSD:vendor/gperf
FreeBSD:vendor/bind9-9.4
FreeBSD:vendor/com_err
FreeBSD:vendor/NetBSD/lukemftp
FreeBSD:vendor/tre
FreeBSD:vendor/gdtoa
FreeBSD:releng/7.1
FreeBSD:releng/8.0
FreeBSD:vendor/binutils
FreeBSD:vendor/ee
FreeBSD:releng/6.4
FreeBSD:releng/7.2
FreeBSD:vendor/misc-GNU/sort
FreeBSD:vendor/testfloat
FreeBSD:vendor/x86emu
FreeBSD:stable/5
FreeBSD:releng/6.3
FreeBSD:vendor/pf-sys
FreeBSD:vendor/pf
FreeBSD:vendor/top
FreeBSD:releng/7.0
FreeBSD:vendor/wpa_supplicant
FreeBSD:vendor/bind9-9.3
FreeBSD:vendor/libbegemot
FreeBSD:vendor/ath
FreeBSD:vendor/misc-GNU/cpio
FreeBSD:vendor/hostapd
FreeBSD:releng/5.5
FreeBSD:releng/6.1
FreeBSD:releng/6.2
FreeBSD:vendor/misc-GNU/cvs
FreeBSD:stable/3
FreeBSD:vendor/libreadline
FreeBSD:vendor/misc-GNU/diff
FreeBSD:vendor/ngatm
FreeBSD:vendor/csup
FreeBSD:releng/6.0
FreeBSD:releng/4.11
FreeBSD:vendor/pppd
FreeBSD:releng/5.3
FreeBSD:releng/5.4
FreeBSD:vendor/NetBSD/lukemftpd
FreeBSD:vendor/OpenBSD
FreeBSD:vendor/libuwx
FreeBSD:releng/4.10
FreeBSD:releng/4.8
FreeBSD:releng/4.9
FreeBSD:vendor/nve
FreeBSD:vendor/misc-GNU/texinfo
FreeBSD:vendor/NetBSD/misc
FreeBSD:releng/5.2
FreeBSD:releng/4.7
FreeBSD:releng/5.0
FreeBSD:releng/5.1
FreeBSD:vendor/isc-dhcp
FreeBSD:vendor/misc-GNU/grep
FreeBSD:vendor/altq
FreeBSD:vendor/SGI
FreeBSD:vendor/alsa
FreeBSD:vendor/bind
FreeBSD:releng/4.4
FreeBSD:releng/4.5
FreeBSD:releng/4.6
FreeBSD:releng/4.3
FreeBSD:vendor/ext2fs
FreeBSD:vendor/kerberosIV
FreeBSD:stable/2.2
FreeBSD:vendor/traceroute
FreeBSD:vendor/smbfs
FreeBSD:vendor/NetBSD/xlint
FreeBSD:vendor/NetBSD/sort
FreeBSD:vendor/opie
FreeBSD:vendor/perl5
FreeBSD:vendor/misc-GNU/bc
FreeBSD:vendor/lomac
FreeBSD:vendor/misc-GNU/awk
FreeBSD:vendor/tcp_wrappers
FreeBSD:vendor/libpam
FreeBSD:stable/2.1
FreeBSD:vendor/libgmp
FreeBSD:vendor/sym
FreeBSD:vendor/libdes
FreeBSD:vendor/ssleay
FreeBSD:vendor/misc-GNU/bison
FreeBSD:vendor/xe
FreeBSD:vendor/mrouted
FreeBSD:vendor/global
FreeBSD:vendor/CSRG
FreeBSD:vendor/softdep
FreeBSD:vendor/softupdates
FreeBSD:vendor/tcl
FreeBSD:vendor/voxware
FreeBSD:vendor/rarpd
FreeBSD:vendor/bind4
FreeBSD:vendor/stallion
FreeBSD:vendor/misc-GNU/misc
FreeBSD:vendor/ntpd
FreeBSD:vendor/rpcgen
FreeBSD:vendor/ncftp
FreeBSD:releng/2.0.5
FreeBSD:releng/2.0
FreeBSD:releng/1
No reviewers
Labels
Clear labels
No items
No labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
FreeBSD/FreeBSD-src!2
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "reviews/jhb/pmap_pointer"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
In CHERI kernels, pointers are not the same size as addresses, and vm_offset_t represents a virtual address (ptraddr_t). To handle places that use vm_offset_t to hold pointers that can be dereferenced by the CPU, CheriBSD adds a new vm_pointer_t type (uintptr_t). However, using vm_pointer_t can be a bit fragile, as C compilers will silently accept conversions between uintptr_t and ptraddr_t. The resulting errors can only be found at runtime. However, if pointers are stored as a pointer type such as void *, then mismatches between addresses and pointers can be caught at compile time including when compiling on non-CHERI architectures. As such, this series converts various kernel pmap/virtual memory kernel APIs that currently use vm_offset_t to use pointer types (either void * or char *) instead. Normally void * is used, but char * is preferred if the API or structure member is commonly used in pointer arithmetic. In practice, these changes seem to be cleaner as most kernel consumers for many of these APIs had to cast between pointer types and vm_offset_t anyway and now those casts can be removed.
make objbefore runningmake test-includes912864912bBefore this change, `make test-includes` (run as part of buildworld) would place test files in the current directory, which would clutter up git clones. Run `make obj` beforehand to ensure that the files are put in `${.OBJDIR}` instead of `${.CURDIR}`. This helps cut down on the noise significantly when running commands like `git status`. MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D554998e951583934c822e8b7dc47cefba83e80c45dbf7The BUILD_BUG_ON_ZERO() macro returns an (int)0 if it does not fail at build time. LinuxKPI sort() has it as a guard for an unsupported argument but ignores the return value. This leads to gcc complaining: /usr/src/sys/compat/linuxkpi/common/include/linux/build_bug.h:60:33: error: statement with no effect [-Werror=unused-value] 60 | #define BUILD_BUG_ON_ZERO(x) ((int)sizeof(struct { int:-((x) != 0); })) | ^ /usr/src/sys/compat/linuxkpi/common/include/linux/sort.h:37:9: note: in expansion of macro 'BUILD_BUG_ON_ZERO' 37 | BUILD_BUG_ON_ZERO(swap); \ | ^~~~~~~~~~~~~~~~~ /usr/src/sys/contrib/dev/rtw89/core.c:2575:9: note: in expansion of macro 'sort' 2575 | sort(drift, RTW89_BCN_TRACK_STAT_NR, sizeof(*drift), cmp_u16, NULL); Change to BUILD_BUG_ON() for the statement version. Reported by: CI Co-authored-by: bz Approved by: emaste (mentor) MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D55634View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.