35 #include <linux/slab.h>
36 #include <linux/export.h>
39 #if defined(CONFIG_DEBUG_FS)
45 static struct drm_info_list drm_debugfs_list[] = {
52 {
"vma", drm_vma_info, 0},
55 #define DRM_DEBUGFS_ENTRIES ARRAY_SIZE(drm_debugfs_list)
62 return single_open(file, node->info_ent->show, node);
68 .open = drm_debugfs_open,
87 int drm_debugfs_create_files(
struct drm_info_list *
files,
int count,
88 struct dentry *root,
struct drm_minor *minor)
92 struct drm_info_node *
tmp;
95 for (i = 0; i <
count; i++) {
99 (dev->driver->driver_features & features) != features)
108 root, tmp, &drm_debugfs_fops);
110 DRM_ERROR(
"Cannot create /sys/kernel/debug/dri/%s/%s\n",
111 root->
d_name.name, files[i].name);
119 tmp->info_ent = &files[
i];
122 list_add(&tmp->list, &minor->debugfs_list);
128 drm_debugfs_remove_files(files, count, minor);
144 int drm_debugfs_init(
struct drm_minor *minor,
int minor_id,
151 INIT_LIST_HEAD(&minor->debugfs_list);
155 if (!minor->debugfs_root) {
156 DRM_ERROR(
"Cannot create /sys/kernel/debug/dri/%s\n", name);
160 ret = drm_debugfs_create_files(drm_debugfs_list, DRM_DEBUGFS_ENTRIES,
161 minor->debugfs_root, minor);
164 minor->debugfs_root =
NULL;
165 DRM_ERROR(
"Failed to create core drm debugfs files\n");
169 if (dev->driver->debugfs_init) {
170 ret = dev->driver->debugfs_init(minor);
172 DRM_ERROR(
"DRM: Driver failed to initialize "
173 "/sys/kernel/debug/dri.\n");
191 int drm_debugfs_remove_files(
struct drm_info_list *files,
int count,
192 struct drm_minor *minor)
195 struct drm_info_node *
tmp;
199 for (i = 0; i <
count; i++) {
202 if (tmp->info_ent == &files[i]) {
222 int drm_debugfs_cleanup(
struct drm_minor *minor)
226 if (!minor->debugfs_root)
229 if (dev->driver->debugfs_cleanup)
230 dev->driver->debugfs_cleanup(minor);
232 drm_debugfs_remove_files(drm_debugfs_list, DRM_DEBUGFS_ENTRIES, minor);
235 minor->debugfs_root =
NULL;