diff options
author | Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | 2023-07-25 11:10:04 +0300 |
---|---|---|
committer | Thierry Reding <thierry.reding@gmail.com> | 2023-07-28 10:42:37 +0300 |
commit | 86eed2a10304a9efe56c2b192b914b377cad260d (patch) | |
tree | 246c405a4aedb50f4dee46c73033730eacbd656c | |
parent | 387c74e5f91d8e6f0c6e49fddd8b0e53118e5def (diff) | |
download | linux-86eed2a10304a9efe56c2b192b914b377cad260d.tar.xz |
pwm: Fix order of freeing resources in pwmchip_remove()
pwmchip_add() calls of_pwmchip_add() only after adding the chip to
pwm_chips and releasing pwm_lock. So the proper order in
pwmchip_remove() is to call of_pwmchip_remove() before taking the mutex
and removing the chip from pwm_chips. This way pwmchip_remove() releases
the resources in reverse order compared to pwmchip_add() requesting
them.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
-rw-r--r-- | drivers/pwm/core.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index b4703dfc9e4d..dc66e3405bf5 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -318,13 +318,13 @@ void pwmchip_remove(struct pwm_chip *chip) { pwmchip_sysfs_unexport(chip); + if (IS_ENABLED(CONFIG_OF)) + of_pwmchip_remove(chip); + mutex_lock(&pwm_lock); list_del_init(&chip->list); - if (IS_ENABLED(CONFIG_OF)) - of_pwmchip_remove(chip); - free_pwms(chip); mutex_unlock(&pwm_lock); |