summaryrefslogtreecommitdiffstats
path: root/drivers/pwm/core.c
diff options
context:
space:
mode:
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>2023-07-25 10:10:04 +0200
committerThierry Reding <thierry.reding@gmail.com>2023-07-28 09:42:37 +0200
commit86eed2a10304a9efe56c2b192b914b377cad260d (patch)
tree246c405a4aedb50f4dee46c73033730eacbd656c /drivers/pwm/core.c
parent387c74e5f91d8e6f0c6e49fddd8b0e53118e5def (diff)
downloadlinux-86eed2a10304a9efe56c2b192b914b377cad260d.tar.gz
linux-86eed2a10304a9efe56c2b192b914b377cad260d.tar.bz2
linux-86eed2a10304a9efe56c2b192b914b377cad260d.zip
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>
Diffstat (limited to 'drivers/pwm/core.c')
-rw-r--r--drivers/pwm/core.c6
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);