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
>

Reply via email to