staging: most: dim2-hdm: fix race condition when closing a channel
This patch fixes race between the function poison_channel that clears the state is_initialized and the tasklet function dim2_tasklet_fn that checks the state is_initialized. Signed-off-by: Andrey Shvetsov <andrey.shvetsov@k2l.de> Signed-off-by: Christian Gromm <christian.gromm@microchip.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
908614be16
commit
6ebb3727ea
|
@ -705,12 +705,14 @@ static int poison_channel(struct most_interface *most_iface, int ch_idx)
|
|||
if (!hdm_ch->is_initialized)
|
||||
return -EPERM;
|
||||
|
||||
tasklet_disable(&dim2_tasklet);
|
||||
spin_lock_irqsave(&dim_lock, flags);
|
||||
hal_ret = dim_destroy_channel(&hdm_ch->ch);
|
||||
hdm_ch->is_initialized = false;
|
||||
if (ch_idx == dev->atx_idx)
|
||||
dev->atx_idx = -1;
|
||||
spin_unlock_irqrestore(&dim_lock, flags);
|
||||
tasklet_enable(&dim2_tasklet);
|
||||
if (hal_ret != DIM_NO_ERROR) {
|
||||
pr_err("HAL Failed to close channel %s\n", hdm_ch->name);
|
||||
ret = -EFAULT;
|
||||
|
|
Loading…
Reference in New Issue