Re: ehci-hcd.c causes: irq <number>: nobody cared

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, May 14, 2014 at 10:32:21AM -0400, Alan Stern wrote:
> On Tue, 13 May 2014, Dr. Werner Fink wrote:
> 
> > On Tue, May 13, 2014 at 06:10:46PM +0200, Dr. Werner Fink wrote:
> > > On Tue, May 13, 2014 at 11:59:38AM -0400, Alan Stern wrote:
> > > > 
> > > > What about something like this instead?
> > > > 
> > > >  	masked_status = status & (INTR_MASK | STS_FLR);
> > > >  
> > > >  	/* Shared IRQ? */
> > > >  	if (!masked_status || unlikely(ehci->rh_state == EHCI_RH_HALTED)) {
> > > > +		if (status & STS_RECL) {
> > > > +			ehci_writel(ehci, STS_RECL, &ehci->regs->status);
> > > > +			ehci_readl(ehci, &ehci->regs->status);
> > > > +		}
> > > >  		spin_unlock_irqrestore(&ehci->lock, flags);
> > > >  		return IRQ_NONE;
> > > >  	}
> > > > 
> > > > That should do about the same thing as your change, except for
> > > > returning IRQ_NONE rather than IRQ_HANDLED.
> > > 
> > > I'll forward this to my home to try it out.  It will take some time
> > > as my wife is also working on this system.  Nevertheless I'm curious
> > > about it.
> > 
> > The code is active now:
> 
> ...
> 
> > it works.
> 
> Does it still work if you omit the ehci_readl() call?
> 
> If you want to submit a patch containing this fix, please add a quirk 
> flag for it.  And a comment explaining why the ehci_writel() call is 
> needed.

During debugging and rebooting I've seen the problem again:

speedy:linux # dmesg  | grep nobody -A20
[ 3703.558137] irq 16: nobody cared (try booting with the "irqpoll" option)
[ 3703.558140] Pid: 0, comm: swapper/1 Not tainted 3.7.10-1.32-desktop #6
[ 3703.558141] Call Trace:
[ 3703.558149]  [<ffffffff81004818>] dump_trace+0x88/0x300
[ 3703.558153]  [<ffffffff8158b543>] dump_stack+0x69/0x6f
[ 3703.558157]  [<ffffffff810d6c4f>] __report_bad_irq+0x2f/0xe0
[ 3703.558159]  [<ffffffff810d7158>] note_interrupt+0x1e8/0x240
[ 3703.558163]  [<ffffffff810d4772>] handle_irq_event_percpu+0xc2/0x250
[ 3703.558165]  [<ffffffff810d4947>] handle_irq_event+0x47/0x70
[ 3703.558168]  [<ffffffff810d7c50>] handle_fasteoi_irq+0x60/0x100
[ 3703.558169]  [<ffffffff810046c8>] handle_irq+0x18/0x30
[ 3703.558171]  [<ffffffff810043a2>] do_IRQ+0x52/0xd0
[ 3703.558174]  [<ffffffff8159856d>] common_interrupt+0x6d/0x6d
[ 3703.558179]  [<ffffffff8132038c>] intel_idle+0xec/0x160
[ 3703.558182]  [<ffffffff8145317d>] cpuidle_idle_call+0x9d/0x330
[ 3703.558185]  [<ffffffff8100be0a>] cpu_idle+0x6a/0xe0
[ 3703.558189]  [<ffffffff815840f4>] start_secondary+0x20d/0x212
[ 3703.558190] handlers:
[ 3703.558192] [<ffffffff813f2510>] usb_hcd_irq
[ 3703.558203] [<ffffffffa0281940>] rtl8139_interrupt [8139too]
[ 3703.558203] Disabling IRQ #16
speedy:linux # grep 16: /proc/interrupts 
 16:        105     191676       8248          0          0          0          0          0   IO-APIC-fasteoi   ehci_hcd:usb1, eth1

Now the network is very slow.

Sidemark ... I've tried to check the Vendor/Product indentifier but run into
the problem that I'd like to see the hrdware and not the driver vendor and product. That is I'd like to check for the added lines:

  drivers/usb/core/quirks.c:

        /* INTEL Hub */
        { USB_DEVICE(0x8087, 0x0024), .driver_info = USB_QUIRK_STATUS_RECL },

  include/linux/usb/quirks.h:

  /* device may cause the STS_RECL status register bit in IRQ if it is
     not used.  This is a readonly bit, which is used to detect an empty
     asynchronous schedule. */
  #define USB_QUIRK_STATUS_RECL           0x00000080

in drivers/usb/host/ehci-hcd.c : ehci_irq() where I've added

   struct usb_device       *hub;

   hub = hcd->self.root_hub;
   if (hub->quirks & USB_QUIRK_STATUS_RECL)
           printk_once(KERN_WARNING FW_BUG "QUIRK: INTEL hub found!");
   printk_once(KERN_WARNING FW_BUG "EHCI Hub: Vendor %x Product %x",
           le16_to_cpu(hub->descriptor.idVendor),
           le16_to_cpu(hub->descriptor.idProduct));

but then seen the Linux Foundation as Vendor and not the hardware hub.

Werner

Attachment: pgpeKLae986xG.pgp
Description: PGP signature


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux