David Brownell wrote:
> 
> Yeah.  Well, at some level once you notice that INTR_SF lossage,
> I thik the only possible recovery is to reset the controller and
> then restart everything from scratch (re-enumerate etc).  Resetting
> should be easy; so maybe all you'd need to do is call ohci_restart()
> in a task context.

I tried this out to see what would happen.

ohci_hcd 0000:00:13.0: abort schedule...
ohci_hcd 0000:00:13.0: bogus ed c3f45640 state 0
irq 11: nobody cared (try booting with the "irqpoll" option)
 [<c012bf54>] __report_bad_irq+0x24/0x90
 [<c012c047>] note_interrupt+0x57/0xc0
 [<c012b747>] handle_IRQ_event+0x27/0x60
 [<c012c60b>] handle_level_irq+0xbb/0xe0
 [<c010468f>] do_IRQ+0x3f/0x80
 [<c0102df3>] common_interrupt+0x23/0x30
 [<c01128f0>] __do_softirq+0x30/0x80
 [<c0112975>] do_softirq+0x35/0x40
 [<c0104694>] do_IRQ+0x44/0x80
 [<c48178e3>] finish_unlinks+0x333/0x3a0 [ohci_hcd]
 [<c0102df3>] common_interrupt+0x23/0x30
 [<c4818b1e>] ohci_restart+0xbe/0x1f0 [ohci_hcd]
 [<c4833629>] terascala_write+0x209/0x3b0 [maint_drv]
 [<c4818897>] ohci_irq+0x147/0x210 [ohci_hcd]
 [<c012b747>] handle_IRQ_event+0x27/0x60
 [<c012c5f4>] handle_level_irq+0xa4/0xe0
 [<c0104694>] do_IRQ+0x44/0x80
 [<c01453a9>] vfs_write+0x99/0xf0
 [<c01454b1>] sys_write+0x41/0x70
 [<c0102bb0>] syscall_call+0x7/0xb
 [<c02b0033>] inet_getname+0x13/0x80
 =======================
handlers:
[<c4857c90>] (usb_hcd_irq+0x0/0x60 [usbcore])
[<c481ff20>] (e100_intr+0x0/0xc0 [e100])
Disabling IRQ #11
ohci_hcd 0000:00:13.0: resetting from state 'operational', control =
0x83
usb 1-2.2: usb_disable_device nuked URBs
usb 1-2.2: device has 1 interface(s)
usb 1-2.2: unregistering interface 1-2.2:1.0
 usbdev1.10_ep01: ep_device_release called for usbdev1.10_ep01
 usbdev1.10_ep82: ep_device_release called for usbdev1.10_ep82
terascala: terascala_usb_disconnect() Device removed. devpath=2.2 slot=1

usb 1-2.2:1.0: uevent
 usbdev1.10_ep00: ep_device_release called for usbdev1.10_ep00
usb 1-2.2: uevent
hub 1-2:1.0: hub_port_status failed (err = -108)
hub 1-2:1.0: connect-debounce failed, port 2 disabled
hub 1-2:1.0: cannot disable port 2 (err = -108)
hub 1-2:1.0: state 7 ports 7 chg 0000 evt 0004
hub 1-2:1.0: hub_port_status failed (err = -108)
ohci_hcd 0000:00:13.0: enabling initreset quirk
ohci_hcd 0000:00:13.0: OHCI controller state
ohci_hcd 0000:00:13.0: OHCI 1.0, NO legacy support registers
ohci_hcd 0000:00:13.0: control 0x083 HCFS=operational CBSR=3
ohci_hcd 0000:00:13.0: cmdstatus 0x00000 SOC=0
ohci_hcd 0000:00:13.0: intrstatus 0x00000004 SF
ohci_hcd 0000:00:13.0: intrenable 0x8000004a MIE RHSC RD WDH
ohci_hcd 0000:00:13.0: hcca frame #0003
ohci_hcd 0000:00:13.0: roothub.a 01000202 POTPGT=1 NPS NDP=2(2)
ohci_hcd 0000:00:13.0: roothub.b 00000000 PPCM=0000 DR=0000
ohci_hcd 0000:00:13.0: roothub.status 00008000 DRWE
ohci_hcd 0000:00:13.0: roothub.portstatus [0] 0x00000103 PPS PES CCS
ohci_hcd 0000:00:13.0: roothub.portstatus [1] 0x00000103 PPS PES CCS
ohci_hcd 0000:00:13.0: restart complete

This seems to kill it to the point where I'll need to reboot. It also
killed the Ethernet controller (which shares IRQ11). When you were
seeing the IRQ lossage problem, did the host controller share an IRQ
with any other device?

The only positive thing I can say about this particular experiment is
that it did finally release the endpoint (and you can see our
disconnect() method finally gets called).

> One other thing I'm slightly curious about:  whether the interrupt
> deferral mechanism (TD_DI_SET) affects this.  Try disabling it;
> the difference _should_ be only a significant (up to 6x) increase
> in the number of IRQs you get.

I tried this and it made no difference that I could see. It still failed
after a few hours.

Mike

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to