lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 101/563] crypto: qat - fix undetected PFVF timeout in ACK loop
    Date
    From: Giovanni Cabiddu <giovanni.cabiddu@intel.com>

    [ Upstream commit 5002200b4fedd7e90e4fbc2e5c42a4b3351df814 ]

    If the remote function did not ACK the reception of a message, the
    function __adf_iov_putmsg() could detect it as a collision.

    This was due to the fact that the collision and the timeout checks after
    the ACK loop were in the wrong order. The timeout must be checked at the
    end of the loop, so fix by swapping the order of the two checks.

    Fixes: 9b768e8a3909 ("crypto: qat - detect PFVF collision after ACK")
    Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
    Co-developed-by: Marco Chiappero <marco.chiappero@intel.com>
    Signed-off-by: Marco Chiappero <marco.chiappero@intel.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/crypto/qat/qat_common/adf_pf2vf_msg.c | 12 ++++++------
    1 file changed, 6 insertions(+), 6 deletions(-)

    diff --git a/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c b/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
    index 7b34273d18937..74afafc84c716 100644
    --- a/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
    +++ b/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
    @@ -132,6 +132,12 @@ static int __adf_iov_putmsg(struct adf_accel_dev *accel_dev, u32 msg, u8 vf_nr)
    val = ADF_CSR_RD(pmisc_bar_addr, pf2vf_offset);
    } while ((val & int_bit) && (count++ < ADF_IOV_MSG_ACK_MAX_RETRY));

    + if (val & int_bit) {
    + dev_dbg(&GET_DEV(accel_dev), "ACK not received from remote\n");
    + val &= ~int_bit;
    + ret = -EIO;
    + }
    +
    if (val != msg) {
    dev_dbg(&GET_DEV(accel_dev),
    "Collision - PFVF CSR overwritten by remote function\n");
    @@ -139,12 +145,6 @@ static int __adf_iov_putmsg(struct adf_accel_dev *accel_dev, u32 msg, u8 vf_nr)
    goto out;
    }

    - if (val & int_bit) {
    - dev_dbg(&GET_DEV(accel_dev), "ACK not received from remote\n");
    - val &= ~int_bit;
    - ret = -EIO;
    - }
    -
    /* Finished with the PFVF CSR; relinquish it and leave msg in CSR */
    ADF_CSR_WR(pmisc_bar_addr, pf2vf_offset, val & ~local_in_use_mask);
    out:
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-01-24 21:04    [W:2.842 / U:0.176 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site