* [PATCH v3] iio: light: vcnl4000: Fix WARN_ON on uninitialized lock
@ 2023-01-31 14:01 Mårten Lindahl
2023-01-31 14:14 ` Andy Shevchenko
0 siblings, 1 reply; 3+ messages in thread
From: Mårten Lindahl @ 2023-01-31 14:01 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Lars-Peter Clausen, Andy Shevchenko, linux-iio, kernel,
Mårten Lindahl
There are different init functions for the sensors in this driver in
which only one initializes the generic vcnl4000_lock. With commit
e21b5b1f2669 ("iio: light: vcnl4000: Preserve conf bits when toggle power")
the vcnl4040 sensor started to depend on the lock, but it was missed to
initialize it in vcnl4040's init function. This has not been visible
until we run lockdep on it:
DEBUG_LOCKS_WARN_ON(lock->magic != lock)
at kernel/locking/mutex.c:575 __mutex_lock+0x4f8/0x890
Call trace:
__mutex_lock
mutex_lock_nested
vcnl4200_set_power_state
vcnl4200_init
vcnl4000_probe
Fix this by initializing the lock in the probe function instead of doing
it in the chip specific init functions.
Fixes: e21b5b1f2669 ("iio: light: vcnl4000: Preserve conf bits when toggle power")
Signed-off-by: Mårten Lindahl <marten.lindahl@axis.com>
---
v3:
- Trimmed backtrace in commit message even more
- New line before mutex_init
v2:
- Trimmed backtrace in commit message
- Have 12 digit sha-1 id in Fixes tag
- Make the lock initialization in probe instead of in _init function
drivers/iio/light/vcnl4000.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/iio/light/vcnl4000.c b/drivers/iio/light/vcnl4000.c
index cc1a2062e76d..69c5bc987e26 100644
--- a/drivers/iio/light/vcnl4000.c
+++ b/drivers/iio/light/vcnl4000.c
@@ -199,7 +199,6 @@ static int vcnl4000_init(struct vcnl4000_data *data)
data->rev = ret & 0xf;
data->al_scale = 250000;
- mutex_init(&data->vcnl4000_lock);
return data->chip_spec->set_power_state(data, true);
};
@@ -1197,6 +1196,8 @@ static int vcnl4000_probe(struct i2c_client *client)
data->id = id->driver_data;
data->chip_spec = &vcnl4000_chip_spec_cfg[data->id];
+ mutex_init(&data->vcnl4000_lock);
+
ret = data->chip_spec->init(data);
if (ret < 0)
return ret;
--
2.30.2
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH v3] iio: light: vcnl4000: Fix WARN_ON on uninitialized lock
2023-01-31 14:01 [PATCH v3] iio: light: vcnl4000: Fix WARN_ON on uninitialized lock Mårten Lindahl
@ 2023-01-31 14:14 ` Andy Shevchenko
2023-02-02 17:12 ` Jonathan Cameron
0 siblings, 1 reply; 3+ messages in thread
From: Andy Shevchenko @ 2023-01-31 14:14 UTC (permalink / raw)
To: Mårten Lindahl
Cc: Jonathan Cameron, Lars-Peter Clausen, linux-iio, kernel
On Tue, Jan 31, 2023 at 03:01:09PM +0100, Mårten Lindahl wrote:
> There are different init functions for the sensors in this driver in
> which only one initializes the generic vcnl4000_lock. With commit
> e21b5b1f2669 ("iio: light: vcnl4000: Preserve conf bits when toggle power")
> the vcnl4040 sensor started to depend on the lock, but it was missed to
> initialize it in vcnl4040's init function. This has not been visible
> until we run lockdep on it:
>
> DEBUG_LOCKS_WARN_ON(lock->magic != lock)
> at kernel/locking/mutex.c:575 __mutex_lock+0x4f8/0x890
> Call trace:
> __mutex_lock
> mutex_lock_nested
> vcnl4200_set_power_state
> vcnl4200_init
> vcnl4000_probe
>
> Fix this by initializing the lock in the probe function instead of doing
> it in the chip specific init functions.
Fine now, thanks!
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Fixes: e21b5b1f2669 ("iio: light: vcnl4000: Preserve conf bits when toggle power")
> Signed-off-by: Mårten Lindahl <marten.lindahl@axis.com>
> ---
>
> v3:
> - Trimmed backtrace in commit message even more
> - New line before mutex_init
>
> v2:
> - Trimmed backtrace in commit message
> - Have 12 digit sha-1 id in Fixes tag
> - Make the lock initialization in probe instead of in _init function
>
> drivers/iio/light/vcnl4000.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/iio/light/vcnl4000.c b/drivers/iio/light/vcnl4000.c
> index cc1a2062e76d..69c5bc987e26 100644
> --- a/drivers/iio/light/vcnl4000.c
> +++ b/drivers/iio/light/vcnl4000.c
> @@ -199,7 +199,6 @@ static int vcnl4000_init(struct vcnl4000_data *data)
>
> data->rev = ret & 0xf;
> data->al_scale = 250000;
> - mutex_init(&data->vcnl4000_lock);
>
> return data->chip_spec->set_power_state(data, true);
> };
> @@ -1197,6 +1196,8 @@ static int vcnl4000_probe(struct i2c_client *client)
> data->id = id->driver_data;
> data->chip_spec = &vcnl4000_chip_spec_cfg[data->id];
>
> + mutex_init(&data->vcnl4000_lock);
> +
> ret = data->chip_spec->init(data);
> if (ret < 0)
> return ret;
> --
> 2.30.2
>
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH v3] iio: light: vcnl4000: Fix WARN_ON on uninitialized lock
2023-01-31 14:14 ` Andy Shevchenko
@ 2023-02-02 17:12 ` Jonathan Cameron
0 siblings, 0 replies; 3+ messages in thread
From: Jonathan Cameron @ 2023-02-02 17:12 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Mårten Lindahl, Lars-Peter Clausen, linux-iio, kernel
On Tue, 31 Jan 2023 16:14:11 +0200
Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> On Tue, Jan 31, 2023 at 03:01:09PM +0100, Mårten Lindahl wrote:
> > There are different init functions for the sensors in this driver in
> > which only one initializes the generic vcnl4000_lock. With commit
> > e21b5b1f2669 ("iio: light: vcnl4000: Preserve conf bits when toggle power")
> > the vcnl4040 sensor started to depend on the lock, but it was missed to
> > initialize it in vcnl4040's init function. This has not been visible
> > until we run lockdep on it:
> >
> > DEBUG_LOCKS_WARN_ON(lock->magic != lock)
> > at kernel/locking/mutex.c:575 __mutex_lock+0x4f8/0x890
> > Call trace:
> > __mutex_lock
> > mutex_lock_nested
> > vcnl4200_set_power_state
> > vcnl4200_init
> > vcnl4000_probe
> >
> > Fix this by initializing the lock in the probe function instead of doing
> > it in the chip specific init functions.
>
> Fine now, thanks!
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
>
> > Fixes: e21b5b1f2669 ("iio: light: vcnl4000: Preserve conf bits when toggle power")
> > Signed-off-by: Mårten Lindahl <marten.lindahl@axis.com>
Applied to the fixes-togreg branch and marked for stable.
Thanks,
Jonathan
> > ---
> >
> > v3:
> > - Trimmed backtrace in commit message even more
> > - New line before mutex_init
> >
> > v2:
> > - Trimmed backtrace in commit message
> > - Have 12 digit sha-1 id in Fixes tag
> > - Make the lock initialization in probe instead of in _init function
> >
> > drivers/iio/light/vcnl4000.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/iio/light/vcnl4000.c b/drivers/iio/light/vcnl4000.c
> > index cc1a2062e76d..69c5bc987e26 100644
> > --- a/drivers/iio/light/vcnl4000.c
> > +++ b/drivers/iio/light/vcnl4000.c
> > @@ -199,7 +199,6 @@ static int vcnl4000_init(struct vcnl4000_data *data)
> >
> > data->rev = ret & 0xf;
> > data->al_scale = 250000;
> > - mutex_init(&data->vcnl4000_lock);
> >
> > return data->chip_spec->set_power_state(data, true);
> > };
> > @@ -1197,6 +1196,8 @@ static int vcnl4000_probe(struct i2c_client *client)
> > data->id = id->driver_data;
> > data->chip_spec = &vcnl4000_chip_spec_cfg[data->id];
> >
> > + mutex_init(&data->vcnl4000_lock);
> > +
> > ret = data->chip_spec->init(data);
> > if (ret < 0)
> > return ret;
> > --
> > 2.30.2
> >
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-02-02 16:59 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-31 14:01 [PATCH v3] iio: light: vcnl4000: Fix WARN_ON on uninitialized lock Mårten Lindahl
2023-01-31 14:14 ` Andy Shevchenko
2023-02-02 17:12 ` Jonathan Cameron
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox