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

Alex Deucher alexdeucher at gmail.com
Tue Aug 15 14:38:20 UTC 2017


On Tue, Aug 15, 2017 at 4:26 AM, Christian König
<deathsimple at vodafone.de> wrote:
> 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.

This patch can be applied to the KCL for dkms.

Alex

>
> 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