On 10/9/24 19:29, Bastian Blank wrote:
Package: nvidia-graphics-drivers Version: 535.183.06-1
https://ci.debian.net/packages/n/nvidia-graphics-drivers/testing/arm64/52858087/#S6
https://ci.debian.net/packages/n/nvidia-graphics-drivers/testing/arm64/52858087/#L1941 302s In file included from /usr/src/linux-headers-6.11.2-common/arch/arm64/include/asm/thread_info.h:17, 302s from /usr/src/linux-headers-6.11.2-common/include/linux/thread_info.h:60, 302s from /usr/src/linux-headers-6.11.2-common/arch/arm64/include/asm/preempt.h:6, 302s from /usr/src/linux-headers-6.11.2-common/include/linux/preempt.h:79, 302s from /usr/src/linux-headers-6.11.2-common/include/linux/spinlock.h:56, 302s from /usr/src/modules/nvidia-kernel/common/inc/nv-lock.h:29, 302s from /usr/src/modules/nvidia-kernel/common/inc/nv-linux.h:32: 302s /usr/src/modules/nvidia-kernel/nvidia/nv-vtophys.c: In function ‘nv_get_kern_phys_address’: 302s /usr/src/linux-headers-6.11.2-common/arch/arm64/include/asm/memory.h:425:66: error: passing argument 1 of ‘virt_to_pfn’ makes pointer from integer without a cast [-Wint-conversion] 302s 425 | __is_lm_address(__addr) && pfn_is_map_memory(virt_to_pfn(__addr)); \ 302s | ^~~~~~ 302s | | 302s | NvU64 {aka long long unsigned int} 302s /usr/src/modules/nvidia-kernel/common/inc/nv-linux.h:2082:30: note: in expansion of macro ‘virt_addr_valid’ 302s 2082 | # define nv_virt_addr_valid virt_addr_valid 302s | ^~~~~~~~~~~~~~~ 302s /usr/src/modules/nvidia-kernel/nvidia/nv-vtophys.c:32:9: note: in expansion of macro ‘nv_virt_addr_valid’ 302s 32 | if (nv_virt_addr_valid(address)) 302s | ^~~~~~~~~~~~~~~~~~ 302s /usr/src/linux-headers-6.11.2-common/arch/arm64/include/asm/memory.h:380:53: note: expected ‘const void *’ but argument is of type ‘NvU64’ {aka ‘long long unsigned int’} 302s 380 | static inline unsigned long virt_to_pfn(const void *kaddr) 302s | ~~~~~~~~~~~~^~~~~ arch/arm64/include/asm/memory.h static inline unsigned long virt_to_pfn(const void *kaddr) { return __phys_to_pfn(virt_to_phys(kaddr)); } #define virt_addr_valid(addr) ({ \ __typeof__(addr) __addr = __tag_reset(addr); \ __is_lm_address(__addr) && pfn_is_map_memory(virt_to_pfn(__addr)); \ }) arch/powerpc/include/asm/page.h static inline unsigned long virt_to_pfn(const void *kaddr) { return __pa(kaddr) >> PAGE_SHIFT; } #define virt_addr_valid(vaddr) ({ \ unsigned long _addr = (unsigned long)vaddr; \ _addr >= PAGE_OFFSET && _addr < (unsigned long)high_memory && \ pfn_valid(virt_to_pfn((void *)_addr)); \ }) arch/x86/include/asm/page.h extern bool __virt_addr_valid(unsigned long kaddr); #define virt_addr_valid(kaddr) __virt_addr_valid((unsigned long) (kaddr)) Looks like the virt_addr_valid() macro wants a 'void*' argument ... which is only 'enforced' on arm64 by preserving the argument type (the other architectures explictly cast the argument to 'unsigned long' and maybe back to 'void*') Andreas