[PATCH 6/8] counter: stm32-lptimer-cnt: Use container_of instead of struct counter_device::priv
From: Uwe Kleine-König <hidden>
Date: 2021-12-21 10:46:19
Also in:
linux-iio, lkml
Subsystem:
counter subsystem, stm32 timer/lptimer drivers, the rest · Maintainers:
William Breathitt Gray, Fabrice Gasnier, Linus Torvalds
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): add/remove: 0/0 grow/shrink: 0/10 up/down: 0/-140 (-140) Function old new delta stm32_lptim_cnt_read 272 260 -12 stm32_lptim_cnt_probe 528 516 -12 stm32_lptim_cnt_function_write 420 408 -12 stm32_lptim_cnt_function_read 184 172 -12 stm32_lptim_cnt_enable_write 436 424 -12 stm32_lptim_cnt_enable_read 312 300 -12 stm32_lptim_cnt_ceiling_write 368 356 -12 stm32_lptim_cnt_ceiling_read 84 72 -12 stm32_lptim_cnt_action_read 388 376 -12 stm32_lptim_cnt_action_write 576 544 -32 Total: Before=6458, After=6318, chg -2.17% Signed-off-by: Uwe Kleine-König <redacted> --- drivers/counter/stm32-lptimer-cnt.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/drivers/counter/stm32-lptimer-cnt.c b/drivers/counter/stm32-lptimer-cnt.c
index 5168833b1fdf..c6eb3071571f 100644
--- a/drivers/counter/stm32-lptimer-cnt.c
+++ b/drivers/counter/stm32-lptimer-cnt.c@@ -30,6 +30,11 @@ struct stm32_lptim_cnt { bool enabled; }; +static inline struct stm32_lptim_cnt *stm32_lptim_from_counter(struct counter_device *counter) +{ + return container_of(counter, struct stm32_lptim_cnt, counter); +} + static int stm32_lptim_is_enabled(struct stm32_lptim_cnt *priv) { u32 val;
@@ -141,7 +146,7 @@ static const enum counter_synapse_action stm32_lptim_cnt_synapse_actions[] = { static int stm32_lptim_cnt_read(struct counter_device *counter, struct counter_count *count, u64 *val) { - struct stm32_lptim_cnt *const priv = counter->priv; + struct stm32_lptim_cnt *const priv = stm32_lptim_from_counter(counter); u32 cnt; int ret;
@@ -158,7 +163,7 @@ static int stm32_lptim_cnt_function_read(struct counter_device *counter, struct counter_count *count, enum counter_function *function) { - struct stm32_lptim_cnt *const priv = counter->priv; + struct stm32_lptim_cnt *const priv = stm32_lptim_from_counter(counter); if (!priv->quadrature_mode) { *function = COUNTER_FUNCTION_INCREASE;
@@ -177,7 +182,7 @@ static int stm32_lptim_cnt_function_write(struct counter_device *counter, struct counter_count *count, enum counter_function function) { - struct stm32_lptim_cnt *const priv = counter->priv; + struct stm32_lptim_cnt *const priv = stm32_lptim_from_counter(counter); if (stm32_lptim_is_enabled(priv)) return -EBUSY;
@@ -200,7 +205,7 @@ static int stm32_lptim_cnt_enable_read(struct counter_device *counter, struct counter_count *count, u8 *enable) { - struct stm32_lptim_cnt *const priv = counter->priv; + struct stm32_lptim_cnt *const priv = stm32_lptim_from_counter(counter); int ret; ret = stm32_lptim_is_enabled(priv);
@@ -216,7 +221,7 @@ static int stm32_lptim_cnt_enable_write(struct counter_device *counter, struct counter_count *count, u8 enable) { - struct stm32_lptim_cnt *const priv = counter->priv; + struct stm32_lptim_cnt *const priv = stm32_lptim_from_counter(counter); int ret; /* Check nobody uses the timer, or already disabled/enabled */
@@ -241,7 +246,7 @@ static int stm32_lptim_cnt_ceiling_read(struct counter_device *counter, struct counter_count *count, u64 *ceiling) { - struct stm32_lptim_cnt *const priv = counter->priv; + struct stm32_lptim_cnt *const priv = stm32_lptim_from_counter(counter); *ceiling = priv->ceiling;
@@ -252,7 +257,7 @@ static int stm32_lptim_cnt_ceiling_write(struct counter_device *counter, struct counter_count *count, u64 ceiling) { - struct stm32_lptim_cnt *const priv = counter->priv; + struct stm32_lptim_cnt *const priv = stm32_lptim_from_counter(counter); if (stm32_lptim_is_enabled(priv)) return -EBUSY;
@@ -277,7 +282,7 @@ static int stm32_lptim_cnt_action_read(struct counter_device *counter, struct counter_synapse *synapse, enum counter_synapse_action *action) { - struct stm32_lptim_cnt *const priv = counter->priv; + struct stm32_lptim_cnt *const priv = stm32_lptim_from_counter(counter); enum counter_function function; int err;
@@ -321,7 +326,7 @@ static int stm32_lptim_cnt_action_write(struct counter_device *counter, struct counter_synapse *synapse, enum counter_synapse_action action) { - struct stm32_lptim_cnt *const priv = counter->priv; + struct stm32_lptim_cnt *const priv = stm32_lptim_from_counter(counter); enum counter_function function; int err;
@@ -438,7 +443,6 @@ static int stm32_lptim_cnt_probe(struct platform_device *pdev) } priv->counter.num_counts = 1; priv->counter.signals = stm32_lptim_cnt_signals; - priv->counter.priv = priv; platform_set_drvdata(pdev, priv);
--
2.33.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel