[PATCH v2] drm: Fix a infinite loop condition when order becomes 0
Arunpravin Paneer Selvam
arunpravin.paneerselvam at amd.com
Mon Mar 21 06:24:04 UTC 2022
On 16/03/22 6:02 pm, Christian König wrote:
> Am 16.03.22 um 12:31 schrieb Matthew Auld:
>> On 16/03/2022 06:34, Arunpravin Paneer Selvam wrote:
>>> handle a situation in the condition order-- == min_order,
>>> when order = 0 and min_order = 0, leading to order = -1,
>>> it now won't exit the loop. To avoid this problem,
>>> added a order check in the same condition, (i.e)
>>> when order is 0, we return -ENOSPC
>>>
>>> v2: use full name in email program and in Signed-off tag
>>>
>>> Signed-off-by: Arunpravin Paneer Selvam
>>> <Arunpravin.PaneerSelvam at amd.com>
>>> ---
>>> drivers/gpu/drm/drm_buddy.c | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/gpu/drm/drm_buddy.c b/drivers/gpu/drm/drm_buddy.c
>>> index 72f52f293249..5ab66aaf2bbd 100644
>>> --- a/drivers/gpu/drm/drm_buddy.c
>>> +++ b/drivers/gpu/drm/drm_buddy.c
>>> @@ -685,7 +685,7 @@ int drm_buddy_alloc_blocks(struct drm_buddy *mm,
>>> if (!IS_ERR(block))
>>> break;
>>> - if (order-- == min_order) {
>>> + if (!order || order-- == min_order) {
>>
>> It shouldn't be possible to enter an infinite loop here, without first
>> tripping up the BUG_ON(order < min_order) further up, and for that, as
>> we discussed here[1], it sounded like the conclusion was to rather add
>> a simple check somewhere in drm_buddy_alloc_blocks() to reject any
>> size not aligned to the min_page_size?
>
> Sounds good to me as well.
>
> And just to make it clear: I don't review the functionality here, that's
> up to you guys.
>
> Just giving my Ack on things like style and pushing the end result
> upstream as necessary.
>
> So let me know when you have settled on a solution.
I sent a drm buddy patch adding a simple check to verify the size
aligned to the min_page_size.
In amdgpu part patch, I have a check if size is not aligned to the
min_page_size, we are enabling the is_contiguous flag, therefore the
size value round up to the power of two and allocated, Later, the
allocated block trimmed to the original requested size.
>
> Regards,
> Christian.
>
>>
>> [1] https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatchwork.freedesktop.org%2Fpatch%2F477414%2F%3Fseries%3D101108%26rev%3D1&data=04%7C01%7CArunpravin.PaneerSelvam%40amd.com%7Cf03d93b31c7d47b1389c08da074915cf%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637830307722869478%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=i3Pw3Go9Niu20Z4CF0IiWKPgTYTBPyK0SJYVq02fx0A%3D&reserved=0
>>
>>> err = -ENOSPC;
>>> goto err_free;
>>> }
>>>
>>> base-commit: 3bd60c0259406c5ca3ce5cdc958fb910ad4b8175
>
More information about the dri-devel
mailing list