我对 FreeBSD 上请求/释放 MSI-X 中断资源的调用顺序有一些疑问。
我试过“amd64 FreeBSD 13.1”和“amd64 FreeBSD 13.2”。
请求MSI-X中断资源时,我尝试了以下2个序列:
*序列A:
bus_alloc_resource
pci_msix_count
pci_alloc_msix
bus_setup_intr
*序列 B:
pci_msix_count
pci_alloc_msix
bus_alloc_resource
bus_setup_intr
当使用“Sequence A”时,我观察到bus_alloc_resource FAIL(返回NULL指针)。
使用“Sequence B”时有效,所以我选择“Sequence B”。
释放 MSI-X 中断资源时,我尝试了以下 2 个序列:
*序列 C:
bus_teardown_intr
pci_release_msi
bus_release_resource
*序列 D:
bus_teardown_intr
bus_release_resource
pci_release_msi
使用“Sequence C”时,我在卸载设备驱动程序时观察到一个系统日志“Device leaked MSI vectors”。
当使用“Sequence D”时,我观察到“sudo acpiconf -s 3”不再能够将系统挂起到 RAM。
相关人士: https://man.freebsd.org/cgi/man.cgi?query=pci_release_msi&sektion=9&manpath=freebsd-release-ports
根据男人的说法,“序列A”和“序列C”是正确的。 但是,“Sequence A”和“Sequence C”存在如上图的问题
可以咨询问题的原因是什么吗?
或者有可用的解决方法吗?
提前致谢。