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
This commit is contained in:
Chris Wilson
2017-02-04 11:19:13 +00:00
committed by Daniel Vetter
parent c5a828148f
commit bbba969317
3 changed files with 11 additions and 6 deletions

View File

@@ -839,16 +839,18 @@ static bool assert_contiguous_in_range(struct drm_mm *mm,
n++;
}
drm_mm_for_each_node_in_range(node, mm, 0, start) {
if (node) {
if (start > 0) {
node = __drm_mm_interval_first(mm, 0, start - 1);
if (node->allocated) {
pr_err("node before start: node=%llx+%llu, start=%llx\n",
node->start, node->size, start);
return false;
}
}
drm_mm_for_each_node_in_range(node, mm, end, U64_MAX) {
if (node) {
if (end < U64_MAX) {
node = __drm_mm_interval_first(mm, end, U64_MAX);
if (node->allocated) {
pr_err("node after end: node=%llx+%llu, end=%llx\n",
node->start, node->size, end);
return false;