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 <u.kleine-koenig@xxxxxxxxxxxxxx> --- 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