[PATCH] drm: Handle unexpected holes in color-eviction
Joonas Lahtinen
joonas.lahtinen at linux.intel.com
Mon Feb 19 14:40:32 UTC 2018
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?
> + 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()
}
Reviewed-by: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
Regards, Joonas
More information about the dri-devel
mailing list