[PATCH] drm/drm_gem.c: remove surplus else after return clause
Sui Jingfeng
suijingfeng at loongson.cn
Tue Jun 27 09:27:00 UTC 2023
Hi,
On 2023/6/27 17:00, Thomas Zimmermann wrote:
> Hi
>
> Am 26.06.23 um 14:32 schrieb Maxime Ripard:
>> Hi,
>>
>> On Tue, Jun 20, 2023 at 06:18:31PM +0200, Thomas Zimmermann wrote:
>>> Am 20.06.23 um 18:06 schrieb Sui Jingfeng:
>>>> Hi,
>>>>
>>>> On 2023/6/20 22:43, Thomas Zimmermann wrote:
>>>>> Hi
>>>>>
>>>>> Am 20.06.23 um 06:08 schrieb Sui Jingfeng:
>>>>>> ping ?
>>>>>>
>>>>>> On 2023/3/14 20:53, Sui Jingfeng wrote:
>>>>>>> else is not generally useful after return
>>>>>
>>>>> No indention please.
>>>>>
>>>> OK, will be fixed at the next version.
>>>>>>>
>>>>>>> Signed-off-by: Sui Jingfeng <15330273260 at 189.cn>
>>>>>>> ---
>>>>>>> drivers/gpu/drm/drm_gem.c | 7 ++++---
>>>>>>> 1 file changed, 4 insertions(+), 3 deletions(-)
>>>>>>>
>>>>>>> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
>>>>>>> index a6208e2c089b..364e3733af98 100644
>>>>>>> --- a/drivers/gpu/drm/drm_gem.c
>>>>>>> +++ b/drivers/gpu/drm/drm_gem.c
>>>>>>> @@ -1150,8 +1150,8 @@ int drm_gem_pin(struct drm_gem_object *obj)
>>>>>>> {
>>>>>>> if (obj->funcs->pin)
>>>>>>> return obj->funcs->pin(obj);
>>>>>>> - else
>>>>>>> - return 0;
>>>>>>> +
>>>>>>> + return 0;
>>>>>
>>>>> This change is ok.
>>>>>
>>>>>>> }
>>>>>>> void drm_gem_unpin(struct drm_gem_object *obj)
>>>>>>> @@ -1172,7 +1172,8 @@ int drm_gem_vmap(struct drm_gem_object
>>>>>>> *obj, struct iosys_map *map)
>>>>>>> ret = obj->funcs->vmap(obj, map);
>>>>>>> if (ret)
>>>>>>> return ret;
>>>>>>> - else if (iosys_map_is_null(map))
>>>>>>> +
>>>>>>> + if (iosys_map_is_null(map))
>>>>>>> return -ENOMEM;
>>>>>
>>>>> This is not correct. Calling iosys_map_is_null() is part of handling
>>>>> the return value from vmap, so the else is fine.
>>>>>
>>>> Are you serious ?
>>>>
>>>>
>>>> 1. Before apply this patch:
>>>>
>>>>
>>>> If the 'ret' is 0, it stand for obj->funcs->vmap() is successful,
>>>> then
>>>> if (iosys_map_is_null(map)) will be run.
>>>>
>>>> If the 'ret' is NOT 0, then it return immediately.
>>>>
>>>>
>>>> 2. After apply this patch:
>>>>
>>>>
>>>> If the 'ret' is NOT 0, it stand for obj->funcs->vmap() failed, then it
>>>> return immediately.
>>>>
>>>> If the 'ret' is 0, it stand for obj->funcs->vmap() is successful, then
>>>> the check if (iosys_map_is_null(map))
>>>>
>>>> will be run!
>>>>
>>>>
>>>> I feel strange about the core here, I think the check ' if
>>>> (iosys_map_is_null(map))' is not needed,
>>>>
>>>> the implement should responsible to handle all of possible errors.
>>>
>>> The ->vmap() callback can succeed with ret=0, but we still have no
>>> memory.
>>> Then we return -ENOMEM. The call to _is_null(map) is part of the error
>>> handling for ->vmap(). That is a bit strange, but it as always
>>> worked like
>>> that. Keeping all error handling in the same if-else block make all
>>> this
>>> more obvious.
>>
>> Reading that patch, it wasn't obvious to me at all and could have made
>> the same patch.
>
> The vmap callback could return any errno code; plus a 0 with a NULL
> pointer means -ENOMEM. Doing this here simplifies the callers of
> drm_gem_vmap and makes them more robust. We'd otherwise duplicate the
> test for NULL in each caller.
>
>>
>> Could we add a comment maybe to make it more obvious?
>
> A one-liner that states the given rational might make sense.
>
Yeah, I'm agree.
But I think this is a short-term solution.
We probably should duplicate the test for NULL in each driver in a long
term.
Because we should to keep the align with TTM and SHMEM.
I means that TTM and SHMEM memory manager are good example to follow.
In TTM, Nearly all mapping related function will return -ENOMEM.
```
int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map)
{
// ...
if (!vaddr_iomem)
return -ENOMEM;
iosys_map_set_vaddr_iomem(map, vaddr_iomem);
} else {
// ...
vaddr = vmap(ttm->pages, ttm->num_pages, 0, prot);
if (!vaddr)
return -ENOMEM;
iosys_map_set_vaddr(map, vaddr);
}
return 0;
}
```
The drm_gem_shmem_vmap() function in the SHMEM helper,
also return -ENOMEM.
After reading the code, It seems that
this is necessary to consolidate the standard behavior,
avoid the various device drivers violate each other.
> Best regards
> Thomas
>
>>
>> Maxime
>
--
Jingfeng
More information about the dri-devel
mailing list