diff options
-rw-r--r-- | drivers/gpu/drm/drm_proc.c | 22 |
1 files changed, 7 insertions, 15 deletions
diff --git a/drivers/gpu/drm/drm_proc.c b/drivers/gpu/drm/drm_proc.c index 0646a462d4c7..d7f2324b4fb1 100644 --- a/drivers/gpu/drm/drm_proc.c +++ b/drivers/gpu/drm/drm_proc.c | |||
@@ -95,7 +95,7 @@ static int drm_proc_create_files(const struct drm_info_list *files, int count, | |||
95 | struct drm_device *dev = minor->dev; | 95 | struct drm_device *dev = minor->dev; |
96 | struct proc_dir_entry *ent; | 96 | struct proc_dir_entry *ent; |
97 | struct drm_info_node *tmp; | 97 | struct drm_info_node *tmp; |
98 | int i, ret; | 98 | int i; |
99 | 99 | ||
100 | for (i = 0; i < count; i++) { | 100 | for (i = 0; i < count; i++) { |
101 | u32 features = files[i].driver_features; | 101 | u32 features = files[i].driver_features; |
@@ -105,10 +105,9 @@ static int drm_proc_create_files(const struct drm_info_list *files, int count, | |||
105 | continue; | 105 | continue; |
106 | 106 | ||
107 | tmp = kmalloc(sizeof(struct drm_info_node), GFP_KERNEL); | 107 | tmp = kmalloc(sizeof(struct drm_info_node), GFP_KERNEL); |
108 | if (tmp == NULL) { | 108 | if (!tmp) |
109 | ret = -1; | 109 | return -1; |
110 | goto fail; | 110 | |
111 | } | ||
112 | tmp->minor = minor; | 111 | tmp->minor = minor; |
113 | tmp->info_ent = &files[i]; | 112 | tmp->info_ent = &files[i]; |
114 | list_add(&tmp->list, &minor->proc_nodes.list); | 113 | list_add(&tmp->list, &minor->proc_nodes.list); |
@@ -120,16 +119,10 @@ static int drm_proc_create_files(const struct drm_info_list *files, int count, | |||
120 | minor->index, files[i].name); | 119 | minor->index, files[i].name); |
121 | list_del(&tmp->list); | 120 | list_del(&tmp->list); |
122 | kfree(tmp); | 121 | kfree(tmp); |
123 | ret = -1; | 122 | return -1; |
124 | goto fail; | ||
125 | } | 123 | } |
126 | } | 124 | } |
127 | return 0; | 125 | return 0; |
128 | |||
129 | fail: | ||
130 | for (i = 0; i < count; i++) | ||
131 | remove_proc_entry(drm_proc_list[i].name, minor->proc_root); | ||
132 | return ret; | ||
133 | } | 126 | } |
134 | 127 | ||
135 | /** | 128 | /** |
@@ -160,7 +153,7 @@ int drm_proc_init(struct drm_minor *minor, struct proc_dir_entry *root) | |||
160 | ret = drm_proc_create_files(drm_proc_list, DRM_PROC_ENTRIES, | 153 | ret = drm_proc_create_files(drm_proc_list, DRM_PROC_ENTRIES, |
161 | minor->proc_root, minor); | 154 | minor->proc_root, minor); |
162 | if (ret) { | 155 | if (ret) { |
163 | remove_proc_entry(name, root); | 156 | remove_proc_subtree(name, root); |
164 | minor->proc_root = NULL; | 157 | minor->proc_root = NULL; |
165 | DRM_ERROR("Failed to create core drm proc files\n"); | 158 | DRM_ERROR("Failed to create core drm proc files\n"); |
166 | return ret; | 159 | return ret; |
@@ -210,8 +203,7 @@ int drm_proc_cleanup(struct drm_minor *minor, struct proc_dir_entry *root) | |||
210 | drm_proc_remove_files(drm_proc_list, DRM_PROC_ENTRIES, minor); | 203 | drm_proc_remove_files(drm_proc_list, DRM_PROC_ENTRIES, minor); |
211 | 204 | ||
212 | sprintf(name, "%d", minor->index); | 205 | sprintf(name, "%d", minor->index); |
213 | remove_proc_entry(name, root); | 206 | remove_proc_subtree(name, root); |
214 | |||
215 | return 0; | 207 | return 0; |
216 | } | 208 | } |
217 | 209 | ||