diff options
author | Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | 2023-11-30 10:21:06 +0300 |
---|---|---|
committer | Thierry Reding <thierry.reding@gmail.com> | 2023-12-20 18:24:44 +0300 |
commit | efb704abedc7168cee8068da08eb2ca8c1eb1893 (patch) | |
tree | 8a6c76b90b00c53cb71d695b6ec19a04f9a48578 /drivers/pwm/core.c | |
parent | d243221dc9e202d85ca196136d8eaa029091b42c (diff) | |
download | linux-efb704abedc7168cee8068da08eb2ca8c1eb1893.tar.xz |
pwm: Reduce number of pointer dereferences in pwm_device_request()
pwm->chip and pwm->chip->ops are used several times in this function.
Introduce local variables for these.
There is no semantical change, but with ARCH=arm, allmodconfig and
gcc-13 bloat-o-meter reports a slight improvement:
add/remove: 1/1 grow/shrink: 1/1 up/down: 8/-36 (-28)
Function old new delta
pwm_apply_state 476 480 +4
__initcall__kmod_core__307_1092_pwm_debugfs_init4 - 4 +4
__initcall__kmod_core__307_1090_pwm_debugfs_init4 4 - -4
pwm_request_from_chip 628 596 -32
Total: Before=15091, After=15063, chg -0.19%
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
Diffstat (limited to 'drivers/pwm/core.c')
-rw-r--r-- | drivers/pwm/core.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index f1ded8ce5ea4..9a4c720c88aa 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -59,22 +59,24 @@ static struct pwm_chip *pwmchip_find_by_name(const char *name) static int pwm_device_request(struct pwm_device *pwm, const char *label) { int err; + struct pwm_chip *chip = pwm->chip; + const struct pwm_ops *ops = chip->ops; if (test_bit(PWMF_REQUESTED, &pwm->flags)) return -EBUSY; - if (!try_module_get(pwm->chip->owner)) + if (!try_module_get(chip->owner)) return -ENODEV; - if (pwm->chip->ops->request) { - err = pwm->chip->ops->request(pwm->chip, pwm); + if (ops->request) { + err = ops->request(chip, pwm); if (err) { - module_put(pwm->chip->owner); + module_put(chip->owner); return err; } } - if (pwm->chip->ops->get_state) { + if (ops->get_state) { /* * Zero-initialize state because most drivers are unaware of * .usage_power. The other members of state are supposed to be @@ -84,7 +86,7 @@ static int pwm_device_request(struct pwm_device *pwm, const char *label) */ struct pwm_state state = { 0, }; - err = pwm->chip->ops->get_state(pwm->chip, pwm, &state); + err = ops->get_state(chip, pwm, &state); trace_pwm_get(pwm, &state, err); if (!err) |