提交 2a1d7752 编写于 作者: C Chris Wilson

drm/i915: Prefer list_first_entry_or_null

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: NChris Wilson <chris@chris-wilson.co.uk>
Link: http://patchwork.freedesktop.org/patch/msgid/1469432687-22756-3-git-send-email-chris@chris-wilson.co.ukReviewed-by: NJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1469530913-17180-2-git-send-email-chris@chris-wilson.co.uk
上级 4a50d20e
...@@ -2736,13 +2736,11 @@ static void i915_gtt_color_adjust(struct drm_mm_node *node, ...@@ -2736,13 +2736,11 @@ static void i915_gtt_color_adjust(struct drm_mm_node *node,
if (node->color != color) if (node->color != color)
*start += 4096; *start += 4096;
if (!list_empty(&node->node_list)) { node = list_first_entry_or_null(&node->node_list,
node = list_entry(node->node_list.next, struct drm_mm_node,
struct drm_mm_node, node_list);
node_list); if (node && node->allocated && node->color != color)
if (node->allocated && node->color != color) *end -= 4096;
*end -= 4096;
}
} }
static int i915_gem_setup_global_gtt(struct drm_device *dev, static int i915_gem_setup_global_gtt(struct drm_device *dev,
......
...@@ -317,12 +317,10 @@ __i915_gem_request_alloc(struct intel_engine_cs *engine, ...@@ -317,12 +317,10 @@ __i915_gem_request_alloc(struct intel_engine_cs *engine,
return ret; return ret;
/* Move the oldest request to the slab-cache (if not in use!) */ /* Move the oldest request to the slab-cache (if not in use!) */
if (!list_empty(&engine->request_list)) { req = list_first_entry_or_null(&engine->request_list,
req = list_first_entry(&engine->request_list,
typeof(*req), list); typeof(*req), list);
if (i915_gem_request_completed(req)) if (req && i915_gem_request_completed(req))
i915_gem_request_retire(req); i915_gem_request_retire(req);
}
req = kmem_cache_zalloc(dev_priv->requests, GFP_KERNEL); req = kmem_cache_zalloc(dev_priv->requests, GFP_KERNEL);
if (!req) if (!req)
......
...@@ -163,17 +163,18 @@ i915_gem_shrink(struct drm_i915_private *dev_priv, ...@@ -163,17 +163,18 @@ i915_gem_shrink(struct drm_i915_private *dev_priv,
*/ */
for (phase = phases; phase->list; phase++) { for (phase = phases; phase->list; phase++) {
struct list_head still_in_list; struct list_head still_in_list;
struct drm_i915_gem_object *obj;
if ((flags & phase->bit) == 0) if ((flags & phase->bit) == 0)
continue; continue;
INIT_LIST_HEAD(&still_in_list); INIT_LIST_HEAD(&still_in_list);
while (count < target && !list_empty(phase->list)) { while (count < target &&
struct drm_i915_gem_object *obj; (obj = list_first_entry_or_null(phase->list,
typeof(*obj),
global_list))) {
struct i915_vma *vma, *v; struct i915_vma *vma, *v;
obj = list_first_entry(phase->list,
typeof(*obj), global_list);
list_move_tail(&obj->global_list, &still_in_list); list_move_tail(&obj->global_list, &still_in_list);
if (flags & I915_SHRINK_PURGEABLE && if (flags & I915_SHRINK_PURGEABLE &&
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册