patch "mei: allow map and unmap of client dma buffer only for disconnected" added to char-misc-linus
Subsystems (3)
This is a note to let you know that I've just added the patch titled
mei: allow map and unmap of client dma buffer only for disconnected
to my char-misc git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
in the char-misc-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From ce068bc7da473e39b64d130101e178406023df0c Mon Sep 17 00:00:00 2001
From: Tomas Winkler <[email protected]>
Date: Thu, 18 Mar 2021 07:59:59 +0200
Subject: mei: allow map and unmap of client dma buffer only for disconnected
client
Allow map and unmap of the client dma buffer only when the client is not connected. The functions return -EPROTO if the client is already connected. This is to fix the race when traffic may start or stop when buffer is not available.
--- drivers/misc/mei/client.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-)
drivers/misc/mei/client.c +7 -10
@@ -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);
Signature · 1 line
2.31.0