Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ba6f5826 authored by Sergei Antonov's avatar Sergei Antonov Committed by Dave Airlie
Browse files

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: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarSergei Antonov <saproj@gmail.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 3640da2f
Loading
Loading
Loading
Loading
+15 −2
Original line number Original line Diff line number Diff line
@@ -29,6 +29,7 @@
 *      Jesse Barnes <jesse.barnes@intel.com>
 *      Jesse Barnes <jesse.barnes@intel.com>
 */
 */


#include <linux/kernel.h>
#include <linux/export.h>
#include <linux/export.h>
#include <linux/moduleparam.h>
#include <linux/moduleparam.h>


@@ -88,7 +89,13 @@ bool drm_helper_encoder_in_use(struct drm_encoder *encoder)
	struct drm_connector *connector;
	struct drm_connector *connector;
	struct drm_device *dev = encoder->dev;
	struct drm_device *dev = encoder->dev;


	/*
	 * We can expect this mutex to be locked if we are not panicking.
	 * Locking is currently fubar in the panic handler.
	 */
	if (!oops_in_progress)
		WARN_ON(!mutex_is_locked(&dev->mode_config.mutex));
		WARN_ON(!mutex_is_locked(&dev->mode_config.mutex));

	list_for_each_entry(connector, &dev->mode_config.connector_list, head)
	list_for_each_entry(connector, &dev->mode_config.connector_list, head)
		if (connector->encoder == encoder)
		if (connector->encoder == encoder)
			return true;
			return true;
@@ -112,7 +119,13 @@ bool drm_helper_crtc_in_use(struct drm_crtc *crtc)
	struct drm_encoder *encoder;
	struct drm_encoder *encoder;
	struct drm_device *dev = crtc->dev;
	struct drm_device *dev = crtc->dev;


	/*
	 * We can expect this mutex to be locked if we are not panicking.
	 * Locking is currently fubar in the panic handler.
	 */
	if (!oops_in_progress)
		WARN_ON(!mutex_is_locked(&dev->mode_config.mutex));
		WARN_ON(!mutex_is_locked(&dev->mode_config.mutex));

	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head)
	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head)
		if (encoder->crtc == crtc && drm_helper_encoder_in_use(encoder))
		if (encoder->crtc == crtc && drm_helper_encoder_in_use(encoder))
			return true;
			return true;