Loading drivers/crypto/msm/qcedev.c +4 −0 Original line number Diff line number Diff line Loading @@ -278,6 +278,10 @@ static int qcedev_release(struct inode *inode, struct file *file) pr_err("%s: invalid handle %pK\n", __func__, podev); } if (qcedev_unmap_all_buffers(handle)) pr_err("%s: failed to unmap all ion buffers\n", __func__); kzfree(handle); file->private_data = NULL; if (podev != NULL && podev->platform_support.bus_scale_table != NULL) Loading drivers/crypto/msm/qcedev_smmu.c +36 −0 Original line number Diff line number Diff line Loading @@ -407,3 +407,39 @@ int qcedev_check_and_unmap_buffer(void *handle, int fd) return 0; } int qcedev_unmap_all_buffers(void *handle) { struct qcedev_reg_buf_info *binfo = NULL; struct qcedev_mem_client *mem_client = NULL; struct qcedev_handle *qce_hndl = handle; struct list_head *pos; if (!handle) { pr_err("%s: err: invalid input arguments\n", __func__); return -EINVAL; } if (!qce_hndl->cntl || !qce_hndl->cntl->mem_client) { pr_err("%s: err: invalid qcedev handle\n", __func__); return -EINVAL; } mem_client = qce_hndl->cntl->mem_client; if (mem_client->mtype != MEM_ION) return -EPERM; mutex_lock(&qce_hndl->registeredbufs.lock); while (!list_empty(&qce_hndl->registeredbufs.list)) { pos = qce_hndl->registeredbufs.list.next; binfo = list_entry(pos, struct qcedev_reg_buf_info, list); if (binfo) qcedev_unmap_buffer(qce_hndl, mem_client, binfo); list_del(pos); kfree(binfo); } mutex_unlock(&qce_hndl->registeredbufs.lock); return 0; } drivers/crypto/msm/qcedev_smmu.h +1 −0 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ int qcedev_check_and_map_buffer(void *qce_hndl, int fd, unsigned int offset, unsigned int fd_size, unsigned long long *vaddr); int qcedev_check_and_unmap_buffer(void *handle, int fd); int qcedev_unmap_all_buffers(void *handle); extern struct qcedev_reg_buf_info *global_binfo_in; extern struct qcedev_reg_buf_info *global_binfo_out; Loading Loading
drivers/crypto/msm/qcedev.c +4 −0 Original line number Diff line number Diff line Loading @@ -278,6 +278,10 @@ static int qcedev_release(struct inode *inode, struct file *file) pr_err("%s: invalid handle %pK\n", __func__, podev); } if (qcedev_unmap_all_buffers(handle)) pr_err("%s: failed to unmap all ion buffers\n", __func__); kzfree(handle); file->private_data = NULL; if (podev != NULL && podev->platform_support.bus_scale_table != NULL) Loading
drivers/crypto/msm/qcedev_smmu.c +36 −0 Original line number Diff line number Diff line Loading @@ -407,3 +407,39 @@ int qcedev_check_and_unmap_buffer(void *handle, int fd) return 0; } int qcedev_unmap_all_buffers(void *handle) { struct qcedev_reg_buf_info *binfo = NULL; struct qcedev_mem_client *mem_client = NULL; struct qcedev_handle *qce_hndl = handle; struct list_head *pos; if (!handle) { pr_err("%s: err: invalid input arguments\n", __func__); return -EINVAL; } if (!qce_hndl->cntl || !qce_hndl->cntl->mem_client) { pr_err("%s: err: invalid qcedev handle\n", __func__); return -EINVAL; } mem_client = qce_hndl->cntl->mem_client; if (mem_client->mtype != MEM_ION) return -EPERM; mutex_lock(&qce_hndl->registeredbufs.lock); while (!list_empty(&qce_hndl->registeredbufs.list)) { pos = qce_hndl->registeredbufs.list.next; binfo = list_entry(pos, struct qcedev_reg_buf_info, list); if (binfo) qcedev_unmap_buffer(qce_hndl, mem_client, binfo); list_del(pos); kfree(binfo); } mutex_unlock(&qce_hndl->registeredbufs.lock); return 0; }
drivers/crypto/msm/qcedev_smmu.h +1 −0 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ int qcedev_check_and_map_buffer(void *qce_hndl, int fd, unsigned int offset, unsigned int fd_size, unsigned long long *vaddr); int qcedev_check_and_unmap_buffer(void *handle, int fd); int qcedev_unmap_all_buffers(void *handle); extern struct qcedev_reg_buf_info *global_binfo_in; extern struct qcedev_reg_buf_info *global_binfo_out; Loading