counter: ti-eqep: Use container_of instead of struct counter_device::priv
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Tue, 21 Dec 2021 08:16:47 +0000 (17:16 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 21 Dec 2021 09:32:08 +0000 (10:32 +0100)
Using counter->priv is a memory read and so more expensive than
container_of which is only an addition. (In this case even a noop
because the offset is 0.)

So container_of is expected to be a tad faster, it's type-safe, and
produces smaller code (ARCH=arm allmodconfig):

$ source/scripts/bloat-o-meter drivers/counter/ti-eqep.o-pre drivers/counter/ti-eqep.o
add/remove: 0/0 grow/shrink: 0/9 up/down: 0/-108 (-108)
Function                                     old     new   delta
ti_eqep_position_enable_write                132     120     -12
ti_eqep_position_enable_read                 260     248     -12
ti_eqep_position_ceiling_write               132     120     -12
ti_eqep_position_ceiling_read                236     224     -12
ti_eqep_function_write                       220     208     -12
ti_eqep_function_read                        372     360     -12
ti_eqep_count_write                          312     300     -12
ti_eqep_count_read                           236     224     -12
ti_eqep_action_read                          664     652     -12
Total: Before=4598, After=4490, chg -2.35%

Acked-by: David Lechner <david@lechnology.com>
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: William Breathitt Gray <vilhelm.gray@gmail.com>
Link: https://lore.kernel.org/r/4bde7cbd9e43a5909208102094444219d3154466.1640072891.git.vilhelm.gray@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/counter/ti-eqep.c

index 09817c953f9abb834798ac6923417af952b55790..9e0e46bca4c2840e3e97204642457aa4b050de39 100644 (file)
@@ -87,10 +87,15 @@ struct ti_eqep_cnt {
        struct regmap *regmap16;
 };
 
+static struct ti_eqep_cnt *ti_eqep_count_from_counter(struct counter_device *counter)
+{
+       return container_of(counter, struct ti_eqep_cnt, counter);
+}
+
 static int ti_eqep_count_read(struct counter_device *counter,
                              struct counter_count *count, u64 *val)
 {
-       struct ti_eqep_cnt *priv = counter->priv;
+       struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);
        u32 cnt;
 
        regmap_read(priv->regmap32, QPOSCNT, &cnt);
@@ -102,7 +107,7 @@ static int ti_eqep_count_read(struct counter_device *counter,
 static int ti_eqep_count_write(struct counter_device *counter,
                               struct counter_count *count, u64 val)
 {
-       struct ti_eqep_cnt *priv = counter->priv;
+       struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);
        u32 max;
 
        regmap_read(priv->regmap32, QPOSMAX, &max);
@@ -116,7 +121,7 @@ static int ti_eqep_function_read(struct counter_device *counter,
                                 struct counter_count *count,
                                 enum counter_function *function)
 {
-       struct ti_eqep_cnt *priv = counter->priv;
+       struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);
        u32 qdecctl;
 
        regmap_read(priv->regmap16, QDECCTL, &qdecctl);
@@ -143,7 +148,7 @@ static int ti_eqep_function_write(struct counter_device *counter,
                                  struct counter_count *count,
                                  enum counter_function function)
 {
-       struct ti_eqep_cnt *priv = counter->priv;
+       struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);
        enum ti_eqep_count_func qsrc;
 
        switch (function) {
@@ -173,7 +178,7 @@ static int ti_eqep_action_read(struct counter_device *counter,
                               struct counter_synapse *synapse,
                               enum counter_synapse_action *action)
 {
-       struct ti_eqep_cnt *priv = counter->priv;
+       struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);
        enum counter_function function;
        u32 qdecctl;
        int err;
@@ -245,7 +250,7 @@ static int ti_eqep_position_ceiling_read(struct counter_device *counter,
                                         struct counter_count *count,
                                         u64 *ceiling)
 {
-       struct ti_eqep_cnt *priv = counter->priv;
+       struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);
        u32 qposmax;
 
        regmap_read(priv->regmap32, QPOSMAX, &qposmax);
@@ -259,7 +264,7 @@ static int ti_eqep_position_ceiling_write(struct counter_device *counter,
                                          struct counter_count *count,
                                          u64 ceiling)
 {
-       struct ti_eqep_cnt *priv = counter->priv;
+       struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);
 
        if (ceiling != (u32)ceiling)
                return -ERANGE;
@@ -272,7 +277,7 @@ static int ti_eqep_position_ceiling_write(struct counter_device *counter,
 static int ti_eqep_position_enable_read(struct counter_device *counter,
                                        struct counter_count *count, u8 *enable)
 {
-       struct ti_eqep_cnt *priv = counter->priv;
+       struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);
        u32 qepctl;
 
        regmap_read(priv->regmap16, QEPCTL, &qepctl);
@@ -285,7 +290,7 @@ static int ti_eqep_position_enable_read(struct counter_device *counter,
 static int ti_eqep_position_enable_write(struct counter_device *counter,
                                         struct counter_count *count, u8 enable)
 {
-       struct ti_eqep_cnt *priv = counter->priv;
+       struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);
 
        regmap_write_bits(priv->regmap16, QEPCTL, QEPCTL_PHEN, enable ? -1 : 0);