[Intel-gfx] [PATCH 15/18] drm/i915: Reserve space in the global seqno during request allocation
Joonas Lahtinen
joonas.lahtinen at linux.intel.com
Mon Sep 19 13:47:07 UTC 2016
On ke, 2016-09-14 at 07:52 +0100, Chris Wilson wrote:
> +static int reserve_global_seqno(struct drm_i915_private *i915)
> {
> - struct i915_gem_timeline *tl = &dev_priv->gt.global_timeline;
> + struct i915_gem_timeline *tl = &i915->gt.global_timeline;
> + u32 next_seqno = atomic_read(&tl->next_seqno);
>
> - /* reserve 0 for non-seqno */
> - if (unlikely(tl->next_seqno == 0)) {
Meh, do not hide the ++i915->gt.active_requests in if (unlikely(...)).
> + if (unlikely(next_seqno + ++i915->gt.active_requests <= next_seqno)) {
> int ret;
>
Why not if (likely(next_seqno + active_requests > next_seqno))
return 0;
> - ret = i915_gem_init_global_seqno(dev_priv, 0);
> - if (ret)
> + ret = i915_gem_init_global_seqno(i915, 0);
> + if (ret) {
> + i915->gt.active_requests--;
> return ret;
With above change the built-in teardown becomes OK. Otherwise split.
> -
> - tl->next_seqno = 1;
> + }
> }
>
> - *seqno = tl->next_seqno++;
> return 0;
> }
>
> +static u32 timeline_get_seqno(struct i915_gem_timeline *tl)
> +{
> + return atomic_inc_return(&tl->next_seqno);
> +}
> +
How about u32 timeline_peek_seqno(), as you have quite a few
atomic_reads on it. Also, lockdep_assert_held would be useful sprinkled
ni the functions.
Reviewed-by: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
Regards, Joonas
--
Joonas Lahtinen
Open Source Technology Center
Intel Corporation
More information about the Intel-gfx
mailing list