Hi Christian, The patch is for driver re- initialize feature, not for driver exit or rmmod. When the driver initialize failed at some point, the re- initialize feature will do some little clean and then try to initialize driver again, then it will re-register some registered debugfs , so it will fail. Regards, Gary -----Original Message----- From: Koenig, Christian Sent: Monday, November 06, 2017 5:26 PM To: Sun, Gary <Gary.Sun at amd.com>; amd-gfx at lists.freedesktop.org Subject: Re: [PATCH] drm/amdgpu:remove debugfs file in amdgpu_device_finish Am 06.11.2017 um 10:20 schrieb Gary Sun: > remove debugfs file in amdgpu_device_finish NAK, the debugfs files are removed automatically by drm_debugfs_cleanup(). So that patch is unnecessary. Regards, Christian. > > Signed-off-by: Gary Sun <Gary.Sun at amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 18 ++++++++++++++++++ > 2 files changed, 19 insertions(+), 0 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h > b/drivers/gpu/drm/amd/amdgpu/amdgpu.h > index 4f919d3..6cfcb5f 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h > @@ -1250,6 +1250,7 @@ struct amdgpu_debugfs { > int amdgpu_debugfs_add_files(struct amdgpu_device *adev, > const struct drm_info_list *files, > unsigned nfiles); > +int amdgpu_debugfs_cleanup_files(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 7b7439f..ee800ab 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > @@ -2520,6 +2520,7 @@ void amdgpu_device_fini(struct amdgpu_device *adev) > amdgpu_doorbell_fini(adev); > amdgpu_pm_sysfs_fini(adev); > amdgpu_debugfs_regs_cleanup(adev); > + amdgpu_debugfs_cleanup_files(adev); > } > > > @@ -3304,6 +3305,23 @@ int amdgpu_debugfs_add_files(struct amdgpu_device *adev, > return 0; > } > > +int amdgpu_debugfs_cleanup_files(struct amdgpu_device *adev) { > + unsigned int i; > + > + for (i = 0; i < adev->debugfs_count; i++) { #if > +defined(CONFIG_DEBUG_FS) > + drm_debugfs_remove_files(adev->debugfs[i].files, > + adev->debugfs[i].num_files, > + adev->ddev->primary); > +#endif > + adev->debugfs[i].files = NUL; > + adev->debugfs[i].num_files = 0; > + } > + adev->debugfs_count = 0; > + return 0; > +} > + > #if defined(CONFIG_DEBUG_FS) > > static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user > *buf,