Como posso reconectar o dispositivo PCI quando caiu do barramento com `unknown header type 7f`

Como posso reconectar o dispositivo PCI quando caiu do barramento com `unknown header type 7f`

Recentemente, meu dispositivo teve problemas de rede de tempos em tempos. No final, descobri que uma das NICs pode ter algum problema ao usar o driver r8169 e atualizações recentes do kernel: 6.0-> 6.2 Tento reinicializar a NIC online sem reinicializar. No entanto, não consigo fazê-lo funcionar. Aqui está o que eu fiz:

  1. modprobe -r r8169
  2. modprobe r8169
  3. lsmod | grep r8169 No entanto, a NIC não pode ser detectada.

lspci mostra que ele já pode estar desconectado do barramento:

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

Normalmente, neste ponto, posso recuperá-lo com uma reinicialização. No entanto, neste momento estou executando um trabalho duradouro que não quero abortar. Assim, gostaria de poder reiniciar este dispositivo PCI online. (alguém sugere substituir a NIC ou o kernel de downgrade, por favor, espere, não é uma sugestão válida para o meu problema.)

Alguém pode me dar alguma dica sobre como isso pode ser alcançado ou é possível?

o dmesg relacionado:

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).

Várias coisas que tentei:

  • sudo bash -c 'echo "1" > /sys/bus/pci/devices/$NUMBER/reset'gerar um erro, provavelmente porque o dispositivo já está inacessível.
  • sudo bash -c 'echo 1 > /sys/bus/pci/devices/0000\:03\:00.0/remove'realmente remova o dispositivo. No entanto, sudo bash -c 'echo 1 > /sys/bus/pci/rescan'não o trouxe de volta. o dmesg: kernel: pci 0000:03:00.0: Unable to change power state from unknown to D0, device inaccessible Eu também tentei o hot reset da ponte pci comsetpci Isso não causará o Unable to change power stateerro, no entanto, a nova verificação não poderá detectar nenhum dispositivo.

Não creio que seja problema de hardware, pois tenho vários dispositivos com o mesmo problema, a ocorrência também é meio rara: média de 1 ocorrência a cada 2 dias. Eu não experimentei isso em um dispositivo que ainda executa kernels mais antigos.

informação relacionada