Merge "msm: mdss: fix wb memory registration optimization"
diff --git a/drivers/video/msm/mdss/mdss_mdp_wb.c b/drivers/video/msm/mdss/mdss_mdp_wb.c
index b50ba59..a87b0ab 100644
--- a/drivers/video/msm/mdss/mdss_mdp_wb.c
+++ b/drivers/video/msm/mdss/mdss_mdp_wb.c
@@ -406,11 +406,28 @@
int ret;
if (!list_empty(&wb->register_queue)) {
+ struct ion_client *iclient = mdss_get_ionclient();
+ struct ion_handle *ihdl;
+
+ if (!iclient) {
+ pr_err("iclient is NULL\n");
+ return NULL;
+ }
+
+ ihdl = ion_import_dma_buf(iclient, data->memory_id);
+ if (IS_ERR_OR_NULL(ihdl)) {
+ pr_err("unable to import fd %d\n", data->memory_id);
+ return NULL;
+ }
+ /* only interested in ptr address, so we can free handle */
+ ion_free(iclient, ihdl);
+
list_for_each_entry(node, &wb->register_queue, registered_entry)
- if ((node->buf_info.memory_id == data->memory_id) &&
+ if ((node->buf_data.p[0].srcp_ihdl == ihdl) &&
(node->buf_info.offset == data->offset)) {
- pr_debug("found node fd=%x off=%x addr=%x\n",
- data->memory_id, data->offset,
+ pr_debug("found fd=%d hdl=%p off=%x addr=%x\n",
+ data->memory_id, ihdl,
+ data->offset,
node->buf_data.p[0].addr);
return node;
}
@@ -465,8 +482,9 @@
if (node->user_alloc) {
buf = &node->buf_data.p[0];
- pr_debug("free user node mem_id=%d offset=%u addr=0x%x\n",
+ pr_debug("free user mem_id=%d ihdl=%p, offset=%u addr=0x%x\n",
node->buf_info.memory_id,
+ buf->srcp_ihdl,
node->buf_info.offset,
buf->addr);