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

Reply via email to