Messages in this thread | | | Date | Mon, 5 Jan 2015 13:58:27 +0000 | From | One Thousand Gnomes <> | Subject | Re: [PATCH] move file->f_op->open out of mutex (misc_mtx) in misc_open |
| |
On Tue, 6 Jan 2015 08:34:07 +0800 xiaomin1 <xiaoming.wang@intel.com> wrote:
> misc_mtx was used to mutex misc_list. > But file->f_op->open may be blocked by downloading > firmware in some devices' open. > So move file->f_op->open out of mutex (misc_mtx) > in misc_open to avoid this block. > It also make code more efficiency. > > Signed-off-by: Zhang Dongxing <dongxing.zhang@intel.com> > Signed-off-by: xiaoming wang <xiaoming.wang@intel.com> > --- > drivers/char/misc.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/char/misc.c b/drivers/char/misc.c > index ffa97d2..289c59e 100644 > --- a/drivers/char/misc.c > +++ b/drivers/char/misc.c > @@ -144,7 +144,8 @@ static int misc_open(struct inode * inode, struct file * file) > replace_fops(file, new_fops); > if (file->f_op->open) { > file->private_data = c; > - err = file->f_op->open(inode,file); > + mutex_unlock(&misc_mtx); > + return file->f_op->open(inode,file); > }
This changes all the users of misc device open from singlethreaded to multi-threaded. Having read through the users I can find this seems safe and they all seem to have the right checks in place and to assume they are multi-threaded.
Reviewed-by: Alan Cox <alan@linux.intel.com>
| |