drm/omap: use __GFP_DMA32 for shmem-backed gem
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / drm_crtc_helper.c
index df281b54db0155fef51c700f62ad2dd20d22ab24..78b37f3febd37cb288b529a0136c14a05e4c96f8 100644 (file)
@@ -29,6 +29,7 @@
  *      Jesse Barnes <jesse.barnes@intel.com>
  */
 
+#include <linux/kernel.h>
 #include <linux/export.h>
 #include <linux/moduleparam.h>
 
@@ -88,7 +89,15 @@ bool drm_helper_encoder_in_use(struct drm_encoder *encoder)
        struct drm_connector *connector;
        struct drm_device *dev = encoder->dev;
 
-       WARN_ON(!mutex_is_locked(&dev->mode_config.mutex));
+       /*
+        * 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(!drm_modeset_is_locked(&dev->mode_config.connection_mutex));
+       }
+
        list_for_each_entry(connector, &dev->mode_config.connector_list, head)
                if (connector->encoder == encoder)
                        return true;
@@ -112,7 +121,13 @@ bool drm_helper_crtc_in_use(struct drm_crtc *crtc)
        struct drm_encoder *encoder;
        struct drm_device *dev = crtc->dev;
 
-       WARN_ON(!mutex_is_locked(&dev->mode_config.mutex));
+       /*
+        * 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));
+
        list_for_each_entry(encoder, &dev->mode_config.encoder_list, head)
                if (encoder->crtc == crtc && drm_helper_encoder_in_use(encoder))
                        return true;
@@ -140,20 +155,14 @@ drm_encoder_disable(struct drm_encoder *encoder)
 static void __drm_helper_disable_unused_functions(struct drm_device *dev)
 {
        struct drm_encoder *encoder;
-       struct drm_connector *connector;
        struct drm_crtc *crtc;
 
        drm_warn_on_modeset_not_all_locked(dev);
 
-       list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
-               if (!connector->encoder)
-                       continue;
-       }
-
        list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
                if (!drm_helper_encoder_in_use(encoder)) {
                        drm_encoder_disable(encoder);
-                       /* disconnector encoder from any connector */
+                       /* disconnect encoder from any connector */
                        encoder->crtc = NULL;
                }
        }
@@ -336,7 +345,7 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
                        continue;
 
                DRM_DEBUG_KMS("[ENCODER:%d:%s] set [MODE:%d:%s]\n",
-                       encoder->base.id, drm_get_encoder_name(encoder),
+                       encoder->base.id, encoder->name,
                        mode->base.id, mode->name);
                encoder_funcs = encoder->helper_private;
                encoder_funcs->mode_set(encoder, mode, adjusted_mode);
@@ -387,8 +396,7 @@ done:
 }
 EXPORT_SYMBOL(drm_crtc_helper_set_mode);
 
-
-static int
+static void
 drm_crtc_helper_disable(struct drm_crtc *crtc)
 {
        struct drm_device *dev = crtc->dev;
@@ -417,7 +425,6 @@ drm_crtc_helper_disable(struct drm_crtc *crtc)
        }
 
        __drm_helper_disable_unused_functions(dev);
-       return 0;
 }
 
 /**
@@ -468,7 +475,8 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
                                (int)set->num_connectors, set->x, set->y);
        } else {
                DRM_DEBUG_KMS("[CRTC:%d] [NOFB]\n", set->crtc->base.id);
-               return drm_crtc_helper_disable(set->crtc);
+               drm_crtc_helper_disable(set->crtc);
+               return 0;
        }
 
        dev = set->crtc->dev;
@@ -607,11 +615,11 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
                }
                if (new_crtc) {
                        DRM_DEBUG_KMS("[CONNECTOR:%d:%s] to [CRTC:%d]\n",
-                               connector->base.id, drm_get_connector_name(connector),
+                               connector->base.id, connector->name,
                                new_crtc->base.id);
                } else {
                        DRM_DEBUG_KMS("[CONNECTOR:%d:%s] to [NOCRTC]\n",
-                               connector->base.id, drm_get_connector_name(connector));
+                               connector->base.id, connector->name);
                }
        }
 
@@ -637,7 +645,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
                        DRM_DEBUG_KMS("Setting connector DPMS state to on\n");
                        for (i = 0; i < set->num_connectors; i++) {
                                DRM_DEBUG_KMS("\t[CONNECTOR:%d:%s] set DPMS on\n", set->connectors[i]->base.id,
-                                             drm_get_connector_name(set->connectors[i]));
+                                             set->connectors[i]->name);
                                set->connectors[i]->funcs->dpms(set->connectors[i], DRM_MODE_DPMS_ON);
                        }
                }