From 86ad5044c39b2bb0d3b9cdf28f8b48a88922738f Mon Sep 17 00:00:00 2001 From: tharun kumar Date: Mon, 3 Jul 2017 17:07:03 +0530 Subject: [PATCH] msm: ADSPRPC: avoid sending new requests to dsp while device_release When fastrpc_device_release is in progress, don't send any new requets to DSP Change-Id: I4d9e2f06485cde6dbd3d7aef402e3e853e0be998 Acked-by: Chenna Kesava Raju Signed-off-by: Tharun Kumar Merugu --- drivers/char/adsprpc.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/char/adsprpc.c b/drivers/char/adsprpc.c index a84172106e0f..7a4b52913a19 100644 --- a/drivers/char/adsprpc.c +++ b/drivers/char/adsprpc.c @@ -291,6 +291,7 @@ struct fastrpc_file { int cid; int ssrcount; int pd; + int file_close; struct fastrpc_apps *apps; struct fastrpc_perf perf; struct dentry *debugfs_file; @@ -2195,6 +2196,9 @@ static int fastrpc_file_free(struct fastrpc_file *fl) return 0; } (void)fastrpc_release_current_dsp_process(fl); + spin_lock(&fl->hlock); + fl->file_close = 1; + spin_unlock(&fl->hlock); fastrpc_context_list_dtor(fl); fastrpc_buf_list_free(fl); hlist_for_each_entry_safe(map, n, &fl->maps, hn) { @@ -2583,6 +2587,14 @@ static long fastrpc_device_ioctl(struct file *file, unsigned int ioctl_num, p.inv.fds = 0; p.inv.attrs = 0; + spin_lock(&fl->hlock); + if (fl->file_close == 1) { + err = EBADF; + pr_warn("ADSPRPC: fastrpc_device_release is happening, So not sending any new requests to DSP"); + spin_unlock(&fl->hlock); + goto bail; + } + spin_unlock(&fl->hlock); switch (ioctl_num) { case FASTRPC_IOCTL_INVOKE: