2011/10/25 Christian K?nig <deathsimple at vodafone.de>: > Having registered debugfs files globally causes > the files to not show up on the second, third > etc.. card in the system. > > Signed-off-by: Christian K?nig <deathsimple at vodafone.de>
Reviewed-by: Alex Deucher <alexander.deucher at amd.com> > --- > ?drivers/gpu/drm/radeon/radeon.h ? ? ? ?| ? ?8 +++++++ > ?drivers/gpu/drm/radeon/radeon_device.c | ? 33 ++++++++++++++----------------- > ?2 files changed, 23 insertions(+), 18 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h > index c1e056b..c052406 100644 > --- a/drivers/gpu/drm/radeon/radeon.h > +++ b/drivers/gpu/drm/radeon/radeon.h > @@ -881,6 +881,11 @@ void radeon_test_moves(struct radeon_device *rdev); > ?/* > ?* Debugfs > ?*/ > +struct radeon_debugfs { > + ? ? ? ?struct drm_info_list ? ?*files; > + ? ? ? ?unsigned ? ? ? ? ? ? ? ?num_files; > +}; > + > ?int radeon_debugfs_add_files(struct radeon_device *rdev, > ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct drm_info_list *files, > ? ? ? ? ? ? ? ? ? ? ? ? ? ? unsigned nfiles); > @@ -1243,6 +1248,9 @@ struct radeon_device { > ? ? ? ?struct drm_file *cmask_filp; > ? ? ? ?/* i2c buses */ > ? ? ? ?struct radeon_i2c_chan *i2c_bus[RADEON_MAX_I2C_BUS]; > + ? ? ? /* debugfs */ > + ? ? ? struct radeon_debugfs ? debugfs[RADEON_DEBUGFS_MAX_NUM_FILES]; > + ? ? ? unsigned ? ? ? ? ? ? ? ?debugfs_count; > ?}; > > ?int radeon_device_init(struct radeon_device *rdev, > diff --git a/drivers/gpu/drm/radeon/radeon_device.c > b/drivers/gpu/drm/radeon/radeon_device.c > index b51e157..13ac46c 100644 > --- a/drivers/gpu/drm/radeon/radeon_device.c > +++ b/drivers/gpu/drm/radeon/radeon_device.c > @@ -977,33 +977,29 @@ int radeon_gpu_reset(struct radeon_device *rdev) > ?/* > ?* Debugfs > ?*/ > -struct radeon_debugfs { > - ? ? ? struct drm_info_list ? ?*files; > - ? ? ? unsigned ? ? ? ? ? ? ? ?num_files; > -}; > -static struct radeon_debugfs _radeon_debugfs[RADEON_DEBUGFS_MAX_NUM_FILES]; > -static unsigned _radeon_debugfs_count = 0; > - > ?int radeon_debugfs_add_files(struct radeon_device *rdev, > ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct drm_info_list *files, > ? ? ? ? ? ? ? ? ? ? ? ? ? ? unsigned nfiles) > ?{ > ? ? ? ?unsigned i; > > - ? ? ? for (i = 0; i < _radeon_debugfs_count; i++) { > - ? ? ? ? ? ? ? if (_radeon_debugfs[i].files == files) { > + ? ? ? for (i = 0; i < rdev->debugfs_count; i++) { > + ? ? ? ? ? ? ? if (rdev->debugfs[i].files == files) { > ? ? ? ? ? ? ? ? ? ? ? ?/* Already registered */ > ? ? ? ? ? ? ? ? ? ? ? ?return 0; > ? ? ? ? ? ? ? ?} > ? ? ? ?} > - ? ? ? if ((_radeon_debugfs_count + nfiles) > RADEON_DEBUGFS_MAX_NUM_FILES) { > - ? ? ? ? ? ? ? DRM_ERROR("Reached maximum number of debugfs files.\n"); > - ? ? ? ? ? ? ? DRM_ERROR("Report so we increase > RADEON_DEBUGFS_MAX_NUM_FILES.\n"); > + > + ? ? ? i = rdev->debugfs_count + 1; > + ? ? ? if (i > RADEON_DEBUGFS_MAX_NUM_FILES) { > + ? ? ? ? ? ? ? DRM_ERROR("Reached maximum number of debugfs components.\n"); > + ? ? ? ? ? ? ? DRM_ERROR("Report so we increase " > + ? ? ? ? ? ? ? ? ? ? ? ? "RADEON_DEBUGFS_MAX_COMPONENTS.\n"); > ? ? ? ? ? ? ? ?return -EINVAL; > ? ? ? ?} > - ? ? ? _radeon_debugfs[_radeon_debugfs_count].files = files; > - ? ? ? _radeon_debugfs[_radeon_debugfs_count].num_files = nfiles; > - ? ? ? _radeon_debugfs_count++; > + ? ? ? rdev->debugfs[rdev->debugfs_count].files = files; > + ? ? ? rdev->debugfs[rdev->debugfs_count].num_files = nfiles; > + ? ? ? rdev->debugfs_count = i; > ?#if defined(CONFIG_DEBUG_FS) > ? ? ? ?drm_debugfs_create_files(files, nfiles, > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? rdev->ddev->control->debugfs_root, > @@ -1023,11 +1019,12 @@ int radeon_debugfs_init(struct drm_minor *minor) > > ?void radeon_debugfs_cleanup(struct drm_minor *minor) > ?{ > + ? ? ? ?struct radeon_device *rdev = minor->dev->dev_private; > ? ? ? ?unsigned i; > > - ? ? ? for (i = 0; i < _radeon_debugfs_count; i++) { > - ? ? ? ? ? ? ? drm_debugfs_remove_files(_radeon_debugfs[i].files, > - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?_radeon_debugfs[i].num_files, minor); > + ? ? ? for (i = 0; i < rdev->debugfs_count; i++) { > + ? ? ? ? ? ? ? drm_debugfs_remove_files(rdev->debugfs[i].files, > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?rdev->debugfs[i].num_files, minor); > ? ? ? ?} > ?} > ?#endif > -- > 1.7.5.4 > > _______________________________________________ > dri-devel mailing list > dri-devel at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel >