diff options
Diffstat (limited to 'drivers/misc/mei/client.c')
| -rw-r--r-- | drivers/misc/mei/client.c | 17 | 
1 files changed, 7 insertions, 10 deletions
| diff --git a/drivers/misc/mei/client.c b/drivers/misc/mei/client.c index 4378a9b25848..2cc370adb238 100644 --- a/drivers/misc/mei/client.c +++ b/drivers/misc/mei/client.c @@ -2286,8 +2286,8 @@ int mei_cl_dma_alloc_and_map(struct mei_cl *cl, const struct file *fp,  	if (buffer_id == 0)  		return -EINVAL; -	if (!mei_cl_is_connected(cl)) -		return -ENODEV; +	if (mei_cl_is_connected(cl)) +		return -EPROTO;  	if (cl->dma_mapped)  		return -EPROTO; @@ -2327,9 +2327,7 @@ int mei_cl_dma_alloc_and_map(struct mei_cl *cl, const struct file *fp,  	mutex_unlock(&dev->device_lock);  	wait_event_timeout(cl->wait, -			   cl->dma_mapped || -			   cl->status || -			   !mei_cl_is_connected(cl), +			   cl->dma_mapped || cl->status,  			   mei_secs_to_jiffies(MEI_CL_CONNECT_TIMEOUT));  	mutex_lock(&dev->device_lock); @@ -2376,8 +2374,9 @@ int mei_cl_dma_unmap(struct mei_cl *cl, const struct file *fp)  		return -EOPNOTSUPP;  	} -	if (!mei_cl_is_connected(cl)) -		return -ENODEV; +	/* do not allow unmap for connected client */ +	if (mei_cl_is_connected(cl)) +		return -EPROTO;  	if (!cl->dma_mapped)  		return -EPROTO; @@ -2405,9 +2404,7 @@ int mei_cl_dma_unmap(struct mei_cl *cl, const struct file *fp)  	mutex_unlock(&dev->device_lock);  	wait_event_timeout(cl->wait, -			   !cl->dma_mapped || -			   cl->status || -			   !mei_cl_is_connected(cl), +			   !cl->dma_mapped || cl->status,  			   mei_secs_to_jiffies(MEI_CL_CONNECT_TIMEOUT));  	mutex_lock(&dev->device_lock); | 
