[PATCH] drm/amd/amdgpu: fix bug fail to remove debugfs when rmmod

Christian König deathsimple at vodafone.de
Tue Aug 15 08:26:36 UTC 2017


Ok in this case I don't think we should do anything here.

That we can't rmmod the driver on pre 4.11 is a bit annoying, but 
doesn't affect the upstream driver.

Christian.

Am 15.08.2017 um 05:00 schrieb Wang, Annie:
> Hi Christian,
>
> Yes. drm_debugfs_cleanup()  should delete all the files, after  the following commit.
>
> commit 086f2e5cde747dcae800b2d8b0ac7741a8c6fcbe
> Author: Noralf Trønnes <noralf at tronnes.org>
> Date:   Thu Jan 26 23:56:03 2017 +0100
>
>      drm: debugfs: Remove all files automatically on cleanup
>
>      Instead of having the drivers call drm_debugfs_remove_files() in
>      their drm_driver->debugfs_cleanup hook, do it automatically by
>      traversing minor->debugfs_list.
>      Also use debugfs_remove_recursive() so drivers who add their own
>      debugfs files don't have to keep track of them for removal.
>
>      Signed-off-by: Noralf Trønnes <noralf at tronnes.org>
>      Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
>      Link: http://patchwork.freedesktop.org/patch/msgid/20170126225621.12314-2-noralf@tronnes.org
>
>
> Kernel before 4.11 don't clean debugfs files automatically.
>
>> -----Original Message-----
>> From: Christian König [mailto:deathsimple at vodafone.de]
>> Sent: Friday, August 11, 2017 4:15 PM
>> To: Wang, Annie <Annie.Wang at amd.com>; Alex Deucher
>> <alexdeucher at gmail.com>
>> Cc: amd-gfx list <amd-gfx at lists.freedesktop.org>
>> Subject: Re: [PATCH] drm/amd/amdgpu: fix bug fail to remove debugfs when
>> rmmod
>>
>> Hi Annie,
>>
>> well something is clearly not working as expected here.
>>
>> All those files are registered with drm_debugfs_create_files() and should
>> automatically be removed when drm_debugfs_cleanup() is called.
>>
>> Can you figure out what is going wrong here?
>>
>> Thanks,
>> Christian.
>>
>> Am 11.08.2017 um 04:25 schrieb Wang, Annie:
>>> Hi Alex,
>>>
>>> The following files are all left.
>>>
>>> amdgpu_fence_info
>>> amdgpu_firmware_info
>>> amdgpu_gem_info
>>> amdgpu_gpu_reset
>>> amdgpu_gtt_mm
>>> amdgpu_pm_info
>>> amdgpu_sa_info
>>> amdgpu_test_ib
>>> amdgpu_vram_mm
>>> ttm_dma_page_pool
>>> ttm_page_pool
>>>
>>> Instead of fini them separately,  how about implement the callback function ---
>> debugfs_fini.
>>>            .debugfs_fini = amdgpu_debugfs_cleanup,
>>>
>>> And in the future I will send another patch to collect all the init function
>>>            .debugfs_init = amdgpu_debugfs_init,
>>>
>>>
>>>> -----Original Message-----
>>>> From: Alex Deucher [mailto:alexdeucher at gmail.com]
>>>> Sent: Friday, August 11, 2017 1:01 AM
>>>> To: Wang, Annie <Annie.Wang at amd.com>
>>>> Cc: amd-gfx list <amd-gfx at lists.freedesktop.org>
>>>> Subject: Re: [PATCH] drm/amd/amdgpu: fix bug fail to remove debugfs
>>>> when rmmod
>>>>
>>>> On Thu, Aug 10, 2017 at 5:12 AM, Wang Hongcheng <Annie.Wang at amd.com>
>>>> wrote:
>>>>> Some debug files are forgotten to remove at fini. Remove them all in
>>>>> pci_remove.
>>>>>
>>>>> BUG: SWDEV-129297
>>>> What files are failing to get removed?  I'd prefer to remove them in
>>>> the relevant places in the code (to mirror where they are added)
>>>> rather than generically cleaning everything up.  Either that or unify
>>>> all the debugfs init/fini stuff in one place.
>>>>
>>>> Alex
>>>>
>>>>> Signed-off-by: Wang Hongcheng <Annie.Wang at amd.com>
>>>>> ---
>>>>>    drivers/gpu/drm/amd/amdgpu/amdgpu.h        |  2 ++
>>>>>    drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 19
>> +++++++++++++++++++
>>>>>    drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c    |  2 ++
>>>>>    3 files changed, 23 insertions(+)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>>>> index c28069e4..b542191 100644
>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>>>> @@ -1250,6 +1250,8 @@ struct amdgpu_debugfs {  int
>>>>> amdgpu_debugfs_add_files(struct amdgpu_device *adev,
>>>>>                                const struct drm_info_list *files,
>>>>>                                unsigned nfiles);
>>>>> +int amdgpu_debugfs_cleanup(struct amdgpu_device *adev);
>>>>> +
>>>>>    int amdgpu_debugfs_fence_init(struct amdgpu_device *adev);
>>>>>
>>>>>    #if defined(CONFIG_DEBUG_FS)
>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>>>> index 7e40071..7594abb 100644
>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>>>> @@ -3215,6 +3215,25 @@ int amdgpu_debugfs_add_files(struct
>>>> amdgpu_device *adev,
>>>>>           return 0;
>>>>>    }
>>>>>
>>>>> +int amdgpu_debugfs_cleanup(struct amdgpu_device *adev) {
>>>>> +       struct drm_info_node *node, *tmp;
>>>>> +
>>>>> +       if (!&adev->ddev->primary->debugfs_root)
>>>>> +               return 0;
>>>>> +
>>>>> +       mutex_lock(&adev->ddev->primary->debugfs_lock);
>>>>> +       list_for_each_entry_safe(node, tmp,
>>>>> +               &adev->ddev->primary->debugfs_list, list) {
>>>>> +               debugfs_remove(node->dent);
>>>>> +               list_del(&node->list);
>>>>> +               kfree(node);
>>>>> +       }
>>>>> +       mutex_unlock(&adev->ddev->primary->debugfs_lock);
>>>>> +
>>>>> +       return 0;
>>>>> +}
>>>>> +
>>>>>    #if defined(CONFIG_DEBUG_FS)
>>>>>
>>>>>    static ssize_t amdgpu_debugfs_regs_read(struct file *f, char
>>>>> __user *buf, diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>>>> index 13c91a6..4f5af93 100644
>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>>>> @@ -594,7 +594,9 @@ static void
>>>>>    amdgpu_pci_remove(struct pci_dev *pdev)  {
>>>>>           struct drm_device *dev = pci_get_drvdata(pdev);
>>>>> +       struct amdgpu_device *adev = dev->dev_private;
>>>>>
>>>>> +       amdgpu_debugfs_cleanup(adev);
>>>>>           drm_dev_unregister(dev);
>>>>>           drm_dev_unref(dev);
>>>>>    }
>>>>> --
>>>>> 2.7.4
>>>>>
>>>>> _______________________________________________
>>>>> amd-gfx mailing list
>>>>> amd-gfx at lists.freedesktop.org
>>>>> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
>>> _______________________________________________
>>> amd-gfx mailing list
>>> amd-gfx at lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/amd-gfx




More information about the amd-gfx mailing list