รีเซ็ตอุปกรณ์ PCI ใน Linux


12

มีวิธีทั่วไปในการรีเซ็ตอุปกรณ์ PCI ใน Linux จากบรรทัดคำสั่งหรือไม่ นั่นคือทำให้บัส PCI ออกคำสั่งรีเซ็ต

คำตอบ:


6

ตามhttp://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-pciคุณสามารถรีเซ็ตฟังก์ชั่นแต่ละอย่างของอุปกรณ์หากรองรับ:

What:       /sys/bus/pci/devices/.../reset
Description:
            Some devices allow an individual function to be reset
            without affecting other functions in the same device.
            For devices that have this support, a file named reset
            will be present in sysfs.  Writing 1 to this file
            will perform reset.

5

สิ่งที่ใกล้เคียงที่สุดที่บัส PCI มีสำหรับการรีเซ็ตระดับอุปกรณ์กำลังเปลี่ยนสถานะพลังงานเป็น D3 และกลับไปเป็น D0 หลังจากการยกเลิกการโหลดไดรเวอร์ (จะเป็นการดีที่จะรีเซ็ตฮาร์ดแวร์ออกจากใต้ไดรเวอร์) คุณสามารถใช้setpciเพื่อเขียนลงทะเบียนควบคุมเพื่อเปลี่ยนสถานะพลังงาน แต่ฉันเชื่อว่าสิ่งนี้จะเกิดขึ้นโดยอัตโนมัติเมื่อคุณยกเลิกการโหลดไดรเวอร์


1

เนื่องจากอุปกรณ์ PCI ทั่วไปไม่สามารถเสียบได้จึงไม่มีวิธีการรีเซ็ตและให้เคอร์เนลระบุอีกครั้ง

ไม่ว่าคุณจะพยายามแก้ไขปัญหาประเภทใดย่อมมีวิธีที่ดีกว่าการรีเซ็ต


4
ฉันกำลังจำลองอุปกรณ์ PCI ใน QEMU และจำเป็นต้องรีเซ็ตสถานะเป็นขณะที่ฉันพัฒนา ฉันต้องการที่จะทำจากภายในแขก
โจนาธาน

1
ฉันมีการ์ดกล้องวงจรปิด pci buggy มันทำงานได้ แต่บางครั้งก็ตายด้วย segfault หลังจากนั้นทั้งระบบจะต้องเริ่มต้นใหม่ด้วยการรีเซ็ต PCI ซึ่งสามารถหลีกเลี่ยงได้ ... ระบบมีเสถียรภาพไม่เป็นอันตรายเพียงอินพุตวิดีโอจะว่างเปล่าดังนั้นบางครั้งก็เป็นวิธีที่ดีกว่าในการรีเซ็ต PCI มากกว่าการรีสตาร์ท เครื่องทั้งหมดทุกวัน (โดยเฉพาะถ้าคุณอยู่ห่างจากเครื่อง 8,000 กม. เป็นเวลา 6 เดือน)
Gipsz Jakab

1

ปัญหาเกี่ยวกับวิธีแก้ไขปัญหาข้างต้นคือต้องการความร่วมมือของอุปกรณ์ อย่างไรก็ตามในสถานการณ์ส่วนใหญ่เหตุผลในการรีเซ็ตมันเป็นสิ่งที่ไม่ใช่ความร่วมมือ

อย่างไรก็ตามตามที่อธิบายไว้ที่นี่มีอีกวิธี "ยากขึ้น" ในการรีเซ็ตในระดับ PCI: เราลบมันออกจากบัส PCI แล้วใส่กลับเข้าไปใหม่โดย rescan

ขั้นตอน:

  1. echo 1 >/sys/bus/pci/<pci-id-of-device>/remove. เราสามารถค้นหา PCI ID ด้วยlspciคำสั่ง
  2. echo 1 >/sys/bus/pci/rescan

ฉันมีอุปกรณ์ pc buggy ที่นี่บางครั้งรีเซ็ตระดับ PCI บางครั้งเคล็ดลับการกำจัด readd นี้แก้ไขได้ ฉันกำลังจะเขียนสคริปต์เพื่อทำแบบอัตโนมัติ :-)


ฮึ. คอนโทรลเลอร์ USB ของฉันยังคงบั๊กแม้หลังจากรีเซ็ตแล้ว
Chris

@ Chris คุณแน่ใจหรือว่ามันเป็นคอนโทรลเลอร์และไม่ใช่อุปกรณ์ในนั้น
peterh - Reinstate Monica

00:14.0 USB controller: Intel Corporation 200 Series/Z370 Chipset Family USB 3.0 xHCI Controllerใช่ฉันแน่ใจว่ามันเป็นตัวควบคุม ฉันส่งต่อไปยัง VM ผ่าน VFIO และหลังจาก VM รีบูตฉันต้องรีบูตโฮสต์เพื่อให้ทำงานได้อีกครั้งมิฉะนั้นจะตรวจพบการเสียบ USB ใด ๆ แต่การสื่อสารล้มเหลว
Chris
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.