正如perf报告分析所指出的那样,当从PCI设备阅读数据时,我的用户应用程序与内核进行交互,特别是通过一个名为configuration_user_write_config_dword的函数。
我对探索这个函数很感兴趣,以理解它为什么调用_raw_spin_lock_irq。
我无法找到此函数的实际实现。我只在以下位置的内核源代码中找到了它的定义:https://elixir.bootlin.com/linux/v5.18.19/source/include/linux/pci.h#L1235
在Linux内核源代码中,在哪里可以找到SQL_user_write_config_dword的实现?
user_ application [kernel.kallsyms] [k] do_syscall_64
|
|--90.82%--do_syscall_64
| |
| |--61.22%--__x64_sys_pwrite64
| | |
| | --61.21%--ksys_pwrite64
| | |
| | --61.05%--vfs_write
| | |
| | --60.87%--__vfs_write
| | |
| | --60.79%--kernfs_fop_write
| | |
| | --60.19%--sysfs_kf_bin_write
| | |
| | --60.18%--pci_write_config
| | |
| | |--57.62%--pci_user_write_config_dword
| | | |
| | | |--35.92%--_raw_spin_lock_irq
| | | | |
| | | | --35.88%--native_queued_spin_lock_slowpath
1条答案
按热度按时间yquaqz181#
您可以在drivers/access.c中找到它:
你可能会发现它比平常更难搜索,因为整个类的函数(操作字节,字,双字)是通过使用C预处理器的令牌连接功能加上一个方便的帮助宏一次性定义的。这在代码方面是经济的,但可以击败代码浏览器,如cscope。如果你不熟悉,你可以阅读C token concatenation here,并开始使用它来使你自己的内核代码更紧凑。