Linux kernel 如何知道重置pci设备何时完成?

Linux kernel 如何知道重置pci设备何时完成?,linux-kernel,linux-device-driver,pci,Linux Kernel,Linux Device Driver,Pci,我想知道pci重置何时完成,所以我认为最好的选择是从pci设备配置注册表读取设备id字段 重置后,设备id字段更改为0xffff,并应在200-400毫秒后(可能在重置结束后)更改回实际设备id 如果在不等待的情况下访问函数“pci_read_config_word”,我会收到一个错误 我不想猜测等待的时间。 还有另一种投票方式吗 pci_set_pcie_reset_state(pdev, pcie_deassert_reset); while(polling_counter < 10

我想知道pci重置何时完成,所以我认为最好的选择是从pci设备配置注册表读取设备id字段

重置后,设备id字段更改为0xffff,并应在200-400毫秒后(可能在重置结束后)更改回实际设备id

如果在不等待的情况下访问函数“pci_read_config_word”,我会收到一个错误

我不想猜测等待的时间。 还有另一种投票方式吗

pci_set_pcie_reset_state(pdev, pcie_deassert_reset);

while(polling_counter < 100)
{
    pci_read_config_word(pdev, PCI_DEVICE_ID,
                         &device_id);

    if (device_id == pdev->device)
       break;

    polling_counter++;
}

// This function can failed if the reset is not completed.
pci_restore_state(pdev);

所以我只是快速地检查了/driver/pci.c并找到了这个宏

基于它在这些地方的用途,我要说的是官方的方法是等待,尽管我不知道你在做什么

不过,根据您的重置情况,链接可能会重置,在这种情况下,您可以尝试使用此功能(无承诺)。

总的来说,这个等待函数似乎是库希望您使用的。如果您说要执行哪种重置,可能会有所帮助


很抱歉,我在电话中的格式设置很差,如果没有人碰这个,我会稍后更新

请在帖子中添加宏/函数名称。在当前形式下,如果不遵循链接,您的答案没有任何价值。这是一个只知道链接的答案,这种答案在堆栈溢出时是可以避免的。这是关于热复位:pci_设置_pcie_复位_状态(pdev、pcie_热复位);pci_dev_wait(结构pci_dev*dev,字符*reset_type,int timeout)未出现在pci.h中
[c000000167bcb200] [c0000000000155ac] .show_stack+0x6c/0x198 (unreliable)                                                                    
[c000000167bcb2b0] [c000000000076a8c] .eeh_dn_check_failure+0x354/0x3f0                                                                      
[c000000167bcb370] [c000000000029b7c] .rtas_read_config+0x13c/0x198                                                                          
[c000000167bcb410] [c00000000039c8d0] .pci_bus_read_config_word+0xa0/0xf8                                                                    
[c000000167bcb4d0] [d000000004f6043c] .reset_device+0x23c/0x530 [mst_ppc_pci_reset]                                                          
[c000000167bcb590] [c0000000003a6254] .local_pci_probe+0x7c/0xf8                                                                             
[c000000167bcb620] [c0000000003a63a8] .__pci_device_probe+0xd8/0x128                                                                         
[c000000167bcb6d0] [c0000000003a72a8] .pci_device_probe+0x38/0x68                                                                            
[c000000167bcb760] [c0000000004d0bd8] .really_probe+0xb0/0x288                                                                               
[c000000167bcb810] [c0000000004d0e4c] .driver_probe_device+0x9c/0x110                                                                        
[c000000167bcb8a0] [c0000000004d0fbc] .__driver_attach+0xfc/0x100                                                                            
[c000000167bcb930] [c0000000004cfee4] .bus_for_each_dev+0xc4/0x118                                                                           
[c000000167bcb9e0] [c0000000004d08a8] .driver_attach+0x28/0x40                                                                               
[c000000167bcba60] [c0000000004cf3b0] .bus_add_driver+0x190/0x340                                                                            
[c000000167bcbb10] [c0000000004d1950] .driver_register+0x98/0x1b8                                                                            
[c000000167bcbbb0] [c0000000003a760c] .__pci_register_driver+0x64/0x140                                                                      
[c000000167bcbc50] [d000000004f608c0] .init+0x28/0x430 [mst_ppc_pci_reset]                                                                   
[c000000167bcbcd0] [c00000000000ab68] .do_one_initcall+0x68/0x1e0                                                                            
[c000000167bcbd90] [c00000000010893c] .SyS_init_module+0xcc/0x218                                                                            
[c000000167bcbe30] [c0000000000098ec] syscall_exit+0x0/0x40