diff options
-rw-r--r-- | patches/collateral-evolutions/drm/12-revert-remove_proc_subtree/INFO | 25 | ||||
-rw-r--r-- | patches/collateral-evolutions/drm/12-revert-remove_proc_subtree/drivers_gpu_drm_drm_proc.patch | 62 |
2 files changed, 87 insertions, 0 deletions
diff --git a/patches/collateral-evolutions/drm/12-revert-remove_proc_subtree/INFO b/patches/collateral-evolutions/drm/12-revert-remove_proc_subtree/INFO new file mode 100644 index 00000000..8dbcf8aa --- /dev/null +++ b/patches/collateral-evolutions/drm/12-revert-remove_proc_subtree/INFO @@ -0,0 +1,25 @@ +We cannot backport remove_proc_subtree() modularly so the +only thing we can do is revert its usage. This patch reverts +all of its usage and the commits that added them are listed +below. + +Another thing we could do is look at each driver's usage of +proc and see if its reasonable to instead covert it to use +debugfs. This needs to be dealt with on a case by case basis. + +From 8bc742e13fb2c9cd64988816749295e9ddf53101 Mon Sep 17 00:00:00 2001 +From: David Howells <dhowells@redhat.com> +Date: Fri, 12 Apr 2013 16:15:07 +0100 +Subject: [PATCH] drm: proc: Use remove_proc_subtree() + +Use remove_proc_subtree() rather than remove_proc_entry() to remove a +minor-specific drm proc directory and all its children. + +Things could theoretically be improved by storing the drm_minor pointer in the +minor-specific dir proc_dir_entry struct data and then scrapping the list of +proc files - but that's shared with the debugfs interface where you can't do +that, so I don't see an easy way of doing it. + +Signed-off-by: David Howells <dhowells@redhat.com> +cc: dri-devel@lists.freedesktop.org +Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> diff --git a/patches/collateral-evolutions/drm/12-revert-remove_proc_subtree/drivers_gpu_drm_drm_proc.patch b/patches/collateral-evolutions/drm/12-revert-remove_proc_subtree/drivers_gpu_drm_drm_proc.patch new file mode 100644 index 00000000..b2504742 --- /dev/null +++ b/patches/collateral-evolutions/drm/12-revert-remove_proc_subtree/drivers_gpu_drm_drm_proc.patch @@ -0,0 +1,62 @@ +--- 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, + struct drm_device *dev = minor->dev; + struct proc_dir_entry *ent; + struct drm_info_node *tmp; +- int i; ++ int i, ret; + + for (i = 0; i < count; i++) { + u32 features = files[i].driver_features; +@@ -105,9 +105,10 @@ static int drm_proc_create_files(const struct drm_info_list *files, int count, + continue; + + tmp = kmalloc(sizeof(struct drm_info_node), GFP_KERNEL); +- if (!tmp) +- return -1; +- ++ if (tmp == NULL) { ++ ret = -1; ++ goto fail; ++ } + tmp->minor = minor; + tmp->info_ent = &files[i]; + list_add(&tmp->list, &minor->proc_nodes.list); +@@ -119,10 +120,16 @@ static int drm_proc_create_files(const struct drm_info_list *files, int count, + minor->index, files[i].name); + list_del(&tmp->list); + kfree(tmp); +- return -1; ++ ret = -1; ++ goto fail; + } + } + return 0; ++ ++fail: ++ for (i = 0; i < count; i++) ++ remove_proc_entry(drm_proc_list[i].name, minor->proc_root); ++ return ret; + } + + /** +@@ -153,7 +160,7 @@ int drm_proc_init(struct drm_minor *minor, struct proc_dir_entry *root) + ret = drm_proc_create_files(drm_proc_list, DRM_PROC_ENTRIES, + minor->proc_root, minor); + if (ret) { +- remove_proc_subtree(name, root); ++ remove_proc_entry(name, root); + minor->proc_root = NULL; + DRM_ERROR("Failed to create core drm proc files\n"); + return ret; +@@ -203,7 +210,8 @@ int drm_proc_cleanup(struct drm_minor *minor, struct proc_dir_entry *root) + drm_proc_remove_files(drm_proc_list, DRM_PROC_ENTRIES, minor); + + sprintf(name, "%d", minor->index); +- remove_proc_subtree(name, root); ++ remove_proc_entry(name, root); ++ + return 0; + } + |