[PATCH 4/4] drm/mm: Remove DRM_MM_SEARCH_BEST
Alex Deucher
alexdeucher at gmail.com
Fri Oct 31 11:10:07 PDT 2014
On Thu, Oct 30, 2014 at 4:36 AM, Michel Dänzer <michel at daenzer.net> wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> In the words of Daniel Vetter:
>
> «I think SEARCH_BEST is pretty much always a bad idea - it rips apart
> allocations from the same execbuf, and usually those get recycled around
> the same time. Which means you'll just fragment your mm even more if you
> try to find the best hole instead of just picking one and the stuffing
> the entire execbuf into it. So imo we might as well just kill it.»
>
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
Applied this series to my -next tree.
Thanks,
Alex
> ---
>
> This patch replaces the previous patches 4 and 5.
>
> Not sure about the function header comment hunk, maybe what it says is
> true even with DRM_MM_SEARCH_BELOW?
>
> drivers/gpu/drm/drm_mm.c | 36 +++++-------------------------------
> drivers/gpu/drm/ttm/ttm_bo_manager.c | 2 +-
> include/drm/drm_mm.h | 3 +--
> 3 files changed, 7 insertions(+), 34 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c
> index 04a209e..3e0ef8c 100644
> --- a/drivers/gpu/drm/drm_mm.c
> +++ b/drivers/gpu/drm/drm_mm.c
> @@ -409,16 +409,11 @@ static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm,
> enum drm_mm_search_flags flags)
> {
> struct drm_mm_node *entry;
> - struct drm_mm_node *best;
> unsigned long adj_start;
> unsigned long adj_end;
> - unsigned long best_size;
>
> BUG_ON(mm->scanned_blocks);
>
> - best = NULL;
> - best_size = ~0UL;
> -
> __drm_mm_for_each_hole(entry, mm, adj_start, adj_end,
> flags & DRM_MM_SEARCH_BELOW) {
> unsigned long hole_size = adj_end - adj_start;
> @@ -429,19 +424,11 @@ static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm,
> continue;
> }
>
> - if (!check_free_hole(adj_start, adj_end, size, alignment))
> - continue;
> -
> - if (!(flags & DRM_MM_SEARCH_BEST))
> + if (check_free_hole(adj_start, adj_end, size, alignment))
> return entry;
> -
> - if (hole_size < best_size) {
> - best = entry;
> - best_size = hole_size;
> - }
> }
>
> - return best;
> + return NULL;
> }
>
> static struct drm_mm_node *drm_mm_search_free_in_range_generic(const struct drm_mm *mm,
> @@ -453,16 +440,11 @@ static struct drm_mm_node *drm_mm_search_free_in_range_generic(const struct drm_
> enum drm_mm_search_flags flags)
> {
> struct drm_mm_node *entry;
> - struct drm_mm_node *best;
> unsigned long adj_start;
> unsigned long adj_end;
> - unsigned long best_size;
>
> BUG_ON(mm->scanned_blocks);
>
> - best = NULL;
> - best_size = ~0UL;
> -
> __drm_mm_for_each_hole(entry, mm, adj_start, adj_end,
> flags & DRM_MM_SEARCH_BELOW) {
> unsigned long hole_size = adj_end - adj_start;
> @@ -478,19 +460,11 @@ static struct drm_mm_node *drm_mm_search_free_in_range_generic(const struct drm_
> continue;
> }
>
> - if (!check_free_hole(adj_start, adj_end, size, alignment))
> - continue;
> -
> - if (!(flags & DRM_MM_SEARCH_BEST))
> + if (check_free_hole(adj_start, adj_end, size, alignment))
> return entry;
> -
> - if (hole_size < best_size) {
> - best = entry;
> - best_size = hole_size;
> - }
> }
>
> - return best;
> + return NULL;
> }
>
> /**
> @@ -679,7 +653,7 @@ EXPORT_SYMBOL(drm_mm_scan_add_block);
> * corrupted.
> *
> * When the scan list is empty, the selected memory nodes can be freed. An
> - * immediately following drm_mm_search_free with !DRM_MM_SEARCH_BEST will then
> + * immediately following drm_mm_search_free with !DRM_MM_SEARCH_BELOW will then
> * return the just freed block (because its at the top of the free_stack list).
> *
> * Returns:
> diff --git a/drivers/gpu/drm/ttm/ttm_bo_manager.c b/drivers/gpu/drm/ttm/ttm_bo_manager.c
> index aa0bd05..42c2aa9 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo_manager.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo_manager.c
> @@ -55,7 +55,7 @@ static int ttm_bo_man_get_node(struct ttm_mem_type_manager *man,
> struct ttm_range_manager *rman = (struct ttm_range_manager *) man->priv;
> struct drm_mm *mm = &rman->mm;
> struct drm_mm_node *node = NULL;
> - enum drm_mm_search_flags sflags = DRM_MM_SEARCH_BEST;
> + enum drm_mm_search_flags sflags = DRM_MM_SEARCH_DEFAULT;
> enum drm_mm_allocator_flags aflags = DRM_MM_CREATE_DEFAULT;
> unsigned long lpfn;
> int ret;
> diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h
> index a24addf..f38f7a0 100644
> --- a/include/drm/drm_mm.h
> +++ b/include/drm/drm_mm.h
> @@ -46,8 +46,7 @@
>
> enum drm_mm_search_flags {
> DRM_MM_SEARCH_DEFAULT = 0,
> - DRM_MM_SEARCH_BEST = 1 << 0,
> - DRM_MM_SEARCH_BELOW = 1 << 1,
> + DRM_MM_SEARCH_BELOW = 1 << 0,
> };
>
> enum drm_mm_allocator_flags {
> --
> 2.1.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
More information about the dri-devel
mailing list