]> git.itanic.dy.fi Git - linux-stable/commitdiff
pwm: Reduce number of pointer dereferences in pwm_device_request()
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Thu, 30 Nov 2023 07:21:06 +0000 (08:21 +0100)
committerThierry Reding <thierry.reding@gmail.com>
Wed, 20 Dec 2023 15:24:44 +0000 (16:24 +0100)
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>
drivers/pwm/core.c

index f1ded8ce5ea45255125de125fbae8148aea8aef2..9a4c720c88aadd8ad2667cde7e787f146191739c 100644 (file)
@@ -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)