diff options
author | Krishna Reddy <vdumpa@nvidia.com> | 2011-12-28 15:20:58 -0800 |
---|---|---|
committer | Varun Wadekar <vwadekar@nvidia.com> | 2011-12-28 22:15:48 -0800 |
commit | a23faeea394e35796333d3e9596cabed354aeed3 (patch) | |
tree | 9c6266e62b949172c918eed7a2fcb30dba997b33 /drivers | |
parent | a8717590e3d7fb0e1de6f482c2b6577a8f48d068 (diff) |
video: tegra: host: Use nvmap handle conversion macro.
Use nvmap user space to kernel handle conversion macro.
Change-Id: I65ce6cee77e46ab2d3a7ac49a1b210fae7a85810
Signed-off-by: Krishna Reddy <vdumpa@nvidia.com>
Reviewed-on: http://git-master/r/71029
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Scott Williams <scwilliams@nvidia.com>
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Reviewed-by: Varun Wadekar <vwadekar@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/video/tegra/host/dev.c | 29 | ||||
-rw-r--r-- | drivers/video/tegra/host/nvhost_job.c | 2 |
2 files changed, 17 insertions, 14 deletions
diff --git a/drivers/video/tegra/host/dev.c b/drivers/video/tegra/host/dev.c index fe5fb22add92..b0a4c20ba32b 100644 --- a/drivers/video/tegra/host/dev.c +++ b/drivers/video/tegra/host/dev.c @@ -252,35 +252,38 @@ static ssize_t nvhost_channelwrite(struct file *filp, const char __user *buf, cmdbuf.mem, cmdbuf.words, cmdbuf.offset); hdr->num_cmdbufs--; } else if (hdr->num_relocs) { + struct nvmap_pinarray_elem *elem = + &job->pinarray[job->num_pins]; consumed = sizeof(struct nvhost_reloc); if (remaining < consumed) break; - if (copy_from_user(&job->pinarray[job->num_pins], - buf, consumed)) { + if (copy_from_user(elem, buf, consumed)) { err = -EFAULT; break; } + elem->patch_mem = + nvmap_convert_handle_u2k(elem->patch_mem); + elem->pin_mem = + nvmap_convert_handle_u2k(elem->pin_mem); trace_nvhost_channel_write_reloc(chname); job->num_pins++; hdr->num_relocs--; } else if (hdr->num_waitchks) { - int numwaitchks = - (remaining / sizeof(struct nvhost_waitchk)); - if (!numwaitchks) + struct nvhost_waitchk *waitchk = + &job->waitchk[job->num_waitchk]; + consumed = sizeof(struct nvhost_waitchk); + if (remaining < consumed) break; - numwaitchks = min_t(int, - numwaitchks, hdr->num_waitchks); - consumed = numwaitchks * sizeof(struct nvhost_waitchk); - if (copy_from_user(&job->waitchk[job->num_waitchk], - buf, consumed)) { + if (copy_from_user(waitchk, buf, consumed)) { err = -EFAULT; break; } + waitchk->mem = nvmap_convert_handle_u2k(waitchk->mem); trace_nvhost_channel_write_waitchks( - chname, numwaitchks, + chname, 1, hdr->waitchk_mask); - job->num_waitchk += numwaitchks; - hdr->num_waitchks -= numwaitchks; + job->num_waitchk++; + hdr->num_waitchks--; } else if (priv->num_relocshifts) { int next_shift = job->num_pins - priv->num_relocshifts; diff --git a/drivers/video/tegra/host/nvhost_job.c b/drivers/video/tegra/host/nvhost_job.c index d0c5d731f615..c7e700fce264 100644 --- a/drivers/video/tegra/host/nvhost_job.c +++ b/drivers/video/tegra/host/nvhost_job.c @@ -268,7 +268,7 @@ void nvhost_job_add_gather(struct nvhost_job *job, pin = &job->pinarray[job->num_pins++]; pin->patch_mem = (u32)nvmap_ref_to_handle(job->gather_mem); pin->patch_offset = (void *)&(cur_gather->mem) - (void *)job->gathers; - pin->pin_mem = mem_id; + pin->pin_mem = nvmap_convert_handle_u2k(mem_id); pin->pin_offset = offset; cur_gather->words = words; cur_gather->mem_id = mem_id; |