]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/i915/power: fix size for for_each_set_bit() in abox iteration
authorJani Nikula <jani.nikula@intel.com>
Fri, 5 Sep 2025 10:41:49 +0000 (13:41 +0300)
committerJani Nikula <jani.nikula@intel.com>
Mon, 8 Sep 2025 09:56:29 +0000 (12:56 +0300)
for_each_set_bit() expects size to be in bits, not bytes. The abox mask
iteration uses bytes, but it works by coincidence, because the local
variable holding the mask is unsigned long, and the mask only ever has
bit 2 as the highest bit. Using a smaller type could lead to subtle and
very hard to track bugs.

Fixes: 62afef2811e4 ("drm/i915/rkl: RKL uses ABOX0 for pixel transfers")
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Cc: stable@vger.kernel.org # v5.9+
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://lore.kernel.org/r/20250905104149.1144751-1-jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_display_power.c

index 7f9a2d743bac8a59b04b2e4d9b484a31142cd368..da4babfd6bcbd3b427c6da76cc54b450abeb4a38 100644 (file)
@@ -1174,7 +1174,7 @@ static void icl_mbus_init(struct intel_display *display)
        if (DISPLAY_VER(display) == 12)
                abox_regs |= BIT(0);
 
-       for_each_set_bit(i, &abox_regs, sizeof(abox_regs))
+       for_each_set_bit(i, &abox_regs, BITS_PER_TYPE(abox_regs))
                intel_de_rmw(display, MBUS_ABOX_CTL(i), mask, val);
 }
 
@@ -1639,11 +1639,11 @@ static void tgl_bw_buddy_init(struct intel_display *display)
        if (table[config].page_mask == 0) {
                drm_dbg_kms(display->drm,
                            "Unknown memory configuration; disabling address buddy logic.\n");
-               for_each_set_bit(i, &abox_mask, sizeof(abox_mask))
+               for_each_set_bit(i, &abox_mask, BITS_PER_TYPE(abox_mask))
                        intel_de_write(display, BW_BUDDY_CTL(i),
                                       BW_BUDDY_DISABLE);
        } else {
-               for_each_set_bit(i, &abox_mask, sizeof(abox_mask)) {
+               for_each_set_bit(i, &abox_mask, BITS_PER_TYPE(abox_mask)) {
                        intel_de_write(display, BW_BUDDY_PAGE_MASK(i),
                                       table[config].page_mask);