]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm: Extract __setplane_check()
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 28 Jun 2018 13:54:55 +0000 (16:54 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 13 Jul 2018 14:58:19 +0000 (17:58 +0300)
Pull all the error checking out from __set_plane_internal() to a helper
function. We'll have another user of this soon.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180628135457.14647-1-ville.syrjala@linux.intel.com
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/drm_plane.c

index df0b4ebbedbf4e8b803bfbdc5eb791dbad4bc8b7..5c97a0131484019a79ef9ebe20d51da329edc030 100644 (file)
@@ -583,6 +583,52 @@ int drm_plane_check_pixel_format(struct drm_plane *plane,
        return 0;
 }
 
+static int __setplane_check(struct drm_plane *plane,
+                           struct drm_crtc *crtc,
+                           struct drm_framebuffer *fb,
+                           int32_t crtc_x, int32_t crtc_y,
+                           uint32_t crtc_w, uint32_t crtc_h,
+                           uint32_t src_x, uint32_t src_y,
+                           uint32_t src_w, uint32_t src_h)
+{
+       int ret;
+
+       /* Check whether this plane is usable on this CRTC */
+       if (!(plane->possible_crtcs & drm_crtc_mask(crtc))) {
+               DRM_DEBUG_KMS("Invalid crtc for plane\n");
+               return -EINVAL;
+       }
+
+       /* Check whether this plane supports the fb pixel format. */
+       ret = drm_plane_check_pixel_format(plane, fb->format->format,
+                                          fb->modifier);
+       if (ret) {
+               struct drm_format_name_buf format_name;
+
+               DRM_DEBUG_KMS("Invalid pixel format %s, modifier 0x%llx\n",
+                             drm_get_format_name(fb->format->format,
+                                                 &format_name),
+                             fb->modifier);
+               return ret;
+       }
+
+       /* Give drivers some help against integer overflows */
+       if (crtc_w > INT_MAX ||
+           crtc_x > INT_MAX - (int32_t) crtc_w ||
+           crtc_h > INT_MAX ||
+           crtc_y > INT_MAX - (int32_t) crtc_h) {
+               DRM_DEBUG_KMS("Invalid CRTC coordinates %ux%u+%d+%d\n",
+                             crtc_w, crtc_h, crtc_x, crtc_y);
+               return -ERANGE;
+       }
+
+       ret = drm_framebuffer_check_src_coords(src_x, src_y, src_w, src_h, fb);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
 /*
  * __setplane_internal - setplane handler for internal callers
  *
@@ -616,37 +662,9 @@ static int __setplane_internal(struct drm_plane *plane,
                goto out;
        }
 
-       /* Check whether this plane is usable on this CRTC */
-       if (!(plane->possible_crtcs & drm_crtc_mask(crtc))) {
-               DRM_DEBUG_KMS("Invalid crtc for plane\n");
-               ret = -EINVAL;
-               goto out;
-       }
-
-       /* Check whether this plane supports the fb pixel format. */
-       ret = drm_plane_check_pixel_format(plane, fb->format->format,
-                                          fb->modifier);
-       if (ret) {
-               struct drm_format_name_buf format_name;
-               DRM_DEBUG_KMS("Invalid pixel format %s, modifier 0x%llx\n",
-                             drm_get_format_name(fb->format->format,
-                                                 &format_name),
-                             fb->modifier);
-               goto out;
-       }
-
-       /* Give drivers some help against integer overflows */
-       if (crtc_w > INT_MAX ||
-           crtc_x > INT_MAX - (int32_t) crtc_w ||
-           crtc_h > INT_MAX ||
-           crtc_y > INT_MAX - (int32_t) crtc_h) {
-               DRM_DEBUG_KMS("Invalid CRTC coordinates %ux%u+%d+%d\n",
-                             crtc_w, crtc_h, crtc_x, crtc_y);
-               ret = -ERANGE;
-               goto out;
-       }
-
-       ret = drm_framebuffer_check_src_coords(src_x, src_y, src_w, src_h, fb);
+       ret = __setplane_check(plane, crtc, fb,
+                              crtc_x, crtc_y, crtc_w, crtc_h,
+                              src_x, src_y, src_w, src_h);
        if (ret)
                goto out;