Как мне повторно подключить PCI-устройство, если оно отключилось от шины с `неизвестным типом заголовка 7f`?

Как мне повторно подключить PCI-устройство, если оно отключилось от шины с `неизвестным типом заголовка 7f`?

В последнее время у моего устройства время от времени возникают проблемы с сетью. В конце концов, я обнаружил, что одна из сетевых карт может иметь некоторые проблемы при использовании драйвера 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 сsetpci Это не приведет к Unable to change power stateошибке, однако повторное сканирование вообще не сможет обнаружить ни одного устройства.

Я не думаю, что это аппаратная проблема, потому что у меня несколько устройств испытывают ту же проблему, возникновение также довольно редкое: в среднем 1 возникновение в 2 дня. Я не испытывал этого на устройстве, которое все еще работает на старых ядрах.

Связанный контент