lkml.org 
[lkml]   [2021]   [May]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/3] drm/msm/dp: Shrink locking area of dp_aux_transfer()
    Date
    We don't need to hold the lock to inspect the message we're going to
    transfer, and we don't need to clear the busy flag either. Take the lock
    later and bail out earlier if conditions aren't met.

    Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Cc: Abhinav Kumar <abhinavk@codeaurora.org>
    Cc: Kuogee Hsieh <khsieh@codeaurora.org>
    Cc: aravindh@codeaurora.org
    Cc: Sean Paul <sean@poorly.run>
    Signed-off-by: Stephen Boyd <swboyd@chromium.org>
    ---
    drivers/gpu/drm/msm/dp/dp_aux.c | 19 +++++++++----------
    1 file changed, 9 insertions(+), 10 deletions(-)

    diff --git a/drivers/gpu/drm/msm/dp/dp_aux.c b/drivers/gpu/drm/msm/dp/dp_aux.c
    index 91188466cece..b49810396513 100644
    --- a/drivers/gpu/drm/msm/dp/dp_aux.c
    +++ b/drivers/gpu/drm/msm/dp/dp_aux.c
    @@ -329,30 +329,29 @@ static ssize_t dp_aux_transfer(struct drm_dp_aux *dp_aux,
    ssize_t ret;
    int const aux_cmd_native_max = 16;
    int const aux_cmd_i2c_max = 128;
    - struct dp_aux_private *aux = container_of(dp_aux,
    - struct dp_aux_private, dp_aux);
    + struct dp_aux_private *aux;

    - mutex_lock(&aux->mutex);
    + aux = container_of(dp_aux, struct dp_aux_private, dp_aux);

    aux->native = msg->request & (DP_AUX_NATIVE_WRITE & DP_AUX_NATIVE_READ);

    /* Ignore address only message */
    - if ((msg->size == 0) || (msg->buffer == NULL)) {
    + if (msg->size == 0 || !msg->buffer) {
    msg->reply = aux->native ?
    DP_AUX_NATIVE_REPLY_ACK : DP_AUX_I2C_REPLY_ACK;
    - ret = msg->size;
    - goto unlock_exit;
    + return msg->size;
    }

    /* msg sanity check */
    - if ((aux->native && (msg->size > aux_cmd_native_max)) ||
    - (msg->size > aux_cmd_i2c_max)) {
    + if ((aux->native && msg->size > aux_cmd_native_max) ||
    + msg->size > aux_cmd_i2c_max) {
    DRM_ERROR("%s: invalid msg: size(%zu), request(%x)\n",
    __func__, msg->size, msg->request);
    - ret = -EINVAL;
    - goto unlock_exit;
    + return -EINVAL;
    }

    + mutex_lock(&aux->mutex);
    +
    dp_aux_update_offset_and_segment(aux, msg);
    dp_aux_transfer_helper(aux, msg, true);

    --
    https://chromeos.dev
    \
     
     \ /
      Last update: 2021-05-07 23:25    [W:5.001 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site