[ 78.113759] Call Trace: [ 78.113917] ? os_spin_lock+0xe/0x10 [mtgpu] [ 78.114065] mtgpu_job_submit_ioctl_v3+0x333/0x880 [mtgpu] [ 78.114158] ? _Ref+0x23/0x60 [mtgpu] [ 78.114245] ? PMRRefPMR+0x1b/0x60 [mtgpu] [ 78.114314] ? OSMMapPMRGeneric+0x4ee/0x760 [mtgpu] [ 78.114345] ? rm_hole+0x6b/0xa0 [drm] [ 78.114368] ? add_hole+0xfe/0x160 [drm] [ 78.114392] ? drm_mm_insert_node_in_range+0x2d2/0x420 [drm] [ 78.114427] ? drm_vma_offset_add+0x54/0x70 [drm] [ 78.114447] ? drm_gem_mmap_obj+0x61/0xb0 [drm] [ 78.114589] ? mtgpu_job_item_cleanup+0xf0/0xf0 [mtgpu] [ 78.114612] drm_ioctl_kernel+0xae/0xf0 [drm] [ 78.114634] drm_ioctl+0x234/0x3d0 [drm] [ 78.114769] ? mtgpu_job_item_cleanup+0xf0/0xf0 [mtgpu] [ 78.114779] do_vfs_ioctl+0x407/0x670 [ 78.114784] ksys_ioctl+0x67/0x90 [ 78.114793] __x64_sys_ioctl+0x1a/0x20 [ 78.114800] do_syscall_64+0x57/0x190 这是一段linux kernel的call trace,其中的? 是什么含义?
在Linux内核的调用栈(call trace)中,问号 ?
通常表示该函数调用是一个内联函数(inline function)或者是一个内联函数的调用点。内联函数是编译器优化的一部分,编译器会将函数的代码直接插入到调用点,而不是通过函数调用的方式。这可以减少函数调用的开销,但也会使得调试信息变得复杂,因为内联函数的调用点可能不会有明确的符号信息。
在���的调用栈中,问号 ?
出现在多个函数调用前面,表示这些函数可能是内联函数或者是内联函数的调用点。例如:
[ 78.113917] ? os_spin_lock+0xe/0x10 [mtgpu]
[ 78.114158] ? _Ref+0x23/0x60 [mtgpu]
[ 78.114245] ? PMRRefPMR+0x1b/0x60 [mtgpu]
[ 78.114314] ? OSMMapPMRGeneric+0x4ee/0x760 [mtgpu]
[ 78.114345] ? rm_hole+0x6b/0xa0 [drm]
[ 78.114368] ? add_hole+0xfe/0x160 [drm]
[ 78.114392] ? drm_mm_insert_node_in_range+0x2d2/0x420 [drm]
[ 78.114427] ? drm_vma_offset_add+0x54/0x70 [drm]
[ 78.114447] ? drm_gem_mmap_obj+0x61/0xb0 [drm]
这些函数可能在编译时被内联了,因此在调用栈中显示为 ?
。这并不一定表示这些函数有问题,只是表示它们的调用点可能是内联的。
如果你需要更详细的调试信息,可以尝试在编译内核时禁用内联优化,或者使用更高级的调试工具来获取更详细的调用信息。