[PATCH 31/34] drm: Simplify drm_mm scan-list manipulation

Joonas Lahtinen joonas.lahtinen at linux.intel.com
Wed Dec 14 08:27:57 UTC 2016


On ma, 2016-12-12 at 11:53 +0000, Chris Wilson wrote:
> Since we mandate a strict reverse-order of drm_mm_scan_remove_block()

kerneldoc speaks of forward-order, so better update that.

> after drm_mm_scan_add_block() we can further simplify the list
> manipulations when generating the temporary scan-hole.
> 
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

<SNIP>

> @@ -787,13 +783,8 @@ bool drm_mm_scan_add_block(struct drm_mm_scan *scan,
>  	mm->scan_active++;
>  
>  	hole = list_prev_entry(node, node_list);
> -
> -	node->scanned_preceeds_hole = hole->hole_follows;
> -	hole->hole_follows = 1;
> -	list_del(&node->node_list);
> -	node->node_list.prev = &hole->node_list;
> -	node->node_list.next = &scan->prev_scanned_node->node_list;
> -	scan->prev_scanned_node = node;
> +	DRM_MM_BUG_ON(list_next_entry(hole, node_list) != node);
> +	__list_del_entry(&node->node_list);

At least be explicit by adding a comment that we avoid poisoning the
pointers to be able to unwind.

> @@ -887,8 +878,8 @@ bool drm_mm_scan_remove_block(struct drm_mm_scan *scan,
>  	node->mm->scan_active--;
>  
>  	prev_node = list_prev_entry(node, node_list);
> -
> -	prev_node->hole_follows = node->scanned_preceeds_hole;

Comment might be in place here too; "node->node_list has been removed
from the list but by carefully avoiding..."

> +	DRM_MM_BUG_ON(list_next_entry(prev_node, node_list) !=
> +		      list_next_entry(node, node_list));
>  	list_add(&node->node_list, &prev_node->node_list);
>  
>  	return (node->start + node->size > scan->hit_start &&

I'm feeling bit uncanny about avoiding poisoning.

Regards, Joonas
-- 
Joonas Lahtinen
Open Source Technology Center
Intel Corporation


More information about the dri-devel mailing list