lkml.org 
[lkml]   [2017]   [Jun]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 080/108] usb: musb: Fix external abort on non-linefetch for musb_irq_work()
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

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

    From: Tony Lindgren <tony@atomide.com>


    [ Upstream commit 3ba7b7795b7e8889af1377904c55c7fae9e0c775 ]

    While testing musb host mode cable plugging on a BeagleBone, I came across this
    error:

    Unhandled fault: external abort on non-linefetch (0x1008) at 0xd1dcfc60
    ...
    [<bf668390>] (musb_default_readb [musb_hdrc]) from [<bf668578>] (musb_irq_work+0x1c/0x180 [musb_hdrc])
    [<bf668578>] (musb_irq_work [musb_hdrc]) from [<c0156554>] (process_one_work+0x2b4/0x808)
    [<c0156554>] (process_one_work) from [<c015767c>] (worker_thread+0x3c/0x550)
    [<c015767c>] (worker_thread) from [<c015d568>] (kthread+0x104/0x148)
    [<c015d568>] (kthread) from [<c01078d0>] (ret_from_fork+0x14/0x24)

    Signed-off-by: Tony Lindgren <tony@atomide.com>
    Signed-off-by: Bin Liu <b-liu@ti.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/usb/musb/musb_core.c | 11 +++++++++++
    1 file changed, 11 insertions(+)

    --- a/drivers/usb/musb/musb_core.c
    +++ b/drivers/usb/musb/musb_core.c
    @@ -1909,6 +1909,14 @@ static void musb_pm_runtime_check_sessio
    static void musb_irq_work(struct work_struct *data)
    {
    struct musb *musb = container_of(data, struct musb, irq_work.work);
    + int error;
    +
    + error = pm_runtime_get_sync(musb->controller);
    + if (error < 0) {
    + dev_err(musb->controller, "Could not enable: %i\n", error);
    +
    + return;
    + }

    musb_pm_runtime_check_session(musb);

    @@ -1916,6 +1924,9 @@ static void musb_irq_work(struct work_st
    musb->xceiv_old_state = musb->xceiv->otg->state;
    sysfs_notify(&musb->controller->kobj, NULL, "mode");
    }
    +
    + pm_runtime_mark_last_busy(musb->controller);
    + pm_runtime_put_autosuspend(musb->controller);
    }

    static void musb_recover_from_babble(struct musb *musb)

    \
     
     \ /
      Last update: 2017-06-15 20:10    [W:4.683 / U:0.256 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site