Commit c2b3e61a authored by Eric Anholt's avatar Eric Anholt

drm/v3d: Use drm_gem_lock_reservations()/drm_gem_unlock_reservations()

Now that we have core helpers, this gets rid of a lot of boilerplate.
Signed-off-by: default avatarEric Anholt <eric@anholt.net>
Link: https://patchwork.freedesktop.org/patch/msgid/20190308161716.2466-3-eric@anholt.netAcked-by: default avatarRob Herring <robh@kernel.org>
parent 7edc3e3b
...@@ -210,12 +210,8 @@ v3d_unlock_bo_reservations(struct v3d_bo **bos, ...@@ -210,12 +210,8 @@ v3d_unlock_bo_reservations(struct v3d_bo **bos,
int bo_count, int bo_count,
struct ww_acquire_ctx *acquire_ctx) struct ww_acquire_ctx *acquire_ctx)
{ {
int i; drm_gem_unlock_reservations((struct drm_gem_object **)bos, bo_count,
acquire_ctx);
for (i = 0; i < bo_count; i++)
ww_mutex_unlock(&bos[i]->base.resv->lock);
ww_acquire_fini(acquire_ctx);
} }
/* Takes the reservation lock on all the BOs being referenced, so that /* Takes the reservation lock on all the BOs being referenced, so that
...@@ -230,52 +226,12 @@ v3d_lock_bo_reservations(struct v3d_bo **bos, ...@@ -230,52 +226,12 @@ v3d_lock_bo_reservations(struct v3d_bo **bos,
int bo_count, int bo_count,
struct ww_acquire_ctx *acquire_ctx) struct ww_acquire_ctx *acquire_ctx)
{ {
int contended_lock = -1;
int i, ret; int i, ret;
ww_acquire_init(acquire_ctx, &reservation_ww_class); ret = drm_gem_lock_reservations((struct drm_gem_object **)bos,
bo_count, acquire_ctx);
retry: if (ret)
if (contended_lock != -1) { return ret;
struct v3d_bo *bo = bos[contended_lock];
ret = ww_mutex_lock_slow_interruptible(&bo->base.resv->lock,
acquire_ctx);
if (ret) {
ww_acquire_done(acquire_ctx);
return ret;
}
}
for (i = 0; i < bo_count; i++) {
if (i == contended_lock)
continue;
ret = ww_mutex_lock_interruptible(&bos[i]->base.resv->lock,
acquire_ctx);
if (ret) {
int j;
for (j = 0; j < i; j++)
ww_mutex_unlock(&bos[j]->base.resv->lock);
if (contended_lock != -1 && contended_lock >= i) {
struct v3d_bo *bo = bos[contended_lock];
ww_mutex_unlock(&bo->base.resv->lock);
}
if (ret == -EDEADLK) {
contended_lock = i;
goto retry;
}
ww_acquire_done(acquire_ctx);
return ret;
}
}
ww_acquire_done(acquire_ctx);
/* Reserve space for our shared (read-only) fence references, /* Reserve space for our shared (read-only) fence references,
* before we commit the CL to the hardware. * before we commit the CL to the hardware.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment