Am 18.09.2018 um 11:27 schrieb Zhu, Rex:

-----Original Message-----
From: Koenig, Christian
Sent: Tuesday, September 18, 2018 4:41 PM
To: Zhu, Rex <rex....@amd.com>; amd-gfx@lists.freedesktop.org
Subject: Re: [PATCH] drm/amdgpu: don't try to unreserve NULL pointer

Am 18.09.2018 um 10:16 schrieb Zhu, Rex:
-----Original Message-----
From: Christian König <ckoenig.leichtzumer...@gmail.com>
Sent: Tuesday, September 18, 2018 3:14 PM
To: Zhu, Rex <rex....@amd.com>; amd-gfx@lists.freedesktop.org
Subject: Re: [PATCH] drm/amdgpu: don't try to unreserve NULL pointer

Am 18.09.2018 um 08:16 schrieb Zhu, Rex:
-----Original Message-----
From: amd-gfx <amd-gfx-boun...@lists.freedesktop.org> On Behalf Of
Christian König
Sent: Tuesday, September 18, 2018 2:07 AM
To: amd-gfx@lists.freedesktop.org
Subject: [PATCH] drm/amdgpu: don't try to unreserve NULL pointer

Don't try to unreserve a BO we doesn't allocated.

Fixes: 07012fdd497e drm/amdgpu: don't allocate zero sized kernel
BOs

Signed-off-by: Christian König <christian.koe...@amd.com>
---
    drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index 84d82d5382f9..c1387efc0c91 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -348,7 +348,8 @@ int amdgpu_bo_create_kernel(struct
amdgpu_device
*adev,
        if (r)
                return r;
-       amdgpu_bo_unreserve(*bo_ptr);
+       if (*bo_ptr)
+               amdgpu_bo_unreserve(*bo_ptr);

        return 0;
    }
It is weird.
If we return true for allocate bo with size  0.
Does that mean we need to check all the bo_ptr before we use them.
No, allocating a BO with zero size doesn't make much sense and was
essentially undefined behavior previously.

So now we get a defined behavior, but not necessary the one you
expected.
Is that only a rhetorical question or really a problem somewhere?
Logically, the code is trick.
Yeah, that is not a bad argument.

But it also makes the function more useful, e.g. we don't need size checks
any more whenever an optional BO is allocated.
Yes, the problem is user don't need size check. But user have no way to check 
whether the bo is allocated successfully.

Because in size 0 case, the create function also return true.
And as you said below, check bo_ptr is not safe either(the *bo_ptr  may be not 
modified at all).

That is not correct. When size==0 we call amdgpu_bo_unref(bo_ptr), and that one sets bo_ptr to NULL.

When size==0 was possible before, the calling code would have needed to check bo_ptr later on anyway.

In other words what we had before:

calling_function()
{
    if (size) {
        r = amdgpu_bo_create_kernel(..., size, &bo);
        if (r)
            goto error_handling;
    }
    ....
    if (bo)
        ....
}


But now that looks like:
calling_function()
{
    r = amdgpu_bo_create_kernel(..., size, &bo);
    if (r)
        goto error_handling;
    ....
    if (bo) {
        ....
}

So we just removed the extra size check of the calling function. I think that is a valid usage.

Christian.



Regards
Rex




   It also make the  code
if (r)
        return r;
redundant.
Actually that is not correct.

When an error happens the *bo_ptr is not modified at all. So we could then
try to unreserve a BO which was never reserved.
Yes, You ae right.


Christian.

Regards
Rex

Regards,
Christian.

Best Regards
Rex

--
2.14.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to