lkml.org 
[lkml]   [2021]   [Sep]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.14 028/100] dmaengine: idxd: have command status always set
    Date
    From: Dave Jiang <dave.jiang@intel.com>

    [ Upstream commit 53499d1fc11267e078557fc68ce943c1eb3b7a37 ]

    The cached command status is only set when the write back status is
    is passed in. Move the variable set outside of the check so it is
    always set.

    Fixes: 0d5c10b4c84d ("dmaengine: idxd: add work queue drain support")
    Reported-by: Ramesh Thomas <ramesh.thomas@intel.com>
    Signed-off-by: Dave Jiang <dave.jiang@intel.com>
    Link: https://lore.kernel.org/r/162274329740.1822314.3443875665504707588.stgit@djiang5-desk3.ch.intel.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/dma/idxd/device.c | 9 +++++----
    1 file changed, 5 insertions(+), 4 deletions(-)

    diff --git a/drivers/dma/idxd/device.c b/drivers/dma/idxd/device.c
    index 928c2c8817f0..c8cf1de72176 100644
    --- a/drivers/dma/idxd/device.c
    +++ b/drivers/dma/idxd/device.c
    @@ -486,6 +486,7 @@ static void idxd_cmd_exec(struct idxd_device *idxd, int cmd_code, u32 operand,
    union idxd_command_reg cmd;
    DECLARE_COMPLETION_ONSTACK(done);
    unsigned long flags;
    + u32 stat;

    if (idxd_device_is_halted(idxd)) {
    dev_warn(&idxd->pdev->dev, "Device is HALTED!\n");
    @@ -518,11 +519,11 @@ static void idxd_cmd_exec(struct idxd_device *idxd, int cmd_code, u32 operand,
    */
    spin_unlock_irqrestore(&idxd->cmd_lock, flags);
    wait_for_completion(&done);
    + stat = ioread32(idxd->reg_base + IDXD_CMDSTS_OFFSET);
    spin_lock_irqsave(&idxd->cmd_lock, flags);
    - if (status) {
    - *status = ioread32(idxd->reg_base + IDXD_CMDSTS_OFFSET);
    - idxd->cmd_status = *status & GENMASK(7, 0);
    - }
    + if (status)
    + *status = stat;
    + idxd->cmd_status = stat & GENMASK(7, 0);

    __clear_bit(IDXD_FLAG_CMD_RUNNING, &idxd->flags);
    /* Wake up other pending commands */
    --
    2.33.0


    \
     
     \ /
      Last update: 2021-09-24 15:01    [W:5.847 / U:0.344 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site