USB-Probleme mit 8.0 und Thinkpad t43

Flas

Well-Known Member
Hallo,

leider musste ich nach dem Update von 7.2 auf 8.0 feststellen, dass der neue USB-Stack sich nicht mehr mit meinem Denkbrett verträgt. Wenn ich zum Beispiel versuche ne ganz normale SD-Karte vom Cardreader zu lesen, geht das relativ bald in die Hose. Sieht dann so aus:

Erkannt wird erstmal alles:
Code:
ugen4.2: <Generic> at usbus4
umass0: <Generic Mass Storage Device, class 0/0, rev 2.00/1.29, addr 2> on usbus4
umass0:  SCSI over Bulk-Only; quirks = 0x0000
umass0:0:0:-1: Attached to scbus0
(probe0:umass-sim0:0:0:0): TEST UNIT READY. CDB: 0 0 0 0 0 0 
(probe0:umass-sim0:0:0:0): CAM Status: SCSI Status Error
(probe0:umass-sim0:0:0:0): SCSI Status: Check Condition
(probe0:umass-sim0:0:0:0): UNIT ATTENTION csi:0,aa,55,41 asc:28,0
(probe0:umass-sim0:0:0:0): Not ready to ready change, medium may have changed field replaceable unit: 1
(probe0:umass-sim0:0:0:0): Retrying Command (per Sense Data)
da0 at umass-sim0 bus 0 target 0 lun 0
da0: <Generic USB SD Reader 1.00> Removable Direct Access SCSI-0 device 
da0: 40.000MB/s transfers
da0: 3864MB (7913472 512 byte sectors: 255H 63S/T 492C)
(probe0:umass-sim0:0:0:1): TEST UNIT READY. CDB: 0 20 0 0 0 0 
(probe0:umass-sim0:0:0:1): CAM Status: SCSI Status Error
(probe0:umass-sim0:0:0:1): SCSI Status: Check Condition
(probe0:umass-sim0:0:0:1): NOT READY csi:0,aa,55,41 asc:3a,0
(probe0:umass-sim0:0:0:1): Medium not present field replaceable unit: 1
(probe0:umass-sim0:0:0:1): Unretryable error
da1 at umass-sim0 bus 0 target 0 lun 1
da1: <Generic USB CF Reader 1.01> Removable Direct Access SCSI-0 device 
da1: 40.000MB/s transfers
da1: Attempt to query device size failed: NOT READY, Medium not present
(probe0:umass-sim0:0:0:2): TEST UNIT READY. CDB: 0 40 0 0 0 0 
(probe0:umass-sim0:0:0:2): CAM Status: SCSI Status Error
(probe0:umass-sim0:0:0:2): SCSI Status: Check Condition
(probe0:umass-sim0:0:0:2): NOT READY csi:0,aa,55,41 asc:3a,0
(probe0:umass-sim0:0:0:2): Medium not present field replaceable unit: 1
(probe0:umass-sim0:0:0:2): Unretryable error
da2 at umass-sim0 bus 0 target 0 lun 2
da2: <Generic USB SM Reader 1.02> Removable Direct Access SCSI-0 device 
da2: 40.000MB/s transfers
da2: Attempt to query device size failed: NOT READY, Medium not present
GEOM: da0: partition 1 does not start on a track boundary.
GEOM: da0: partition 1 does not end on a track boundary.
(probe0:umass-sim0:0:0:3): TEST UNIT READY. CDB: 0 60 0 0 0 0 
(probe0:umass-sim0:0:0:3): CAM Status: SCSI Status Error
(probe0:umass-sim0:0:0:3): SCSI Status: Check Condition
(probe0:umass-sim0:0:0:3): NOT READY csi:0,aa,55,41 asc:3a,0
(probe0:umass-sim0:0:0:3): Medium not present field replaceable unit: 1
(probe0:umass-sim0:0:0:3): Unretryable error
da3 at umass-sim0 bus 0 target 0 lun 3
da3: <Generic USB MS Reader 1.03> Removable Direct Access SCSI-0 device 
da3: 40.000MB/s transfers
da3: Attempt to query device size failed: NOT READY, Medium not present

Aber dann, nach'm mounten und nen paar Sekunden Zugriff auf die Karte, friert der Lesevorgang plötzlich ein und solche Fehler tauchen auf:
Code:
g_vfs_done():da0s1[READ(offset=2446262272, length=65536)]error = 5
g_vfs_done():da0s1[READ(offset=2446327808, length=65536)]error = 5
g_vfs_done():da0s1[READ(offset=2446393344, length=65536)]error = 5
g_vfs_done():da0s1[WRITE(offset=4620288, length=32768)]error = 5
g_vfs_done():da0s1[READ(offset=2446196736, length=65536)]error = 5
g_vfs_done():da0s1[READ(offset=2446229504, length=65536)]error = 5
g_vfs_done():da0s1[READ(offset=2446295040, length=65536)]error = 5
g_vfs_done():da0s1[READ(offset=2446360576, length=65536)]error = 5
g_vfs_done():da0s1[READ(offset=2446426112, length=65536)]error = 5
g_vfs_done():da0s1[WRITE(offset=4620288, length=32768)]error = 5
g_vfs_done():da0s1[READ(offset=2446196736, length=32768)]error = 5

Lässt sich dann leider auch nichts mehr killen an Prozessen, die drauf zugreifen und unmounten kann man auch vergessen. Nachdem ich dann einfach mal den Stecker gezogen hab, waren die Ports danach tot bis zum nächsten Reboot:
Code:
ugen4.2: <Generic> at usbus4 (disconnected)
umass0: at uhub4, port 3, addr 2 (disconnected)
g_vfs_done():da0s1[WRITE(offset=4620288, length=32768)]error = 5
(da0:umass-sim0:0:0:0): lost device
(da1:umass-sim0:0:0:1): lost device
(da1:umass-sim0:0:0:1): removing device entry
(da2:umass-sim0:0:0:2): lost device
(da2:umass-sim0:0:0:2): removing device entry
(da3:umass-sim0:0:0:3): lost device
(da3:umass-sim0:0:0:3): removing device entry
Device da0s1 went missing before all of the data could be written to it; expect data loss.
(da0:umass-sim0:0:0:0): Synchronize cache failed, status == 0xa, scsi status == 0x0
(da0:umass-sim0:0:0:0): removing device entry


Ähnliche Probleme hab ich außerdem noch, wenn ich ihn einschlafen lasse (was tadellos funktioniert) un dabei ne USB-Platte dranlasse, kann man dann auch vergessen. Jedoch lässt die sich nachm Abziehen dann schon noch wieder mounten, sprich die Ports funktionieren noch.

Konnte leider rein garnichts brauchbares dazu in Mailinglisten und hier im Forum finden. Vielleicht jemand nen Tipp für mich?

PS: Ahja BIOS-USB-Support aktivieren / deaktivieren scheint keinerlei Veränderung zu zeigen..

Gruß
 
Es scheint so zu sein, dass sich beide Probleme mit "Quirks" lösen lassen könnten. Allerdings gibt es zu dem Thema auch nur seeehr dünn gestreute Informationen. Ich hab mal:

http://wiki.freebsd.org/USB

und

http://www.root.org/~nate/freebsd/scsi/quirks.html

gelesen und dann Folgendes in die /sys/dev/usb/storage/umass.c geschrieben:

Code:
        {USB_VENDOR_ALCOR, PID_WILDCARD, RID_WILDCARD,
                 UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
                 NO_TEST_UNIT_READY
         },

allerdings ist mir überhaupt nicht klar, wie genau Änderungen in dieser Datei verwurstet werden. Gibts irgendwo ne Makefile oder so? Hab einfach mal neu gestartet und danach nach anstecken und wieder abziehen des Cardreaders ne Kernel Panic gehabt, davor die gleichen Feheler :mad:.
Wenn jemand mehr zu dem Thema weis, wäre ich sehr Interessiert!

Gruß
 
Da ich es noch nie selbst gebraucht habe, auch von mir nur vage Informationen... Also, wenn du den Sourcecode direkt editierst, musst du anschließend den Kernel neubauen. Schneller ist es, nur die Module neuzubauen:
Code:
cd /usr/src/sys/modules/$modul
make obj ; make depend ; make ; make install ; make clean

Aber eigentlich ist es gar nicht nötig, denn beginnend mit 8.0 kann man per usbconfig(8) die Quirks zur Laufzeit setzen. Das ist einfacher und schneller, gerade wenn man es im Singleuser Mode macht, wo nichts gemountet ist und daher kein fsck nötig wird. Das Problem dabei ist, dass die Funktion mal gar nicht dokumentiert ist.
 
Ah, danke Yamagi, der Tipp mit dem Setzen zur Laufzeit hat mir schon mal ein bisschen weitergeholfen. Die Manpage zu usbconfig ist zwar echt ein Witz, aber "usbconfig -h" bringt etwas mehr Aufschluss. Denke, wenn ich mir das mit der umass.c so ansehe, kann man usbconfig schon benutzen.

Werds am Wochenende mal probieren!
 
Ein Erfahrungsbericht wäre dann toll.

Wenn du positive Ergebnisse erzielst, könntest du die ins Wiki gießen. Ich würde das ganze dann in die Manpage einbauen und einen PR schreiben.
 
Zurück
Oben