aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorSergei Antonov <saproj@gmail.com>2014-05-11 18:30:48 -0400
committerDave Airlie <airlied@redhat.com>2014-06-01 23:36:52 -0400
commitba6f582606655754d9dfbfc9dffe75dcf806f1dd (patch)
tree961f8ce74100a644269992fe82840ba798db6d37 /drivers/gpu
parent3640da2faa952a2e9439a254c1ce76033ca0a6dc (diff)
drm/crtc-helper: skip locking checks in panicking path
Skip locking checks in drm_helper_*_in_use() if they are called in panicking path. See similar code in drm_warn_on_modeset_not_all_locked(). After panic information has been output, these WARN_ONs go off outputing a lot of lines and scrolling the panic information out of the screen. Here is a partial call trace showing how execution reaches them: ? drm_helper_crtc_in_use() ? __drm_helper_disable_unused_functions() ? several *_set_config functions ? drm_fb_helper_restore_fbdev_mode() Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Sergei Antonov <saproj@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/drm_crtc_helper.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
index df281b54db01..872ba11c4533 100644
--- a/drivers/gpu/drm/drm_crtc_helper.c
+++ b/drivers/gpu/drm/drm_crtc_helper.c
@@ -29,6 +29,7 @@
29 * Jesse Barnes <jesse.barnes@intel.com> 29 * Jesse Barnes <jesse.barnes@intel.com>
30 */ 30 */
31 31
32#include <linux/kernel.h>
32#include <linux/export.h> 33#include <linux/export.h>
33#include <linux/moduleparam.h> 34#include <linux/moduleparam.h>
34 35
@@ -88,7 +89,13 @@ bool drm_helper_encoder_in_use(struct drm_encoder *encoder)
88 struct drm_connector *connector; 89 struct drm_connector *connector;
89 struct drm_device *dev = encoder->dev; 90 struct drm_device *dev = encoder->dev;
90 91
91 WARN_ON(!mutex_is_locked(&dev->mode_config.mutex)); 92 /*
93 * We can expect this mutex to be locked if we are not panicking.
94 * Locking is currently fubar in the panic handler.
95 */
96 if (!oops_in_progress)
97 WARN_ON(!mutex_is_locked(&dev->mode_config.mutex));
98
92 list_for_each_entry(connector, &dev->mode_config.connector_list, head) 99 list_for_each_entry(connector, &dev->mode_config.connector_list, head)
93 if (connector->encoder == encoder) 100 if (connector->encoder == encoder)
94 return true; 101 return true;
@@ -112,7 +119,13 @@ bool drm_helper_crtc_in_use(struct drm_crtc *crtc)
112 struct drm_encoder *encoder; 119 struct drm_encoder *encoder;
113 struct drm_device *dev = crtc->dev; 120 struct drm_device *dev = crtc->dev;
114 121
115 WARN_ON(!mutex_is_locked(&dev->mode_config.mutex)); 122 /*
123 * We can expect this mutex to be locked if we are not panicking.
124 * Locking is currently fubar in the panic handler.
125 */
126 if (!oops_in_progress)
127 WARN_ON(!mutex_is_locked(&dev->mode_config.mutex));
128
116 list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) 129 list_for_each_entry(encoder, &dev->mode_config.encoder_list, head)
117 if (encoder->crtc == crtc && drm_helper_encoder_in_use(encoder)) 130 if (encoder->crtc == crtc && drm_helper_encoder_in_use(encoder))
118 return true; 131 return true;