NVIDIA / NVIDIA/open-gpu-kernel-modules
unconditional use of hmm_pfn_to_page() which was introduced in Linux 5.8
Nobody has claimed this yet.
- Dominant language
- C
- Stars
- 17.4k
- Forks
- 1.9k
- PR merge metrics
- No merged PRs in 30d
Description
NVIDIA Open GPU Kernel Modules Version
535.171.04
Operating System and Version
Debian
Kernel Release
< 5.8
Please confirm you are running a stable release kernel (e.g. not a -rc). We do not accept bug reports for unreleased kernels.
- I am running on a stable kernel release.
Build Command
This issue was noticed during QA tests that test module building against many official Debian kernels going back to 2.6.32.
Terminal output/Build Log
gcc-9 -Wp,-MD,/usr/src/modules/nvidia-open-kernel/nvidia-uvm/.uvm_ats_faults.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/9/include -I/usr/src/linux-headers-5.7.0-3-common/arch/x86/include -I./arch/x86/include/generated -I/usr/src/linux-headers-5.
7.0-3-common/include -I./include -I/usr/src/linux-headers-5.7.0-3-common/arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I/usr/src/linux-headers-5.7.0-3-common/include/uapi -I./include/generated/uapi -include /usr/src/linux-headers-5.7.0-3-common/
include/linux/kconfig.h -include /usr/src/linux-headers-5.7.0-3-common/include/linux/compiler_types.h -D__KERNEL__ -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declar
ation -Werror=implicit-int -Wno-format-security -std=gnu89 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -mtune=generic -mno-red-zone -mcmodel=
kernel -DCONFIG_X86_X32_ABI -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -fno-jump-tables -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-addre
ss-of-packed-member -O2 --param=allow-store-data-races=0 -Wframe-larger-than=2048 -fstack-protector-strong -Wno-unused-but-set-variable -Wimplicit-fallthrough -Wno-unused-const-variable -fno-var-tracking-assignments -g -pg -mrecord-mcount -mfentry -DCC_USING
_FENTRY -flive-patching=inline-clone -Wdeclaration-after-statement -Wvla -Wno-pointer-sign -Wno-stringop-truncation -Wno-array-bounds -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized -fno-strict-overflow -fno-merge-all-constants -fmerge-constant
s -fno-stack-check -fconserve-stack -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -fmacro-prefix-map=/usr/src/linux-headers-5.7.0-3-common/= -fcf-protection=none -Wno-packed-not-aligned -I/usr/src/modules/nvidia-open-kernel/com
mon/inc -I/usr/src/modules/nvidia-open-kernel -Wall -Wno-cast-qual -Wno-error -Wno-format-extra-args -D__KERNEL__ -DMODULE -DNVRM -DNV_VERSION_STRING=\"535.171.04\" -Wno-unused-function -Wuninitialized -fno-strict-aliasing -ffreestanding -mno-red-zone -mcmod
el=kernel -DNV_UVM_ENABLE -Werror=undef -DNV_SPECTRE_V2=0 -DNV_KERNEL_INTERFACE_LAYER -O2 -DNVIDIA_UVM_ENABLED -DNVIDIA_UNDEF_LEGACY_BIT_MACROS -DLinux -D__linux__ -I/usr/src/modules/nvidia-open-kernel/nvidia-uvm -DMODULE -DKBUILD_BASENAME='"uvm_ats_faults
"' -DKBUILD_MODNAME='"nvidia_uvm"' -c -o /usr/src/modules/nvidia-open-kernel/nvidia-uvm/uvm_ats_faults.o /usr/src/modules/nvidia-open-kernel/nvidia-uvm/uvm_ats_faults.c
/usr/src/modules/nvidia-open-kernel/nvidia-uvm/uvm_ats_faults.c: In function 'ats_compute_residency_mask':
/usr/src/modules/nvidia-open-kernel/nvidia-uvm/uvm_ats_faults.c:312:10: error: 'struct hmm_range' has no member named 'hmm_pfns'
312 | range.hmm_pfns = ats_context->prefetch_state.pfns;
| ^
/usr/src/modules/nvidia-open-kernel/nvidia-uvm/uvm_ats_faults.c:359:37: error: implicit declaration of function 'hmm_pfn_to_page'; did you mean 'pfn_to_page'? [-Werror=implicit-function-declaration]
359 | struct page *page = hmm_pfn_to_page(pfn);
| ^~~~~~~~~~~~~~~
| pfn_to_page
/usr/src/modules/nvidia-open-kernel/nvidia-uvm/uvm_ats_faults.c:359:37: warning: initialization of 'struct page *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
cc1: some warnings being treated as errors
More Info
hmm_pfn_to_page() was introduced in Linux 5.8, but there is no corresponding check in conftest.sh for its availability. Thus module compilation is failing for all kernels predating Linux 5.8.
common/inc/nv-linux.h has a check for a minimal supported version of 2.6.32 which seems to be wrong, since the README mentions 3.10 as lower limit (post-470). (minimal kernel version seems to get bumped to 4.15 post-550)
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with conftest.sh and the use of hmm_pfn_to_page() in nvidia-uvm/uvm_ats_faults.c, then review the minimum-version logic in common/inc/nv-linux.h. Build the module against a pre-5.8 kernel such as the reported Debian 5.7 headers. Done means the compatibility handling is correct and older supported kernels no longer fail during compilation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- c, linux
- Domain
- build-system, operating-systems
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 45/100