当 PCI 设备因“未知头类型 7f”从总线上脱落时,如何重新连接它

当 PCI 设备因“未知头类型 7f”从总线上脱落时,如何重新连接它

最近我的设备时不时会遇到网络问题。最后,我发现其中一个网卡在使用 r8169 驱动程序和最近的内核更新时可能会出现一些问题:6.0->6.2 我尝试在不重启的情况下重新启动网卡。但是,我无法让它工作。以下是我所做的:

  1. modprobe -r r8169
  2. modprobe r8169
  3. lsmod | grep r8169 但是,无法检测到 NIC。

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 设备。(如果有人建议更换 NIC 或降级内核,请保留您的想法,这对于我的问题来说不是有效的建议。)

有人能给我一些提示关于如何实现这一点或者是否有可能实现吗?

相关的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错误,但是重新扫描根本无法检测到任何设备。

我不认为这是硬件问题,因为我有多个设备遇到同样的问题,这种情况也很少见:平均每两天发生一次。我在运行旧内核的设备上没有遇到过这种情况。

相关内容