Hi Emil,

Sorry for late reply. I was so busy last week and this week.

Your logic looks correct, smarter and shorter. I feel relatively more difficult to understand the logic, with two "!" and one "||" in the same if statement.

Thanks for the advice always.

On 2017-07-20 02:29 PM, Emil Velikov wrote:
Hi Alex,

On 20 July 2017 at 03:46, Alex Xie <alexbin....@amd.com> wrote:
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
@@ -198,12 +198,18 @@ amdgpu_bo_list_get(struct amdgpu_fpriv *fpriv, int id)
         result = idr_find(&fpriv->bo_list_handles, id);

         if (result) {
-               if (kref_get_unless_zero(&result->refcount))
+               if (kref_get_unless_zero(&result->refcount)) {
+                       rcu_read_unlock();
                         mutex_lock(&result->lock);
-               else
+               }
+               else {
+                       rcu_read_unlock();
                         result = NULL;
+               }
+       }
+       else {
+               rcu_read_unlock();
         }
-       rcu_read_unlock();

         return result;
A drive-by suggestion - feel free to ignore.

The "return early" approach seems great IMHO. The code will be
shorter, indentation - less, no {}/else to track plus overall it seems
clearer.
Namely:

    result = idr_find(&fpriv->bo_list_handles, id);

    if (!result || !kref_get_unless_zero(&result->refcount)) {
          rcu_read_unlock();
          return NULL;
    }

    rcu_read_unlock();
    mutex_lock(&result->lock);
    return result;
}

HTH
Emil

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to