lkml.org 
[lkml]   [2019]   [Jun]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.1 063/155] mmc: mmci: Prevent polling for busy detection in IRQ context
    Date
    [ Upstream commit 8520ce1e17799b220ff421d4f39438c9c572ade3 ]

    The IRQ handler, mmci_irq(), loops until all status bits have been cleared.
    However, the status bit signaling busy in variant->busy_detect_flag, may be
    set even if busy detection isn't monitored for the current request.

    This may be the case for the CMD11 when switching the I/O voltage, which
    leads to that mmci_irq() busy loops in IRQ context. Fix this problem, by
    clearing the status bit for busy, before continuing to validate the
    condition for the loop. This is safe, because the busy status detection has
    already been taken care of by mmci_cmd_irq().

    Signed-off-by: Ludovic Barre <ludovic.barre@st.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/mmc/host/mmci.c | 5 +++--
    1 file changed, 3 insertions(+), 2 deletions(-)

    diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
    index 387ff14587b8..e27978c47db7 100644
    --- a/drivers/mmc/host/mmci.c
    +++ b/drivers/mmc/host/mmci.c
    @@ -1550,9 +1550,10 @@ static irqreturn_t mmci_irq(int irq, void *dev_id)
    }

    /*
    - * Don't poll for busy completion in irq context.
    + * Busy detection has been handled by mmci_cmd_irq() above.
    + * Clear the status bit to prevent polling in IRQ context.
    */
    - if (host->variant->busy_detect && host->busy_status)
    + if (host->variant->busy_detect_flag)
    status &= ~host->variant->busy_detect_flag;

    ret = 1;
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-06-13 18:05    [W:9.355 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site