Re: xhci irq event bogus return value ffffff94

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

 



On Mon, 20 Apr 2015, Joe Lawrence wrote:

> Hi all, 
> 
> I noticed a xhci warning on Stratus fault-tolerant box running automated
> surprise device removal tests over the weekend:
> 
> irq event 95: bogus return value ffffff94
> CPU: 0 PID: 31710 Comm: kworker/u97:2 Tainted: PF          O--------------   3.10.0-229.el7.x86_64 #1
> Hardware name: Stratus ftServer 6800/G7LYY, BIOS BIOS Version 8.0:38 03/30/2015
> Workqueue: events_unbound async_run_entry_fn
> ffff88037dd8ada0 000000009c52d75c ffff88085fa03cd8 ffffffff81603f36
> ffff88085fa03d00 ffffffff8110d852 ffff88037dd8ada0 000000000000005f
> 00000000ffffff94 ffff88085fa03d40 ffffffff8110dc1c 000000009c52d75c
> Call Trace:
> <IRQ>  [<ffffffff81603f36>] dump_stack+0x19/0x1b
> [<ffffffff8110d852>] __report_bad_irq+0x32/0xd0
> [<ffffffff8110dc1c>] note_interrupt+0xdc/0x1f0
> [<ffffffff8110b381>] handle_irq_event_percpu+0xe1/0x1e0
> [<ffffffff8110b4bd>] handle_irq_event+0x3d/0x60
> [<ffffffff8110e157>] handle_edge_irq+0x77/0x130
> [<ffffffff81015c9f>] handle_irq+0xbf/0x150
> [<ffffffff81077d27>] ? irq_enter+0x17/0xa0
> [<ffffffff8161626f>] do_IRQ+0x4f/0xf0
> [<ffffffff8160b4ed>] common_interrupt+0x6d/0x6d
> [<ffffffff810abe65>] ? sched_clock_cpu+0xb5/0x100
> [<ffffffff81077adb>] ? __do_softirq+0x9b/0x280
> [<ffffffff816156dc>] call_softirq+0x1c/0x30
> [<ffffffff81015d95>] do_softirq+0x65/0xa0
> [<ffffffff81077ec5>] irq_exit+0x115/0x120
> [<ffffffff81616355>] smp_apic_timer_interrupt+0x45/0x60
> [<ffffffff81614a1d>] apic_timer_interrupt+0x6d/0x80
> <EOI>  [<ffffffff8107089f>] ? vprintk_emit+0x1bf/0x530
> [<ffffffff815fd9ef>] printk+0x77/0x8e
> [<ffffffffa0390340>] ? _scsih_suspend+0xb0/0xb0 [mpt3sas]
> [<ffffffffa038b144>] mpt3sas_port_enable+0x24/0x100 [mpt3sas]
> [<ffffffffa039038f>] _scsih_scan_start+0x4f/0x70 [mpt3sas]
> [<ffffffff813fc6c7>] do_scsi_scan_host+0x37/0xa0
> [<ffffffff813fc8fc>] do_scan_async+0x1c/0x150
> [<ffffffff8109e839>] async_run_entry_fn+0x39/0x120
> [<ffffffff8108f0ab>] process_one_work+0x17b/0x470
> [<ffffffff8108fe8b>] worker_thread+0x11b/0x400
> [<ffffffff8108fd70>] ? rescuer_thread+0x400/0x400
> [<ffffffff8109726f>] kthread+0xcf/0xe0
> [<ffffffff810971a0>] ? kthread_create_on_node+0x140/0x140
> [<ffffffff81613cfc>] ret_from_fork+0x7c/0xb0
> [<ffffffff810971a0>] ? kthread_create_on_node+0x140/0x140
> handlers:
> [<ffffffff81458c70>] xhci_msi_irq
> 
> drivers/usb/host/xhci-ring.c :
> 
> irqreturn_t xhci_irq(struct usb_hcd *hcd)
> {
>         struct xhci_hcd *xhci = hcd_to_xhci(hcd);
>         u32 status;
>         u64 temp_64;
>         union xhci_trb *event_ring_deq;
>         dma_addr_t deq;
> 
>         spin_lock(&xhci->lock);
>         /* Check if the xHC generated the interrupt, or the irq is shared */
>         status = readl(&xhci->op_regs->status);
>         if (status == 0xffffffff)
>                 goto hw_died;
> 
>         if (!(status & STS_EINT)) {
>                 spin_unlock(&xhci->lock);
>                 return IRQ_NONE;
>         }
>         if (status & STS_FATAL) {
>                 xhci_warn(xhci, "WARNING: Host System Error\n");
>                 xhci_halt(xhci);
> hw_died:
>                 spin_unlock(&xhci->lock);
>                 return -ESHUTDOWN;
>         }
> 	...
> 
> So -ESHUTDOWN = -108 (0xffffff94) provoked bad_action_ret into reporting
> a bogus return value and stack trace above.

As far as I know, -Eanything is never a valid return code for an IRQ
handler.  Shouldn't this always return either IRQ_NONE or IRQ_HANDLED?

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




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

  Powered by Linux