{
        struct drm_i915_private *i915 = to_i915(fb->dev);
        unsigned int height;
-       u32 alignment;
+       u32 alignment, unused;
 
        if (DISPLAY_VER(i915) >= 12 &&
            !intel_fb_needs_pot_stride_remap(to_intel_framebuffer(fb)) &&
        height = ALIGN(height, intel_tile_height(fb, color_plane));
 
        /* Catch potential overflows early */
-       if (add_overflows_t(u32, mul_u32_u32(height, fb->pitches[color_plane]),
-                           fb->offsets[color_plane])) {
+       if (check_add_overflow(mul_u32_u32(height, fb->pitches[color_plane]),
+                              fb->offsets[color_plane], &unused)) {
                drm_dbg_kms(&i915->drm,
                            "Bad offset 0x%08x or pitch %d for color plane %d\n",
                            fb->offsets[color_plane], fb->pitches[color_plane],
 
        __i915_printk(i915, i915_error_injected() ? KERN_DEBUG : KERN_ERR, \
                      fmt, ##__VA_ARGS__)
 
-#if defined(GCC_VERSION) && GCC_VERSION >= 70000
-#define add_overflows_t(T, A, B) \
-       __builtin_add_overflow_p((A), (B), (T)0)
-#else
-#define add_overflows_t(T, A, B) ({ \
-       typeof(A) a = (A); \
-       typeof(B) b = (B); \
-       (T)(a + b) < a; \
-})
-#endif
-
-#define add_overflows(A, B) \
-       add_overflows_t(typeof((A) + (B)), (A), (B))
-
 #define range_overflows(start, size, max) ({ \
        typeof(start) start__ = (start); \
        typeof(size) size__ = (size); \