[PATCH 2/6] drm/buddy: fix range bias
Arunpravin Paneer Selvam
arunpravin.paneerselvam at amd.com
Fri Feb 16 11:40:51 UTC 2024
Looks good.
Reviewed-by: Arunpravin Paneer Selvam <Arunpravin.PaneerSelvam at amd.com>
On 2/15/2024 11:14 PM, Matthew Auld wrote:
> There is a corner case here where start/end is after/before the block
> range we are currently checking. If so we need to be sure that splitting
> the block will eventually give use the block size we need. To do that we
> should adjust the block range to account for the start/end, and only
> continue with the split if the size/alignment will fit the requested
> size. Not doing so can result in leaving split blocks unmerged when it
> eventually fails.
>
> Fixes: afea229fe102 ("drm: improve drm_buddy_alloc function")
> Signed-off-by: Matthew Auld<matthew.auld at intel.com>
> Cc: Arunpravin Paneer Selvam<Arunpravin.PaneerSelvam at amd.com>
> Cc: Christian König<christian.koenig at amd.com>
> Cc:<stable at vger.kernel.org> # v5.18+
> ---
> drivers/gpu/drm/drm_buddy.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_buddy.c b/drivers/gpu/drm/drm_buddy.c
> index c1a99bf4dffd..d09540d4065b 100644
> --- a/drivers/gpu/drm/drm_buddy.c
> +++ b/drivers/gpu/drm/drm_buddy.c
> @@ -332,6 +332,7 @@ alloc_range_bias(struct drm_buddy *mm,
> u64 start, u64 end,
> unsigned int order)
> {
> + u64 req_size = mm->chunk_size << order;
> struct drm_buddy_block *block;
> struct drm_buddy_block *buddy;
> LIST_HEAD(dfs);
> @@ -367,6 +368,15 @@ alloc_range_bias(struct drm_buddy *mm,
> if (drm_buddy_block_is_allocated(block))
> continue;
>
> + if (block_start < start || block_end > end) {
> + u64 adjusted_start = max(block_start, start);
> + u64 adjusted_end = min(block_end, end);
> +
> + if (round_down(adjusted_end + 1, req_size) <=
> + round_up(adjusted_start, req_size))
> + continue;
> + }
> +
> if (contains(start, end, block_start, block_end) &&
> order == drm_buddy_block_order(block)) {
> /*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20240216/dc64419b/attachment.htm>
More information about the dri-devel
mailing list