¿Cómo puedo volver a conectar el dispositivo PCI cuando me caí del bus con un "tipo de encabezado desconocido 7f"?

¿Cómo puedo volver a conectar el dispositivo PCI cuando me caí del bus con un "tipo de encabezado desconocido 7f"?

Recientemente, mi dispositivo experimentó problemas de red de vez en cuando. Al final, descubrí que una de las NIC puede tener algún problema al usar el controlador r8169 y las actualizaciones recientes del kernel: 6.0->6.2 Intento reiniciar la NIC en línea sin reiniciar. Sin embargo, no puedo hacerlo funcionar. Aquí esta lo que hice:

  1. modprobe -r r8169
  2. modprobe r8169
  3. lsmod | grep r8169 Sin embargo, no se puede detectar la NIC.

lspci muestra que es posible que ya esté desconectado del bus:

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

Por lo general, en este punto puedo recuperarlo reiniciando. Sin embargo, ahora mismo estoy realizando un trabajo de larga duración que no quiero abortar. Por lo tanto, me gustaría poder reiniciar este dispositivo PCI en línea. (cualquiera que sugiera reemplazar la NIC o degradar el kernel, por favor no piense, no es una sugerencia válida para mi problema).

¿Alguien puede darme alguna pista sobre cómo se podría lograr esto o es posible?

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

Varias cosas que probé:

  • sudo bash -c 'echo "1" > /sys/bus/pci/devices/$NUMBER/reset'arroja un error, probablemente porque el dispositivo ya es inaccesible.
  • sudo bash -c 'echo 1 > /sys/bus/pci/devices/0000\:03\:00.0/remove'realmente retire el dispositivo. Sin embargo, sudo bash -c 'echo 1 > /sys/bus/pci/rescan'no lo trajo de vuelta. el dmesg: kernel: pci 0000:03:00.0: Unable to change power state from unknown to D0, device inaccessible También probé el reinicio en caliente del puente pci consetpci No causará el Unable to change power stateerror, sin embargo, la nueva exploración no puede detectar ningún dispositivo.

No creo que sea un problema de hardware, porque tengo varios dispositivos que experimentan el mismo problema; la ocurrencia también es un poco rara: promedio de 1 ocurrencia cada 2 días. No experimenté esto en un dispositivo que todavía ejecuta kernels más antiguos.

información relacionada