lkml.org 
[lkml]   [2015]   [Sep]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.19.y-ckt 039/102] drivers/usb: Delete XHCI command timer if necessary
    Date
    3.19.8-ckt7 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Gavin Shan <gwshan@linux.vnet.ibm.com>

    commit ffe5adcb7661d94e952d6b5ed7f493cb4ef0c7bc upstream.

    When xhci_mem_cleanup() is called, it's possible that the command
    timer isn't initialized and scheduled. For those cases, to delete
    the command timer causes soft-lockup as below stack dump shows.

    The patch avoids deleting the command timer if it's not scheduled
    with the help of timer_pending().

    NMI watchdog: BUG: soft lockup - CPU#40 stuck for 23s! [kworker/40:1:8140]
    :
    NIP [c000000000150b30] lock_timer_base.isra.34+0x90/0xa0
    LR [c000000000150c24] try_to_del_timer_sync+0x34/0xa0
    Call Trace:
    [c000000f67c975e0] [c0000000015b84f8] mon_ops+0x0/0x8 (unreliable)
    [c000000f67c97620] [c000000000150c24] try_to_del_timer_sync+0x34/0xa0
    [c000000f67c97660] [c000000000150cf0] del_timer_sync+0x60/0x80
    [c000000f67c97690] [c00000000070ac0c] xhci_mem_cleanup+0x5c/0x5e0
    [c000000f67c97740] [c00000000070c2e8] xhci_mem_init+0x1158/0x13b0
    [c000000f67c97860] [c000000000700978] xhci_init+0x88/0x110
    [c000000f67c978e0] [c000000000701644] xhci_gen_setup+0x2b4/0x590
    [c000000f67c97970] [c0000000006d4410] xhci_pci_setup+0x40/0x190
    [c000000f67c979f0] [c0000000006b1af8] usb_add_hcd+0x418/0xba0
    [c000000f67c97ab0] [c0000000006cb15c] usb_hcd_pci_probe+0x1dc/0x5c0
    [c000000f67c97b50] [c0000000006d3ba4] xhci_pci_probe+0x64/0x1f0
    [c000000f67c97ba0] [c0000000004fe9ac] local_pci_probe+0x6c/0x130
    [c000000f67c97c30] [c0000000000e5ce8] work_for_cpu_fn+0x38/0x60
    [c000000f67c97c60] [c0000000000eacb8] process_one_work+0x198/0x470
    [c000000f67c97cf0] [c0000000000eb6ac] worker_thread+0x37c/0x5a0
    [c000000f67c97d80] [c0000000000f2730] kthread+0x110/0x130
    [c000000f67c97e30] [c000000000009660] ret_from_kernel_thread+0x5c/0x7c

    Reported-by: Priya M. A <priyama2@in.ibm.com>
    Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Kamal Mostafa <kamal@canonical.com>
    ---
    drivers/usb/host/xhci-mem.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
    index a67018e..d44c904 100644
    --- a/drivers/usb/host/xhci-mem.c
    +++ b/drivers/usb/host/xhci-mem.c
    @@ -1796,7 +1796,8 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
    int size;
    int i, j, num_ports;

    - del_timer_sync(&xhci->cmd_timer);
    + if (timer_pending(&xhci->cmd_timer))
    + del_timer_sync(&xhci->cmd_timer);

    /* Free the Event Ring Segment Table and the actual Event Ring */
    size = sizeof(struct xhci_erst_entry)*(xhci->erst.num_entries);
    --
    1.9.1


    \
     
     \ /
      Last update: 2015-09-22 20:41    [W:2.987 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site