[PATCH 0/3] Use implicit kref infra

Pan, Xinhui Xinhui.Pan at amd.com
Wed Sep 2 01:42:02 UTC 2020


If you take a look at the below function, you should not use driver's release to free adev. As dev is embedded in adev.

 809 static void drm_dev_release(struct kref *ref)
 810 {
 811         struct drm_device *dev = container_of(ref, struct drm_device, ref);
 812        
 813         if (dev->driver->release)
 814                 dev->driver->release(dev);
 815 
 816         drm_managed_release(dev);
 817 
 818         kfree(dev->managed.final_kfree);
 819 }

You have to make another change something like
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index 13068fdf4331..2aabd2b4c63b 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -815,7 +815,8 @@ static void drm_dev_release(struct kref *ref)
 
        drm_managed_release(dev);
 
-       kfree(dev->managed.final_kfree);
+       if (dev->driver->final_release)
+               dev->driver->final_release(dev);
 }

And in the final_release callback we free the dev. But that is a little complex now. so I prefer still using final_kfree.
Of course we can do some cleanup work in the driver's release callback. BUT no kfree.

-----原始邮件-----
发件人: "Tuikov, Luben" <Luben.Tuikov at amd.com>
日期: 2020年9月2日 星期三 09:07
收件人: "amd-gfx at lists.freedesktop.org" <amd-gfx at lists.freedesktop.org>, "dri-devel at lists.freedesktop.org" <dri-devel at lists.freedesktop.org>
抄送: "Deucher, Alexander" <Alexander.Deucher at amd.com>, Daniel Vetter <daniel at ffwll.ch>, "Pan, Xinhui" <Xinhui.Pan at amd.com>, "Tuikov, Luben" <Luben.Tuikov at amd.com>
主题: [PATCH 0/3] Use implicit kref infra

    Use the implicit kref infrastructure to free the container
    struct amdgpu_device, container of struct drm_device.
    
    First, in drm_dev_register(), do not indiscriminately warn
    when a DRM driver hasn't opted for managed.final_kfree,
    but instead check if the driver has provided its own
    "release" function callback in the DRM driver structure.
    If that is the case, no warning.
    
    Remove drmm_add_final_kfree(). We take care of that, in the
    kref "release" callback when all refs are down to 0, via
    drm_dev_put(), i.e. the free is implicit.
    
    Remove superfluous NULL check, since the DRM device to be
    suspended always exists, so long as the underlying PCI and
    DRM devices exist.
    
    Luben Tuikov (3):
      drm: No warn for drivers who provide release
      drm/amdgpu: Remove drmm final free
      drm/amdgpu: Remove superfluous NULL check
    
     drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 3 ---
     drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c    | 2 --
     drivers/gpu/drm/drm_drv.c                  | 3 ++-
     3 files changed, 2 insertions(+), 6 deletions(-)
    
    -- 
    2.28.0.394.ge197136389
    
    



More information about the amd-gfx mailing list