From: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, dri-devel@lists.freedesktop.org
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 33/34] drm: Fix drm_mm search and insertion
Date: Thu, 15 Dec 2016 14:28:32 +0200 [thread overview]
Message-ID: <1481804912.4119.27.camel@linux.intel.com> (raw)
In-Reply-To: <20161212115350.780-34-chris@chris-wilson.co.uk>
On ma, 2016-12-12 at 11:53 +0000, Chris Wilson wrote:
> The drm_mm range manager claimed to support top-down insertion, but it
> was neither searching for the top-most hole that could fit the
> allocation request nor fitting the request to the hole correctly.
>
> In order to search the range efficiently, we create a secondary index
> for the holes using either their size or their address. This index
> allows us to find the smallest hole or the hole at the bottom or top of
> the range efficiently, whilst keeping the hole stack to rapidly service
> evictions.
>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
<SNIP>
> +static void rm_hole(struct drm_mm_node *node)
> +{
> + if (!node->hole_size)
> + return;
I've actively tried to remove conditions that cause asymmetry between
add_/rm_, create_/destroy_ etc. So I think this should be
DRM_MM_BUG_ON() too.
> +static struct drm_mm_node *best_hole(struct drm_mm *mm, u64 size)
> {
> - struct drm_mm *mm = hole_node->mm;
> - u64 hole_start = drm_mm_hole_node_start(hole_node);
> - u64 hole_end = drm_mm_hole_node_end(hole_node);
> - u64 adj_start = hole_start;
> - u64 adj_end = hole_end;
> + struct rb_node *best = NULL;
> + struct rb_node **link = &mm->holes_size.rb_node;
> + while (*link) {
> + struct rb_node *rb = *link;
> + if (size <= rb_hole_size(rb))
> + link = &rb->rb_left, best = rb;
Single assignment per line, by coding style. And
link = &(best = rb)->rb_left is not better :P
> -int drm_mm_insert_node_in_range_generic(struct drm_mm *mm, struct drm_mm_node *node,
> +int drm_mm_insert_node_in_range_generic(struct drm_mm * const mm,
> + struct drm_mm_node * const node,
I really have no stance on the const's, I'll defer to higher powers on
this.
> +void drm_mm_remove_node(struct drm_mm_node *node)
> {
<SNIP>
> - return best;
> + rm_hole(prev_node);
> + add_hole(prev_node);
update_hole?
> @@ -799,7 +706,7 @@ bool drm_mm_scan_add_block(struct drm_mm_scan *scan,
> if (adj_end <= adj_start || adj_end - adj_start < scan->size)
> return false;
>
> - if (scan->flags == DRM_MM_CREATE_TOP)
> + if (scan->flags == DRM_MM_INSERT_HIGH)
Flags are usually checked with & if somebody wants to add them later.
Otherwise you could call it "mode".
Somebody else could give this a glance too.
Regards, Joonas
--
Joonas Lahtinen
Open Source Technology Center
Intel Corporation
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-12-15 12:28 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-12 11:53 struct drm_mm fixes Chris Wilson
2016-12-12 11:53 ` [PATCH 01/34] drm/i915: Use the MRU stack search after evicting Chris Wilson
2016-12-13 9:29 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 02/34] drm/i915: Simplify i915_gtt_color_adjust() Chris Wilson
2016-12-13 9:32 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 03/34] drm: Add drm_mm_for_each_node_safe() Chris Wilson
2016-12-13 9:35 ` Joonas Lahtinen
2016-12-14 11:39 ` Chris Wilson
2016-12-14 12:03 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 04/34] drm: Add some kselftests for the DRM range manager (struct drm_mm) Chris Wilson
2016-12-13 9:58 ` Joonas Lahtinen
2016-12-13 10:21 ` Chris Wilson
2016-12-13 15:03 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 05/34] drm: kselftest for drm_mm_init() Chris Wilson
2016-12-13 10:16 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 06/34] drm: Add a simple linear congruent generator PRNG Chris Wilson
2016-12-13 10:44 ` Joonas Lahtinen
2016-12-13 15:16 ` David Herrmann
2016-12-13 15:18 ` David Herrmann
2016-12-13 15:40 ` Chris Wilson
2016-12-13 16:21 ` David Herrmann
2016-12-13 15:26 ` Chris Wilson
2016-12-13 19:39 ` Laurent Pinchart
2016-12-13 20:50 ` Chris Wilson
2016-12-12 11:53 ` [PATCH 07/34] drm: Add a simple prime number generator Chris Wilson
2016-12-12 11:53 ` [PATCH 08/34] drm: kselftest for drm_mm_reserve_node() Chris Wilson
2016-12-14 9:55 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 09/34] drm: kselftest for drm_mm_insert_node() Chris Wilson
2016-12-14 12:26 ` Joonas Lahtinen
2016-12-14 12:51 ` Chris Wilson
2016-12-12 11:53 ` [PATCH 10/34] drm: kselftest for drm_mm_replace_node() Chris Wilson
2016-12-14 12:01 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 11/34] drm: kselftest for drm_mm_insert_node_in_range() Chris Wilson
2016-12-15 8:43 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 12/34] drm: kselftest for drm_mm and alignment Chris Wilson
2016-12-15 8:59 ` Joonas Lahtinen
2016-12-15 9:21 ` Chris Wilson
2016-12-12 11:53 ` [PATCH 13/34] drm: kselftest for drm_mm and eviction Chris Wilson
2016-12-15 9:29 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 14/34] drm: kselftest for drm_mm and range restricted eviction Chris Wilson
2016-12-15 9:50 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 15/34] drm: kselftest for drm_mm and top-down allocation Chris Wilson
2016-12-14 11:33 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 16/34] drm: kselftest for drm_mm and top-down alignment Chris Wilson
2016-12-14 11:51 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 17/34] drm: kselftest for drm_mm and color adjustment Chris Wilson
2016-12-15 11:04 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 18/34] drm: kselftest for drm_mm and color eviction Chris Wilson
2016-12-12 11:53 ` [PATCH 19/34] drm: kselftest for drm_mm and restricted " Chris Wilson
2016-12-12 11:53 ` [PATCH 20/34] drm/i915: Build DRM range manager selftests for CI Chris Wilson
2016-12-15 12:31 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 21/34] drm: Promote drm_mm alignment to u64 Chris Wilson
2016-12-12 12:39 ` Christian König
2016-12-12 11:53 ` [PATCH 22/34] drm: Constify the drm_mm API Chris Wilson
2016-12-12 11:53 ` [PATCH 23/34] drm: Simplify drm_mm_clean() Chris Wilson
2016-12-13 12:30 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 24/34] drm: Compile time enabling for asserts in drm_mm Chris Wilson
2016-12-13 15:04 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 25/34] drm: Extract struct drm_mm_scan from struct drm_mm Chris Wilson
2016-12-13 15:17 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 26/34] drm: Rename prev_node to hole in drm_mm_scan_add_block() Chris Wilson
2016-12-13 15:23 ` Joonas Lahtinen
2016-12-13 22:28 ` Chris Wilson
2016-12-12 11:53 ` [PATCH 27/34] drm: Unconditionally do the range check " Chris Wilson
2016-12-13 15:28 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 28/34] drm: Fix application of color vs range restriction when scanning drm_mm Chris Wilson
2016-12-12 14:57 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 29/34] drm: Compute tight evictions for drm_mm_scan Chris Wilson
2016-12-13 15:48 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 30/34] drm: Optimise power-of-two alignments in drm_mm_scan_add_block() Chris Wilson
2016-12-13 15:55 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 31/34] drm: Simplify drm_mm scan-list manipulation Chris Wilson
2016-12-14 8:27 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 32/34] drm: Apply tight eviction scanning to color_adjust Chris Wilson
2016-12-13 16:03 ` Joonas Lahtinen
2016-12-12 11:53 ` [PATCH 33/34] drm: Fix drm_mm search and insertion Chris Wilson
2016-12-15 12:28 ` Joonas Lahtinen [this message]
2016-12-15 12:57 ` Chris Wilson
2016-12-12 11:53 ` [PATCH 34/34] drm: kselftest for drm_mm and bottom-up allocation Chris Wilson
2016-12-14 9:10 ` Joonas Lahtinen
2016-12-12 12:15 ` ✓ Fi.CI.BAT: success for series starting with [01/34] drm/i915: Use the MRU stack search after evicting Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1481804912.4119.27.camel@linux.intel.com \
--to=joonas.lahtinen@linux.intel.com \
--cc=chris@chris-wilson.co.uk \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.