Hello all! > 9 лист. 2022 р. о 10:48 Wang Yufen <wangyufen@xxxxxxxxxx> написав(ла): > > When non-devm resources are allocated they mustn't be followed by devm > allocations, otherwise it will break the tear down ordering and might > lead to crashes or other bugs during ->remove() stage. Fix this by > wrapping mutex_destroy() call with devm_add_action_or_reset(). > > Fixes: fc19967bcb8f ("leds: add LED driver for EL15203000 board") > Signed-off-by: Wang Yufen <wangyufen@xxxxxxxxxx> > Cc: Oleh Kravchenko <oleg@xxxxxxxxxx> > --- > drivers/leds/leds-el15203000.c | 18 +++++++++++------- > 1 file changed, 11 insertions(+), 7 deletions(-) > > diff --git a/drivers/leds/leds-el15203000.c b/drivers/leds/leds-el15203000.c > index 7e7b617..9be934e 100644 > --- a/drivers/leds/leds-el15203000.c > +++ b/drivers/leds/leds-el15203000.c > @@ -287,10 +287,16 @@ static int el15203000_probe_dt(struct el15203000 *priv) > return ret; > } > > +static void el15203000_mutex_destroy(void *lock) > +{ > + mutex_destroy(lock); > +} > + > static int el15203000_probe(struct spi_device *spi) > { > struct el15203000 *priv; > size_t count; > + int ret; > > count = device_get_child_node_count(&spi->dev); > if (!count) { > @@ -312,15 +318,14 @@ static int el15203000_probe(struct spi_device *spi) > > spi_set_drvdata(spi, priv); > > + ret = devm_add_action_or_reset(&spi->dev, el15203000_mutex_destroy, > + &priv->lock); > + if (ret) > + return ret; > + > return el15203000_probe_dt(priv); > } > > -static void el15203000_remove(struct spi_device *spi) Is remove() callback from struct spi_driver deprecated? > -{ > - struct el15203000 *priv = spi_get_drvdata(spi); > - > - mutex_destroy(&priv->lock); > -} > > static const struct of_device_id el15203000_dt_ids[] = { > { .compatible = "crane,el15203000", }, > @@ -331,7 +336,6 @@ static void el15203000_remove(struct spi_device *spi) > > static struct spi_driver el15203000_driver = { > .probe = el15203000_probe, > - .remove = el15203000_remove, > .driver = { > .name = KBUILD_MODNAME, > .of_match_table = el15203000_dt_ids, > -- > 1.8.3.1 >