The framebuffer helper panic notifier is unregistered, in drm_fb_helper_fini(), 
when kernel_fb_helper_list goes from being non-empty to empty. However, in 
drm_fb_helper_single_fb_probe(), it's possible for the panic notifier to be 
registered without an element being added to this list if a driver's probe 
function returns 0. Make sure that an attempt to add the panic notifier is made 
only when adding an element to kernel_fb_helper_list.

Signed-off-by: Frank Binns <frank.bi...@imgtec.com>
---
drivers/gpu/drm/drm_fb_helper.c |   21 ++++++++++-----------
1 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index a0d6e89..d3764b3 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -807,21 +807,20 @@ int drm_fb_helper_single_fb_probe(struct drm_fb_helper 
*fb_helper,
                               printk(KERN_INFO "fb%d: %s frame buffer 
device\n", info->node,
                                      info->fix.id);
+                             /* Switch back to kernel console on panic */
+                             /* multi card linked list maybe */
+                             if (list_empty(&kernel_fb_helper_list)) {
+                                             printk(KERN_INFO "drm: registered 
panic notifier\n");
+                                             
atomic_notifier_chain_register(&panic_notifier_list,
+                                                                               
                     &paniced);
+                                             register_sysrq_key('v', 
&sysrq_drm_fb_helper_restore_op);
+                             }
+
+                             list_add(&fb_helper->kernel_fb_list, 
&kernel_fb_helper_list);
               } else {
                               drm_fb_helper_set_par(info);
               }
-              /* Switch back to kernel console on panic */
-              /* multi card linked list maybe */
-              if (list_empty(&kernel_fb_helper_list)) {
-                              printk(KERN_INFO "drm: registered panic 
notifier\n");
-                              
atomic_notifier_chain_register(&panic_notifier_list,
-                                                                               
      &paniced);
-                              register_sysrq_key('v', 
&sysrq_drm_fb_helper_restore_op);
-              }
-              if (new_fb)
-                              list_add(&fb_helper->kernel_fb_list, 
&kernel_fb_helper_list);
-
               return 0;
}
EXPORT_SYMBOL(drm_fb_helper_single_fb_probe);
--
1.7.5.4

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to