]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
powercap: intel_rapl: Use shifts for power-of-2 operations
authorKuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Thu, 12 Feb 2026 23:30:37 +0000 (15:30 -0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 5 Mar 2026 14:52:39 +0000 (15:52 +0100)
Replace division by (1 << value) with shift operations for clarity and
consistency. Add ULL suffix to avoid undefined behavior from shifting
signed integers.

No functional changes intended.

Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Link: https://patch.msgid.link/20260212233044.329790-6-sathyanarayanan.kuppuswamy@linux.intel.com
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/powercap/intel_rapl_common.c

index 2a77a0ee239b785a5a2bb4f27e8937aa8fefe4b7..2c30d791e4435e4c786cb40262292b93e0cb1650 100644 (file)
@@ -964,13 +964,13 @@ static int rapl_check_unit_core(struct rapl_domain *rd)
        }
 
        value = (ra.value & ENERGY_UNIT_MASK) >> ENERGY_UNIT_OFFSET;
-       rd->energy_unit = ENERGY_UNIT_SCALE * 1000000 / (1 << value);
+       rd->energy_unit = (ENERGY_UNIT_SCALE * 1000000) >> value;
 
        value = (ra.value & POWER_UNIT_MASK) >> POWER_UNIT_OFFSET;
-       rd->power_unit = 1000000 / (1 << value);
+       rd->power_unit = 1000000 >> value;
 
        value = (ra.value & TIME_UNIT_MASK) >> TIME_UNIT_OFFSET;
-       rd->time_unit = 1000000 / (1 << value);
+       rd->time_unit = 1000000 >> value;
 
        pr_debug("Core CPU %s:%s energy=%dpJ, time=%dus, power=%duW\n",
                 rd->rp->name, rd->name, rd->energy_unit, rd->time_unit, rd->power_unit);
@@ -992,13 +992,13 @@ static int rapl_check_unit_atom(struct rapl_domain *rd)
        }
 
        value = (ra.value & ENERGY_UNIT_MASK) >> ENERGY_UNIT_OFFSET;
-       rd->energy_unit = ENERGY_UNIT_SCALE * 1 << value;
+       rd->energy_unit = ENERGY_UNIT_SCALE * (1ULL << value);
 
        value = (ra.value & POWER_UNIT_MASK) >> POWER_UNIT_OFFSET;
-       rd->power_unit = (1 << value) * 1000;
+       rd->power_unit = (1ULL << value) * 1000;
 
        value = (ra.value & TIME_UNIT_MASK) >> TIME_UNIT_OFFSET;
-       rd->time_unit = 1000000 / (1 << value);
+       rd->time_unit = 1000000 >> value;
 
        pr_debug("Atom %s:%s energy=%dpJ, time=%dus, power=%duW\n",
                 rd->rp->name, rd->name, rd->energy_unit, rd->time_unit, rd->power_unit);
@@ -1121,7 +1121,7 @@ static u64 rapl_compute_time_window_core(struct rapl_domain *rd, u64 value,
        if (!to_raw) {
                f = (value & 0x60) >> 5;
                y = value & 0x1f;
-               value = (1 << y) * (4 + f) * rd->time_unit / 4;
+               value = (1ULL << y) * (4 + f) * rd->time_unit / 4;
        } else {
                if (value < rd->time_unit)
                        return 0;
@@ -1169,13 +1169,13 @@ static int rapl_check_unit_tpmi(struct rapl_domain *rd)
        }
 
        value = (ra.value & TPMI_ENERGY_UNIT_MASK) >> TPMI_ENERGY_UNIT_OFFSET;
-       rd->energy_unit = ENERGY_UNIT_SCALE * 1000000 / (1 << value);
+       rd->energy_unit = (ENERGY_UNIT_SCALE * 1000000) >> value;
 
        value = (ra.value & TPMI_POWER_UNIT_MASK) >> TPMI_POWER_UNIT_OFFSET;
-       rd->power_unit = 1000000 / (1 << value);
+       rd->power_unit = 1000000 >> value;
 
        value = (ra.value & TPMI_TIME_UNIT_MASK) >> TPMI_TIME_UNIT_OFFSET;
-       rd->time_unit = 1000000 / (1 << value);
+       rd->time_unit = 1000000 >> value;
 
        pr_debug("Core CPU %s:%s energy=%dpJ, time=%dus, power=%duW\n",
                 rd->rp->name, rd->name, rd->energy_unit, rd->time_unit, rd->power_unit);