]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
thermal/drivers/loongson2: Constify struct thermal_zone_device_ops
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sun, 25 May 2025 12:32:30 +0000 (14:32 +0200)
committerDaniel Lezcano <daniel.lezcano@linaro.org>
Tue, 15 Jul 2025 13:23:38 +0000 (15:23 +0200)
'struct thermal_zone_device_ops' could be left unmodified in this driver.

Constifying this structure moves some data to a read-only section, so
increases overall security, especially when the structure holds some
function pointers.

This partly reverts commit 734b5def91b5 ("thermal/drivers/loongson2: Add
Loongson-2K2000 support") which removed the const qualifier. Instead,
define two different structures.

On a x86_64, with allmodconfig:
Before:
======
   text    data     bss     dec     hex filename
   5089    1160       0    6249    1869 drivers/thermal/loongson2_thermal.o

After:
=====
   text    data     bss     dec     hex filename
   5464    1128       0    6592    19c0 drivers/thermal/loongson2_thermal.o

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://lore.kernel.org/r/5f5f815f85a9450bca7848c6d47a1fee840f47e5.1748176328.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
drivers/thermal/loongson2_thermal.c

index 2d6b75b0539f13166d78df74c40772606a6d7f54..ea4dd2fb1f4735f3d1ae72e933c32b8dd45a75d6 100644 (file)
@@ -112,13 +112,19 @@ static int loongson2_thermal_set_trips(struct thermal_zone_device *tz, int low,
        return loongson2_thermal_set(data, low/MILLI, high/MILLI, true);
 }
 
-static struct thermal_zone_device_ops loongson2_of_thermal_ops = {
+static const struct thermal_zone_device_ops loongson2_2k1000_of_thermal_ops = {
        .get_temp = loongson2_2k1000_get_temp,
        .set_trips = loongson2_thermal_set_trips,
 };
 
+static const struct thermal_zone_device_ops loongson2_2k2000_of_thermal_ops = {
+       .get_temp = loongson2_2k2000_get_temp,
+       .set_trips = loongson2_thermal_set_trips,
+};
+
 static int loongson2_thermal_probe(struct platform_device *pdev)
 {
+       const struct thermal_zone_device_ops *thermal_ops;
        struct device *dev = &pdev->dev;
        struct loongson2_thermal_data *data;
        struct thermal_zone_device *tzd;
@@ -140,7 +146,9 @@ static int loongson2_thermal_probe(struct platform_device *pdev)
                if (IS_ERR(data->temp_reg))
                        return PTR_ERR(data->temp_reg);
 
-               loongson2_of_thermal_ops.get_temp = loongson2_2k2000_get_temp;
+               thermal_ops = &loongson2_2k2000_of_thermal_ops;
+       } else {
+               thermal_ops = &loongson2_2k1000_of_thermal_ops;
        }
 
        irq = platform_get_irq(pdev, 0);
@@ -152,8 +160,7 @@ static int loongson2_thermal_probe(struct platform_device *pdev)
        loongson2_thermal_set(data, 0, 0, false);
 
        for (i = 0; i <= LOONGSON2_MAX_SENSOR_SEL_NUM; i++) {
-               tzd = devm_thermal_of_zone_register(dev, i, data,
-                                                   &loongson2_of_thermal_ops);
+               tzd = devm_thermal_of_zone_register(dev, i, data, thermal_ops);
 
                if (!IS_ERR(tzd))
                        break;