當 PCI 設備從總線上脫落並出現「未知標頭類型 7f」時,如何重新連接 PCI 設備

當 PCI 設備從總線上脫落並出現「未知標頭類型 7f」時,如何重新連接 PCI 設備

最近我的設備時常遇到網路問題。最後,我發現其中一個網卡在使用 r8169 驅動程式和最近的核心更新時可能會出現一些問題:6.0->6.2 我嘗試在線上重新啟動網卡而不重新啟動。但是,我無法讓它工作。這是我所做的:

  1. modprobe -r r8169
  2. modprobe r8169
  3. lsmod | grep r8169 但無法偵測到網卡。

lspci 顯示它可能已經與總線斷開連接:

03:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev ff) (prog-if ff)
        DeviceName: GLAN
        !!! Unknown header type 7f
        Kernel modules: r8169

通常此時我可以透過重新啟動將其恢復。 然而,現在我正在做一些長期的工作,我不想中止。 因此我希望能夠在線上重新啟動這個 PCI 裝置。 (如果有人建議更換網卡或降級內核,請保留你的想法,這對我的問題來說不是有效的建議。)

誰能給我一些關於如何實現這一目標的提示,或者這是否可能?

相關的dmesg:

Sep 08 10:51:39 miniserver kernel: WARNING: CPU: 10 PID: 0 at net/sched/sch_generic.c:525 dev_watchdog+0x21f/0x230
Sep 08 10:51:39 miniserver kernel: Modules linked in: rfcomm xt_CHECKSUM nvme_fabrics nft_chain_nat xt_MASQUERADE nf_nat xfrm_user xfrm_algo cmac algif_hash algif_skc>
Sep 08 10:51:39 miniserver kernel:  typec_ucsi btintel spi_nor hid_multitouch mei_pxp mei_hdcp kvm iwlmvm typec ee1004 mtd intel_rapl_msr snd_seq_midi btmtk i915 btrf>
Sep 08 10:51:39 miniserver kernel:  asus_wmi ledtrig_audio sparse_keymap platform_profile hid_generic uas usbhid usb_storage nvidia_drm(POE) nvidia_modeset(POE) nvidi>
Sep 08 10:51:39 miniserver kernel: CPU: 10 PID: 0 Comm: swapper/10 Tainted: P           OE      6.2.0-32-generic #32~22.04.1-Ubuntu
Sep 08 10:51:39 miniserver kernel: r8169 0000:03:00.0 eno2: rtl_chipcmd_cond == 1 (loop: 100, delay: 100).

我嘗試過的幾件事:

  • sudo bash -c 'echo "1" > /sys/bus/pci/devices/$NUMBER/reset'拋出錯誤,可能是因為設備已經無法存取。
  • sudo bash -c 'echo 1 > /sys/bus/pci/devices/0000\:03\:00.0/remove'實際上刪除設備。不過,sudo bash -c 'echo 1 > /sys/bus/pci/rescan'並沒有帶回來。 dmesg:kernel: pci 0000:03:00.0: Unable to change power state from unknown to D0, device inaccessible 我還嘗試了 pci 橋熱重置設定pci 它不會導致Unable to change power state錯誤,但是,重新掃描根本無法偵測到任何裝置。

我不認為這是硬體問題,因為我有多個設備遇到同樣的問題,這種情況也很少見:平均每2天出現1次。我沒有在仍在運行舊內核的設備上遇到過這種情況。

相關內容