[Intel-gfx] [PATCH 02/31] drm/i915: Prefer list_first_entry_or_null

Joonas Lahtinen joonas.lahtinen at linux.intel.com
Mon Jul 25 07:55:24 UTC 2016


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 at chris-wilson.co.uk>

It looks cleaner, not so sure of the code impact.

Reviewed-by: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>

> ---
>  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


More information about the Intel-gfx mailing list