Re: [PATCH 1/3] media: ngene: Replace semaphore cmd_mutex with mutex

From: Arnd Bergmann
Date: Thu Jun 08 2017 - 11:10:58 EST


On Thu, Jun 8, 2017 at 12:04 PM, Binoy Jayan <binoy.jayan@xxxxxxxxxx> wrote:
> The semaphore 'cmd_mutex' is used as a simple mutex, so
> it should be written as one. Semaphores are going away in the future.
>
> Signed-off-by: Binoy Jayan <binoy.jayan@xxxxxxxxxx>
> ---

> @@ -1283,7 +1283,7 @@ static int ngene_load_firm(struct ngene *dev)
>
> static void ngene_stop(struct ngene *dev)
> {
> - down(&dev->cmd_mutex);
> + mutex_lock(&dev->cmd_mutex);
> i2c_del_adapter(&(dev->channel[0].i2c_adapter));
> i2c_del_adapter(&(dev->channel[1].i2c_adapter));
> ngwritel(0, NGENE_INT_ENABLE);

Are you sure about this one? There is only one mutex_lock() and
then the structure gets freed without a corresponding mutex_unlock().

I suspect this violates some rules of mutexes, either when compile
testing with "make C=1", or when running with lockdep enabled.

Can we actually have a concurrently held mutex at the time we
get here? If not, using mutex_destroy() in place of the down()
may be the right answer.

Arnd