mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 07:03:09 -04:00
Merge "qseecom: Proper handling of unmapping dmabuf"
This commit is contained in:
commit
b2632f07d9
1 changed files with 41 additions and 10 deletions
|
|
@ -190,6 +190,13 @@ struct sglist_info {
|
|||
#define MAKE_WHITELIST_VERSION(major, minor, patch) \
|
||||
(((major & 0x3FF) << 22) | ((minor & 0x3FF) << 12) | (patch & 0xFFF))
|
||||
|
||||
#define MAKE_NULL(sgt, attach, dmabuf) do {\
|
||||
sgt = NULL;\
|
||||
attach = NULL;\
|
||||
dmabuf = NULL;\
|
||||
} while (0)
|
||||
|
||||
|
||||
struct qseecom_registered_listener_list {
|
||||
struct list_head list;
|
||||
struct qseecom_register_listener_req svc;
|
||||
|
|
@ -1432,6 +1439,7 @@ static int qseecom_vaddr_map(int ion_fd,
|
|||
err_unmap:
|
||||
dma_buf_end_cpu_access(new_dma_buf, DMA_BIDIRECTIONAL);
|
||||
qseecom_dmabuf_unmap(new_sgt, new_attach, new_dma_buf);
|
||||
MAKE_NULL(*sgt, *attach, *dmabuf);
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -1508,9 +1516,11 @@ static int __qseecom_set_sb_memory(struct qseecom_registered_listener_list *svc,
|
|||
}
|
||||
return 0;
|
||||
err:
|
||||
if (svc->dmabuf)
|
||||
if (svc->dmabuf) {
|
||||
qseecom_vaddr_unmap(svc->sb_virt, svc->sgt, svc->attach,
|
||||
svc->dmabuf);
|
||||
MAKE_NULL(svc->sgt, svc->attach, svc->dmabuf);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -1636,9 +1646,11 @@ static int __qseecom_unregister_listener(struct qseecom_dev_handle *data,
|
|||
}
|
||||
|
||||
exit:
|
||||
if (ptr_svc->dmabuf)
|
||||
if (ptr_svc->dmabuf) {
|
||||
qseecom_vaddr_unmap(ptr_svc->sb_virt,
|
||||
ptr_svc->sgt, ptr_svc->attach, ptr_svc->dmabuf);
|
||||
MAKE_NULL(ptr_svc->sgt, ptr_svc->attach, ptr_svc->dmabuf);
|
||||
}
|
||||
__qseecom_free_tzbuf(&ptr_svc->sglistinfo_shm);
|
||||
list_del(&ptr_svc->list);
|
||||
kzfree(ptr_svc);
|
||||
|
|
@ -2049,9 +2061,12 @@ static int qseecom_set_client_mem_param(struct qseecom_dev_handle *data,
|
|||
|
||||
return ret;
|
||||
exit:
|
||||
if (data->client.dmabuf)
|
||||
if (data->client.dmabuf) {
|
||||
qseecom_vaddr_unmap(data->client.sb_virt, data->client.sgt,
|
||||
data->client.attach, data->client.dmabuf);
|
||||
MAKE_NULL(data->client.sgt,
|
||||
data->client.attach, data->client.dmabuf);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -2992,8 +3007,10 @@ static int qseecom_load_app(struct qseecom_dev_handle *data, void __user *argp)
|
|||
}
|
||||
|
||||
loadapp_err:
|
||||
if (dmabuf)
|
||||
if (dmabuf) {
|
||||
qseecom_vaddr_unmap(vaddr, sgt, attach, dmabuf);
|
||||
MAKE_NULL(sgt, attach, dmabuf);
|
||||
}
|
||||
checkapp_err:
|
||||
__qseecom_disable_clk_scale_down(data);
|
||||
enable_clk_err:
|
||||
|
|
@ -3129,9 +3146,12 @@ static int qseecom_unload_app(struct qseecom_dev_handle *data,
|
|||
}
|
||||
|
||||
unload_exit:
|
||||
if (data->client.dmabuf)
|
||||
if (data->client.dmabuf) {
|
||||
qseecom_vaddr_unmap(data->client.sb_virt, data->client.sgt,
|
||||
data->client.attach, data->client.dmabuf);
|
||||
MAKE_NULL(data->client.sgt,
|
||||
data->client.attach, data->client.dmabuf);
|
||||
}
|
||||
data->released = true;
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -4063,8 +4083,10 @@ static int __qseecom_update_cmd_buf(void *msg, bool cleanup,
|
|||
}
|
||||
return ret;
|
||||
err:
|
||||
if (!IS_ERR_OR_NULL(sg_ptr))
|
||||
if (!IS_ERR_OR_NULL(sg_ptr)) {
|
||||
qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
|
||||
MAKE_NULL(sg_ptr, attach, dmabuf);
|
||||
}
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
|
@ -4301,8 +4323,10 @@ err:
|
|||
data->client.sec_buf_fd[i].size,
|
||||
data->client.sec_buf_fd[i].vbase,
|
||||
data->client.sec_buf_fd[i].pbase);
|
||||
if (!IS_ERR_OR_NULL(sg_ptr))
|
||||
if (!IS_ERR_OR_NULL(sg_ptr)) {
|
||||
qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
|
||||
MAKE_NULL(sg_ptr, attach, dmabuf);
|
||||
}
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
|
@ -5867,8 +5891,10 @@ exit_register_bus_bandwidth_needs:
|
|||
}
|
||||
|
||||
exit_cpu_restore:
|
||||
if (dmabuf)
|
||||
if (dmabuf) {
|
||||
qseecom_vaddr_unmap(va, sgt, attach, dmabuf);
|
||||
MAKE_NULL(sgt, attach, dmabuf);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -7122,8 +7148,10 @@ clean:
|
|||
}
|
||||
return ret;
|
||||
err:
|
||||
if (!IS_ERR_OR_NULL(sg_ptr))
|
||||
if (!IS_ERR_OR_NULL(sg_ptr)) {
|
||||
qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf);
|
||||
MAKE_NULL(sg_ptr, attach, dmabuf);
|
||||
}
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
|
@ -8314,10 +8342,13 @@ static int qseecom_release(struct inode *inode, struct file *file)
|
|||
break;
|
||||
case QSEECOM_SECURE_SERVICE:
|
||||
case QSEECOM_GENERIC:
|
||||
if (data->client.dmabuf)
|
||||
if (data->client.dmabuf) {
|
||||
qseecom_vaddr_unmap(data->client.sb_virt,
|
||||
data->client.sgt, data->client.attach,
|
||||
data->client.dmabuf);
|
||||
MAKE_NULL(data->client.sgt, data->client.attach,
|
||||
data->client.dmabuf);
|
||||
}
|
||||
break;
|
||||
case QSEECOM_UNAVAILABLE_CLIENT_APP:
|
||||
break;
|
||||
|
|
|
|||
Loading…
Reference in a new issue