On ma, 2016-07-25 at 08:44 +0100, Chris Wilson wrote: > list_first_entry_or_null() can generate better code than using > if (!list_empty()) {ptr = list_first_entry()) ..., so put it to use. > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> It looks cleaner, not so sure of the code impact. Reviewed-by: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_gem_gtt.c | 12 +++++------- > drivers/gpu/drm/i915/i915_gem_request.c | 8 +++----- > drivers/gpu/drm/i915/i915_gem_shrinker.c | 9 +++++---- > 3 files changed, 13 insertions(+), 16 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c > index 30da543e1bdf..38e7d992a20d 100644 > --- a/drivers/gpu/drm/i915/i915_gem_gtt.c > +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c > @@ -2736,13 +2736,11 @@ static void i915_gtt_color_adjust(struct drm_mm_node *node, > if (node->color != color) > *start += 4096; > > - if (!list_empty(&node->node_list)) { > - node = list_entry(node->node_list.next, > - struct drm_mm_node, > - node_list); > - if (node->allocated && node->color != color) > - *end -= 4096; > - } > + node = list_first_entry_or_null(&node->node_list, > + struct drm_mm_node, > + node_list); > + if (node && node->allocated && node->color != color) > + *end -= 4096; > } > > static int i915_gem_setup_global_gtt(struct drm_device *dev, > diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c > index 60a3a343b3a8..49396b895a36 100644 > --- a/drivers/gpu/drm/i915/i915_gem_request.c > +++ b/drivers/gpu/drm/i915/i915_gem_request.c > @@ -317,12 +317,10 @@ __i915_gem_request_alloc(struct intel_engine_cs *engine, > return ret; > > /* Move the oldest request to the slab-cache (if not in use!) */ > - if (!list_empty(&engine->request_list)) { > - req = list_first_entry(&engine->request_list, > + req = list_first_entry_or_null(&engine->request_list, > typeof(*req), list); > - if (i915_gem_request_completed(req)) > - i915_gem_request_retire(req); > - } > + if (req && i915_gem_request_completed(req)) > + i915_gem_request_retire(req); > > req = kmem_cache_zalloc(dev_priv->requests, GFP_KERNEL); > if (!req) > diff --git a/drivers/gpu/drm/i915/i915_gem_shrinker.c b/drivers/gpu/drm/i915/i915_gem_shrinker.c > index afaa2597e35e..5d4772c146b1 100644 > --- a/drivers/gpu/drm/i915/i915_gem_shrinker.c > +++ b/drivers/gpu/drm/i915/i915_gem_shrinker.c > @@ -163,17 +163,18 @@ i915_gem_shrink(struct drm_i915_private *dev_priv, > */ > for (phase = phases; phase->list; phase++) { > struct list_head still_in_list; > + struct drm_i915_gem_object *obj; > > if ((flags & phase->bit) == 0) > continue; > > INIT_LIST_HEAD(&still_in_list); > - while (count < target && !list_empty(phase->list)) { > - struct drm_i915_gem_object *obj; > + while (count < target && > + (obj = list_first_entry_or_null(phase->list, > + typeof(*obj), > + global_list))) { > struct i915_vma *vma, *v; > > - obj = list_first_entry(phase->list, > - typeof(*obj), global_list); > list_move_tail(&obj->global_list, &still_in_list); > > if (flags & I915_SHRINK_PURGEABLE && -- Joonas Lahtinen Open Source Technology Center Intel Corporation _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx