Hi David, hi all,

I found the problem which makes the scsi_eh_1 get stuck when connecting the
ARCHOS Jukebox on th fly:

The problem is that the lower layers do return a scsi-cmd with "DID_ERROR<<16
(=0x70000)", but the usb-storage insists to complete the command instead, thus
waiting forever.

The following patch to usb.c does it for me.

--- usb.c       Mon Apr  1 16:08:31 2002
+++ usb.c.org   Mon Apr  1 16:07:15 2002
@@ -461,9 +461,7 @@
                        up(&(us->dev_semaphore));

                        /* indicate that the command is done */
-/*cm 01-Apr-02: allow also DID_ERROR as premature abort of command */
-                       if ((us->srb->result != DID_ABORT << 16) &&
(us->srb->result != DID_ERROR << 16)) {
-/* original line:      if (us->srb->result != DID_ABORT << 16) { */
+                       if (us->srb->result != DID_ABORT << 16) {
                                US_DEBUGP("scsi cmd done, result=0x%x\n",
                                           us->srb->result);
                                set_current_state(TASK_INTERRUPTIBLE);


Perhaps this is not the only error situation where a command is not completed?

At least, this solution retries the SCSI command now and the driver becomes
properly connected on the 2nd try.

Who of you can introduce this change into the current code?

Christian


Christian Mahr wrote:

> Hi David,
>
> I just tried 2.4.19-pre5 and I do notice the same effects:
>
> ps -ax (excerpt):
>  3616 ?        SW     0:00 [khubd]
>  3646 ?        Z      0:00 [cron <defunct>]
>  3648 ?        S      0:00 /bin/bash /etc/hotplug/usb.agent
>  3667 ?        D      0:00 /sbin/modprobe -vs usb-storage
>  3668 ?        SW     0:00 [usb-storage-0]
>  3669 ?        DW     0:00 [scsi_eh_1]
>  3671 pts/3    R      0:00 ps ax
>
> So this time modprobe usb-storage and scsi_eh_1 are blocked...
>
> /var/log/messages gives the following:
> Apr  1 11:58:50 Mahrmaid kernel: hcd.c: ehci-hcd @ 00:12.2, NEC Corporation
> USB 2.0
> Apr  1 11:58:50 Mahrmaid kernel: hcd.c: PCI latency reduced to max 34
> Apr  1 11:58:50 Mahrmaid kernel: hcd.c: irq 11, pci mem ceae2000
> Apr  1 11:58:50 Mahrmaid kernel: usb.c: new USB bus registered, assigned bus
> number 1
> Apr  1 11:58:50 Mahrmaid kernel: ehci-dbg.c: ehci_start hcs_params 0x2395
> dbg=0 cc=2 pcc=3 ports=5
> Apr  1 11:58:50 Mahrmaid kernel: ehci-dbg.c: 00:12.2: ehci_start portroute 1
> 0 1 0 0
> Apr  1 11:58:50 Mahrmaid kernel: ehci-dbg.c: ehci_start hcc_params 0x0002
> caching 0 uframes 256/512/1024
> Apr  1 11:58:50 Mahrmaid kernel: ehci-hcd.c: reset 80002 cmd (park)=0
> ithresh=8 period=1024 Reset HALT
> Apr  1 11:58:50 Mahrmaid kernel: ehci-hcd.c: init 10000 cmd (park)=0
> ithresh=1 period=1024 HALT
> Apr  1 11:58:50 Mahrmaid kernel: ehci-hcd.c: USB 2.0 support enabled, EHCI
> rev 0.95
> Apr  1 11:58:50 Mahrmaid kernel: hcd.c: 00:12.2 root hub device address 1
> Apr  1 11:58:50 Mahrmaid kernel: usb.c: kmalloc IF c340f880, numif 1
> Apr  1 11:58:50 Mahrmaid kernel: usb.c: new device strings: Mfr=3, Product=2,
> SerialNumber=1
> Apr  1 11:58:50 Mahrmaid kernel: usb.c: USB device number 1 default language
> ID 0x0
> Apr  1 11:58:50 Mahrmaid kernel: Manufacturer: Linux 2.4.19-pre5 ehci-hcd
> Apr  1 11:58:50 Mahrmaid kernel: Product: NEC Corporation USB 2.0
> Apr  1 11:58:50 Mahrmaid kernel: SerialNumber: 00:12.2
> Apr  1 11:58:50 Mahrmaid kernel: hub.c: USB hub found
> Apr  1 11:58:50 Mahrmaid kernel: hub.c: 5 ports detected
> Apr  1 11:58:50 Mahrmaid kernel: hub.c: standalone hub
> Apr  1 11:58:50 Mahrmaid kernel: hub.c: individual port power switching
> Apr  1 11:58:50 Mahrmaid kernel: hub.c: individual port over-current
> protection
> Apr  1 11:58:50 Mahrmaid kernel: hub.c: Single TT
> Apr  1 11:58:50 Mahrmaid kernel: hub.c: TT requires at most 8 FS bit times
> Apr  1 11:58:50 Mahrmaid kernel: hub.c: Port indicators are not supported
> Apr  1 11:58:50 Mahrmaid kernel: hub.c: power on to power good time: 0ms
> Apr  1 11:58:50 Mahrmaid kernel: hub.c: hub controller current requirement:
> 0mA
> Apr  1 11:58:50 Mahrmaid kernel: hub.c: port removable status: RRRRR
> Apr  1 11:58:50 Mahrmaid kernel: hub.c: local power source is good
> Apr  1 11:58:50 Mahrmaid kernel: hub.c: no over-current condition exists
> Apr  1 11:58:50 Mahrmaid kernel: hub.c: enabling power on all ports
> Apr  1 11:58:50 Mahrmaid kernel: usb.c: hub driver claimed interface c340f880
>
> Apr  1 11:58:50 Mahrmaid kernel: usb.c: kusbd: /sbin/hotplug add 1
> Apr  1 11:59:00 Mahrmaid /USR/SBIN/CRON[3647]: (root) CMD ( rm -f
> /var/spool/cron/lastrun/cron.hourly)
> Apr  1 11:59:04 Mahrmaid kernel: ehci-hub.c: GetStatus port 1 status 0x1803
> POWER speed=2 CSC CONNECT
> Apr  1 11:59:04 Mahrmaid kernel: hub.c: port 1, portstatus 501, change 1, 480
> Mb/s
> Apr  1 11:59:04 Mahrmaid kernel: hub.c: port 1 connection change
> Apr  1 11:59:04 Mahrmaid kernel: hub.c: port 1, portstatus 501, change 1, 480
> Mb/s
> Apr  1 11:59:04 Mahrmaid kernel: hub.c: port 1, portstatus 501, change 0, 480
> Mb/s
> Apr  1 11:59:04 Mahrmaid last message repeated 3 times
> Apr  1 11:59:04 Mahrmaid kernel: hub.c: port 1, portstatus 511, change 0, 480
> Mb/s
> Apr  1 11:59:04 Mahrmaid kernel: hub.c: port 1 of hub 1 not reset yet,
> waiting 10ms
> Apr  1 11:59:04 Mahrmaid kernel: hub.c: port 1, portstatus 511, change 0, 480
> Mb/s
> Apr  1 11:59:04 Mahrmaid kernel: hub.c: port 1 of hub 1 not reset yet,
> waiting 10ms
> Apr  1 11:59:04 Mahrmaid kernel: ehci-hub.c: 00:12.2 port 1 high speed
> Apr  1 11:59:04 Mahrmaid kernel: ehci-hub.c: GetStatus port 1 status 0x1005
> POWER speed=0 PE CONNECT
> Apr  1 11:59:04 Mahrmaid kernel: hub.c: port 1, portstatus 503, change 10,
> 480 Mb/s
> Apr  1 11:59:04 Mahrmaid kernel: hub.c: USB new device connect on bus1/1,
> assigned device number 2
> Apr  1 11:59:05 Mahrmaid kernel: usb.c: kmalloc IF c340f980, numif 1
> Apr  1 11:59:05 Mahrmaid kernel: usb.c: new device strings: Mfr=73,
> Product=90, SerialNumber=110
> Apr  1 11:59:05 Mahrmaid kernel: usb.c: USB device number 2 default language
> ID 0x409
> Apr  1 11:59:05 Mahrmaid kernel: Manufacturer: ARCHOS
> Apr  1 11:59:05 Mahrmaid kernel: Product: ARCHOS USB2.0 (P4a)
> Apr  1 11:59:05 Mahrmaid kernel: SerialNumber: wwww.archos.comA
> Apr  1 11:59:05 Mahrmaid kernel: usb.c: unhandled interfaces on device
> Apr  1 11:59:05 Mahrmaid kernel: usb.c: USB device 2 (vend/prod 0x5ab/0x60)
> is not claimed by any active driver.
> Apr  1 11:59:05 Mahrmaid kernel:   Length              = 18
> Apr  1 11:59:05 Mahrmaid kernel:   DescriptorType      = 01
> Apr  1 11:59:05 Mahrmaid kernel:   USB version         = 2.00
> Apr  1 11:59:05 Mahrmaid kernel:   Vendor:Product      = 05ab:0060
> Apr  1 11:59:05 Mahrmaid kernel:   MaxPacketSize0      = 64
> Apr  1 11:59:05 Mahrmaid kernel:   NumConfigurations   = 1
> Apr  1 11:59:05 Mahrmaid kernel:   Device version      = 11.01
> Apr  1 11:59:05 Mahrmaid kernel:   Device Class:SubClass:Protocol = 00:00:00
> Apr  1 11:59:05 Mahrmaid kernel:     Per-interface classes
> Apr  1 11:59:05 Mahrmaid kernel: Configuration:
> Apr  1 11:59:05 Mahrmaid kernel:   bLength             =    9
> Apr  1 11:59:05 Mahrmaid kernel:   bDescriptorType     =   02
> Apr  1 11:59:05 Mahrmaid kernel:   wTotalLength        = 0027
> Apr  1 11:59:05 Mahrmaid kernel:   bNumInterfaces      =   01
> Apr  1 11:59:05 Mahrmaid kernel:   bConfigurationValue =   02
> Apr  1 11:59:05 Mahrmaid kernel:   iConfiguration      =   00
> Apr  1 11:59:05 Mahrmaid kernel:   bmAttributes        =   c0
> Apr  1 11:59:05 Mahrmaid kernel:   MaxPower            =   98mA
> Apr  1 11:59:05 Mahrmaid kernel:
> Apr  1 11:59:05 Mahrmaid kernel:   Interface: 0
> Apr  1 11:59:05 Mahrmaid kernel:   Alternate Setting:  0
> Apr  1 11:59:05 Mahrmaid kernel:     bLength             =    9
> Apr  1 11:59:05 Mahrmaid kernel:     bDescriptorType     =   04
> Apr  1 11:59:05 Mahrmaid kernel:     bInterfaceNumber    =   00
> Apr  1 11:59:05 Mahrmaid kernel:     bAlternateSetting   =   00
> Apr  1 11:59:05 Mahrmaid kernel:     bNumEndpoints       =   03
> Apr  1 11:59:05 Mahrmaid kernel:     bInterface Class:SubClass:Protocol =
> 08:06:50
> Apr  1 11:59:05 Mahrmaid kernel:     iInterface          =   00
> Apr  1 11:59:05 Mahrmaid kernel:     Endpoint:
> Apr  1 11:59:05 Mahrmaid kernel:       bLength             =    7
> Apr  1 11:59:05 Mahrmaid kernel:       bDescriptorType     =   05
> Apr  1 11:59:05 Mahrmaid kernel:       bEndpointAddress    =   01 (out)
> Apr  1 11:59:05 Mahrmaid kernel:       bmAttributes        =   02 (Bulk)
> Apr  1 11:59:05 Mahrmaid kernel:       wMaxPacketSize      = 0200
> Apr  1 11:59:05 Mahrmaid kernel:       bInterval           =   01
> Apr  1 11:59:05 Mahrmaid kernel:     Endpoint:
> Apr  1 11:59:05 Mahrmaid kernel:       bLength             =    7
> Apr  1 11:59:05 Mahrmaid kernel:       bDescriptorType     =   05
> Apr  1 11:59:05 Mahrmaid kernel:       bEndpointAddress    =   82 (in)
> Apr  1 11:59:05 Mahrmaid kernel:       bmAttributes        =   02 (Bulk)
> Apr  1 11:59:05 Mahrmaid kernel:       wMaxPacketSize      = 0200
> Apr  1 11:59:05 Mahrmaid kernel:       bInterval           =   01
> Apr  1 11:59:05 Mahrmaid kernel:     Endpoint:
> Apr  1 11:59:05 Mahrmaid kernel:       bLength             =    7
> Apr  1 11:59:05 Mahrmaid kernel:       bDescriptorType     =   05
> Apr  1 11:59:05 Mahrmaid kernel:       bEndpointAddress    =   83 (in)
> Apr  1 11:59:05 Mahrmaid kernel:       bmAttributes        =   03 (Interrupt)
>
> Apr  1 11:59:05 Mahrmaid kernel:       wMaxPacketSize      = 0002
> Apr  1 11:59:05 Mahrmaid kernel:       bInterval           =   09
> Apr  1 11:59:05 Mahrmaid kernel: usb.c: kusbd: /sbin/hotplug add 2
> Apr  1 11:59:05 Mahrmaid kernel: hub.c: port 2, portstatus 100, change 0, 12
> Mb/s
> Apr  1 11:59:05 Mahrmaid kernel: hub.c: port 3, portstatus 100, change 0, 12
> Mb/s
> Apr  1 11:59:05 Mahrmaid kernel: hub.c: port 4, portstatus 100, change 0, 12
> Mb/s
> Apr  1 11:59:05 Mahrmaid kernel: hub.c: port 5, portstatus 100, change 0, 12
> Mb/s
> Apr  1 11:59:05 Mahrmaid kernel: Initializing USB Mass Storage driver...
> Apr  1 11:59:05 Mahrmaid kernel: usb.c: registered new driver usb-storage
> Apr  1 11:59:05 Mahrmaid kernel: scsi1 : SCSI emulation for USB Mass Storage
> devices
> Apr  1 11:59:11 Mahrmaid kernel: ehci-hcd.c: 00:12.2 urb_dequeue ca353840 qh
> state 1
> Apr  1 11:59:11 Mahrmaid kernel: hcd.c: giveback urb ca353840 status -104
> Apr  1 11:59:15 Mahrmaid kernel: ehci-q.c: ep 2-in qtd token 000d8d50 -->
> status -75
> Apr  1 11:59:15 Mahrmaid kernel: hcd.c: giveback urb ca353840 status -75
>
> with these error messages -104 and -75, the whole thing gets stuck.
> /proc/scsi/scsi is incomplete:
>
> Host: scsi1 Channel: 00 Id: 00 Lun: 00
>   Vendor:          Model:                  Rev:
>   Type:   <NULL>                ANSI SCSI revision: ffffffff
>
> In my understanding the origin migth be misbehavior of the drive when
> connected after start of the usb drivers.
>
> I believe that usb-storage might wait for something forever which does not
> happen because of errors
> on lower layers. anyhow, I believe that waiting forever is wrong here, don't
> we need some timeouts here?
>
> How can I processd debugging? Do you want me to generate more information?
> how?
> How can I attach to the modules in "d" state? can I used gdb for this?
>
> Thanks for helping
>         Christian
>
> David Brownell wrote:
>
> > > > Do the startup problems happen when you use USB 1.1 speeds,
> > > > only using an OHCI or UHCI host controller driver (not ehci-hcd)?
> > > >
> > >
> > > yes,  same problem.
> >
> > Highly suggestive of a device bug/quirk ...
> >
> > > >     http://www.archos.com/us/products/product_500277.html
> > > >
> > > > doesn't say the device has been USB 2.0 qualified, and does
> > > > not use the USB 2.0 logo.  It's not listed on the www.usb.org
> > > > page of products that are compliant.  That's suggestive ... it'd
> > > > be worth contacting Archos to ask what gives.  (USB 2.0 has
> > > > a compliance program for good reasons ... :)
> > >
> > > The logo is on the drive...?
> >
> > The new red/blue "compliant" logo?  It's not on the web page,
> > which is surprising.   Instead Archos has their own logo, which
> > doesn't indicate compliance ...
> >
> > > > Sounds somewhat right to me, I've seen that failure mode.
> > > > So far nothing seems to suggest it's trouble in EHCI.
> > >
> > > Just want to mention: even if the drive itself misbehaves, the driver
> > > should not become stuck forever in "D " or DW" state.
> > > In my situation, I have to re-boot to restart usb. Killing the processes
> > > doesn't work.
> >
> > Agreed; yes, that's a nasty usb-storage failure mode.
> >
> > > > You might try this on a more recent kernel (2.4.19-pre5?), and try
> > > > enabling mass storage debug to get more info.  Matt recently posted
> > > > some rework of that exception handling code, and it's also possible
> > > > this device needs some storage quirk handling before it behaves.
> > >
> > > Thanks, I am just about to try 2.4.19-pre5 (downloading this currently).
> > > Do I need to apply additional patches to this?
> > > I will report on 2.4.19-pre5.
> >
> > I'll forward that patch, it's against pre5.
> >
> > - Dave
>
> --
> Christian Mahr (privat)                  [EMAIL PROTECTED]
>
> _______________________________________________
> [EMAIL PROTECTED]
> To unsubscribe, use the last form field at:
> https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

--
Christian Mahr (privat)                  [EMAIL PROTECTED]




_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to