diff options
author | vdumpa <vdumpa@nvidia.com> | 2011-01-31 16:54:49 -0800 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:44:54 -0800 |
commit | d84d45e375acecae9eedb2a57a30e7af797ff161 (patch) | |
tree | 1cf0dd2c9bf492f86e419a28b7f4d74a4f4acec6 /drivers/video/tegra/nvmap | |
parent | 3871ba6c5b33545cbea4c456e1d796dce4d97f42 (diff) |
video:tegra:nvmap: Allow mapping uc/wc memory as wb.
Bug 786016
Original-Change-Id: Ic72c57b710a305851dfea3dda3eb217156683b39
Reviewed-on: http://git-master/r/17795
Reviewed-by: Varun Colbert <vcolbert@nvidia.com>
Tested-by: Varun Colbert <vcolbert@nvidia.com>
Rebase-Id: R9839c206d5606463e124c59f733282561ff8a48d
Diffstat (limited to 'drivers/video/tegra/nvmap')
-rw-r--r-- | drivers/video/tegra/nvmap/nvmap_ioctl.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/video/tegra/nvmap/nvmap_ioctl.c b/drivers/video/tegra/nvmap/nvmap_ioctl.c index 91d0a148202b..b63ddd1893c4 100644 --- a/drivers/video/tegra/nvmap/nvmap_ioctl.c +++ b/drivers/video/tegra/nvmap/nvmap_ioctl.c @@ -282,6 +282,18 @@ int nvmap_map_into_caller_ptr(struct file *filp, void __user *arg) vpriv->handle = h; vpriv->offs = op.offset; + if (op.flags == NVMAP_HANDLE_INNER_CACHEABLE) { + if (h->orig_size & ~PAGE_MASK) { + pr_err("\n%s:attempt to convert a buffer from uc/wc to" + " wb, whose size is not a multiple of page size." + " request ignored.\n", __func__); + } else { + wmb(); + /* override allocation time cache coherency attributes. */ + h->flags &= (~NVMAP_HANDLE_CACHEABLE); + h->flags |= NVMAP_HANDLE_INNER_CACHEABLE; + } + } vma->vm_page_prot = nvmap_pgprot(h, vma->vm_page_prot); out: |