[PATCH] drm: Handle unexpected holes in color-eviction
Chris Wilson
chris at chris-wilson.co.uk
Mon Feb 19 14:43:59 UTC 2018
Quoting Joonas Lahtinen (2018-02-19 14:40:32)
> Quoting Chris Wilson (2018-02-19 13:35:43)
> > +++ b/drivers/gpu/drm/drm_mm.c
> > @@ -836,9 +836,24 @@ struct drm_mm_node *drm_mm_scan_color_evict(struct drm_mm_scan *scan)
> > if (!mm->color_adjust)
> > return NULL;
> >
> > - hole = list_first_entry(&mm->hole_stack, typeof(*hole), hole_stack);
> > - hole_start = __drm_mm_hole_node_start(hole);
> > - hole_end = hole_start + hole->hole_size;
> > + /*
> > + * The hole found during scanning should ideally be the first element
> > + * in the hole_stack list, but due to side-effects in the driver it
> > + * may not be.
> > + */
> > + list_for_each_entry(hole, &mm->hole_stack, hole_stack) {
> > + hole_start = __drm_mm_hole_node_start(hole);
> > + hole_end = hole_start + hole->hole_size;
> > +
> > + if (hole_start <= scan->hit_start &&
> > + hole_end >= scan->hit_end)
>
> How about some likely() here?
I felt that at the point where we admit we need a search, likely() went
out of the window. Given that I think we'll need 2 or 3 iterations at
most, that probably means in practice this is around the 50% mark.
Claiming that it's likely() may be misleading to the reader.
> > + break;
> > + }
> > +
> > + /* We should only be called after we found the hole previously */
> > + DRM_MM_BUG_ON(&hole->hole_stack == &mm->hole_stack);
> > + if (unlikely(&hole->hole_stack == &mm->hole_stack))
>
> Would be more readable as:
>
> if (...) {
> DRM_MM_BUG()
> }
Maybe DRM_MM_WARN_ON(), both hypothetical functions :)
-Chris
More information about the dri-devel
mailing list