}
 EXPORT_SYMBOL(drm_rect_intersect);
 
-static u32 clip_scaled(u32 src, u32 dst, u32 clip)
+static u32 clip_scaled(int src, int dst, int *clip)
 {
        u64 tmp;
 
                return 0;
 
        /* Only clip what we have. Keeps the result bounded. */
-       clip = min(clip, dst);
+       *clip = min(*clip, dst);
 
-       tmp = mul_u32_u32(src, dst - clip);
+       tmp = mul_u32_u32(src, dst - *clip);
 
        /*
         * Round toward 1.0 when clipping so that we don't accidentally
        diff = clip->x1 - dst->x1;
        if (diff > 0) {
                u32 new_src_w = clip_scaled(drm_rect_width(src),
-                                           drm_rect_width(dst), diff);
+                                           drm_rect_width(dst), &diff);
 
                src->x1 = src->x2 - new_src_w;
-               dst->x1 = clip->x1;
+               dst->x1 += diff;
        }
        diff = clip->y1 - dst->y1;
        if (diff > 0) {
                u32 new_src_h = clip_scaled(drm_rect_height(src),
-                                           drm_rect_height(dst), diff);
+                                           drm_rect_height(dst), &diff);
 
                src->y1 = src->y2 - new_src_h;
-               dst->y1 = clip->y1;
+               dst->y1 += diff;
        }
        diff = dst->x2 - clip->x2;
        if (diff > 0) {
                u32 new_src_w = clip_scaled(drm_rect_width(src),
-                                           drm_rect_width(dst), diff);
+                                           drm_rect_width(dst), &diff);
 
                src->x2 = src->x1 + new_src_w;
-               dst->x2 = clip->x2;
+               dst->x2 -= diff;
        }
        diff = dst->y2 - clip->y2;
        if (diff > 0) {
                u32 new_src_h = clip_scaled(drm_rect_height(src),
-                                           drm_rect_height(dst), diff);
+                                           drm_rect_height(dst), &diff);
 
                src->y2 = src->y1 + new_src_h;
-               dst->y2 = clip->y2;
+               dst->y2 -= diff;
        }
 
        return drm_rect_visible(dst);