diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2017-02-04 06:19:13 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2017-02-06 10:57:37 -0500 |
commit | bbba96931762bcad8a691dfbf8d1520b71831c3a (patch) | |
tree | f3e4eaf765b4b1dcb1207a30532e40f6478e5117 /include/drm/drm_mm.h | |
parent | c5a828148f302c72a137af7f5487a4e52f19f4c9 (diff) |
drm: Micro-optimise drm_mm_for_each_node_in_range()
As we require valid start/end parameters, we can replace the initial
potential NULL with a pointer to the drm_mm.head_node and so reduce the
test on every iteration from a NULL + address comparison to just an
address comparison.
add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-26 (-26)
function old new delta
i915_gem_evict_for_node 719 693 -26
(No other users outside of the test harness.)
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/20170204111913.12416-1-chris@chris-wilson.co.uk
Diffstat (limited to 'include/drm/drm_mm.h')
-rw-r--r-- | include/drm/drm_mm.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h index d81b0ba9921f..f262da180117 100644 --- a/include/drm/drm_mm.h +++ b/include/drm/drm_mm.h | |||
@@ -459,10 +459,13 @@ __drm_mm_interval_first(const struct drm_mm *mm, u64 start, u64 last); | |||
459 | * but using the internal interval tree to accelerate the search for the | 459 | * but using the internal interval tree to accelerate the search for the |
460 | * starting node, and so not safe against removal of elements. It assumes | 460 | * starting node, and so not safe against removal of elements. It assumes |
461 | * that @end is within (or is the upper limit of) the drm_mm allocator. | 461 | * that @end is within (or is the upper limit of) the drm_mm allocator. |
462 | * If [@start, @end] are beyond the range of the drm_mm, the iterator may walk | ||
463 | * over the special _unallocated_ &drm_mm.head_node, and may even continue | ||
464 | * indefinitely. | ||
462 | */ | 465 | */ |
463 | #define drm_mm_for_each_node_in_range(node__, mm__, start__, end__) \ | 466 | #define drm_mm_for_each_node_in_range(node__, mm__, start__, end__) \ |
464 | for (node__ = __drm_mm_interval_first((mm__), (start__), (end__)-1); \ | 467 | for (node__ = __drm_mm_interval_first((mm__), (start__), (end__)-1); \ |
465 | node__ && node__->start < (end__); \ | 468 | node__->start < (end__); \ |
466 | node__ = list_next_entry(node__, node_list)) | 469 | node__ = list_next_entry(node__, node_list)) |
467 | 470 | ||
468 | void drm_mm_scan_init_with_range(struct drm_mm_scan *scan, | 471 | void drm_mm_scan_init_with_range(struct drm_mm_scan *scan, |