[PATCH v4 37/38] drm: Improve drm_mm search (and fix topdown allocation) with rbtrees
Chris Wilson
chris at chris-wilson.co.uk
Wed Dec 28 11:08:11 UTC 2016
On Thu, Dec 22, 2016 at 08:36:40AM +0000, Chris Wilson wrote:
> /**
> * drm_mm_for_each_hole - iterator to walk over all holes
> * @entry: drm_mm_node used internally to track progress
> @@ -274,57 +263,27 @@ static inline u64 drm_mm_hole_node_end(const struct drm_mm_node *hole_node)
> * Implementation Note:
> * We need to inline list_for_each_entry in order to be able to set hole_start
> * and hole_end on each iteration while keeping the macro sane.
> - *
> - * The __drm_mm_for_each_hole version is similar, but with added support for
> - * going backwards.
> */
> -#define drm_mm_for_each_hole(entry, mm, hole_start, hole_end) \
> - __drm_mm_for_each_hole(entry, mm, hole_start, hole_end, 0)
> +#define drm_mm_for_each_hole(pos, mm, hole_start, hole_end) \
> + for (pos = list_first_entry(&(mm)->hole_stack, \
> + typeof(*pos), hole_stack); \
> + &pos->hole_stack != &(mm)->hole_stack ? \
> + hole_start = drm_mm_hole_node_start(pos), \
> + hole_end = hole_start + pos->hole_size : 0; \
Oh, that was silly, should be
hole_end = hole_start + pos->hole_size, \
1 : 0; \
so the compiler is less confused.
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
More information about the dri-devel
mailing list