ASoC: msm: lock read/write when add/free audio ion memory
As read/write get access to ion memory region as well, it's necessary to lock them when ion memory is about to be added/freed to avoid racing cases. CRs-Fixed: 1071809 Change-Id: I436ead23c93384961b38ca99b9312a40c50ad03a Signed-off-by: Walter Yang <yandongy@codeaurora.org>
This commit is contained in:
parent
c30ea8b0c1
commit
b71a087daa
1 changed files with 20 additions and 0 deletions
|
@ -570,6 +570,8 @@ int audio_aio_release(struct inode *inode, struct file *file)
|
|||
struct q6audio_aio *audio = file->private_data;
|
||||
pr_debug("%s[%p]\n", __func__, audio);
|
||||
mutex_lock(&audio->lock);
|
||||
mutex_lock(&audio->read_lock);
|
||||
mutex_lock(&audio->write_lock);
|
||||
audio->wflush = 1;
|
||||
if (audio->wakelock_voted &&
|
||||
(audio->audio_ws_mgr != NULL) &&
|
||||
|
@ -595,6 +597,8 @@ int audio_aio_release(struct inode *inode, struct file *file)
|
|||
wake_up(&audio->event_wait);
|
||||
audio_aio_reset_event_queue(audio);
|
||||
q6asm_audio_client_free(audio->ac);
|
||||
mutex_unlock(&audio->write_lock);
|
||||
mutex_unlock(&audio->read_lock);
|
||||
mutex_unlock(&audio->lock);
|
||||
mutex_destroy(&audio->lock);
|
||||
mutex_destroy(&audio->read_lock);
|
||||
|
@ -1745,7 +1749,11 @@ static long audio_aio_ioctl(struct file *file, unsigned int cmd,
|
|||
__func__);
|
||||
rc = -EFAULT;
|
||||
} else {
|
||||
mutex_lock(&audio->read_lock);
|
||||
mutex_lock(&audio->write_lock);
|
||||
rc = audio_aio_ion_add(audio, &info);
|
||||
mutex_unlock(&audio->write_lock);
|
||||
mutex_unlock(&audio->read_lock);
|
||||
}
|
||||
mutex_unlock(&audio->lock);
|
||||
break;
|
||||
|
@ -1760,7 +1768,11 @@ static long audio_aio_ioctl(struct file *file, unsigned int cmd,
|
|||
__func__);
|
||||
rc = -EFAULT;
|
||||
} else {
|
||||
mutex_lock(&audio->read_lock);
|
||||
mutex_lock(&audio->write_lock);
|
||||
rc = audio_aio_ion_remove(audio, &info);
|
||||
mutex_unlock(&audio->write_lock);
|
||||
mutex_unlock(&audio->read_lock);
|
||||
}
|
||||
mutex_unlock(&audio->lock);
|
||||
break;
|
||||
|
@ -2064,7 +2076,11 @@ static long audio_aio_compat_ioctl(struct file *file, unsigned int cmd,
|
|||
} else {
|
||||
info.fd = info_32.fd;
|
||||
info.vaddr = compat_ptr(info_32.vaddr);
|
||||
mutex_lock(&audio->read_lock);
|
||||
mutex_lock(&audio->write_lock);
|
||||
rc = audio_aio_ion_add(audio, &info);
|
||||
mutex_unlock(&audio->write_lock);
|
||||
mutex_unlock(&audio->read_lock);
|
||||
}
|
||||
mutex_unlock(&audio->lock);
|
||||
break;
|
||||
|
@ -2081,7 +2097,11 @@ static long audio_aio_compat_ioctl(struct file *file, unsigned int cmd,
|
|||
} else {
|
||||
info.fd = info_32.fd;
|
||||
info.vaddr = compat_ptr(info_32.vaddr);
|
||||
mutex_lock(&audio->read_lock);
|
||||
mutex_lock(&audio->write_lock);
|
||||
rc = audio_aio_ion_remove(audio, &info);
|
||||
mutex_unlock(&audio->write_lock);
|
||||
mutex_unlock(&audio->read_lock);
|
||||
}
|
||||
mutex_unlock(&audio->lock);
|
||||
break;
|
||||
|
|
Loading…
Add table
Reference in a new issue