mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 02:22:34 +03:00
gpu: nvgpu: avoid using priv data for non-compressed buffer
Instead of allocating priv data for all external buffers, allocate only on a demand basis for when compression is requested either in CDE or via libnvrm_gpu. This will allow allocators like nvidia-drm to use non-compressed buffers without needing to avoid the core drm checks. e.g. drm_gem_prime_import_dev that checks for if (dma_buf->ops == &drm_gem_prime_dmabuf_ops)" This patch also gets rid of optimization of dma_buf's attach/detach calls. Now, nvgpu instead needs to call attach/detach for everytime the dmabuf fd is imported. Change-Id: Idefd269b32974106e85ff09e17ebc752b92f830c Signed-off-by: Debarshi Dutta <ddutta@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2372213 Tested-by: Yogish Kulkarni <yogishk@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com> Reviewed-by: automaticguardword <automaticguardword@nvidia.com> Reviewed-by: Sagar Kamble <skamble@nvidia.com> Reviewed-by: Alex Waterman <alexw@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
Alex Waterman
parent
58ce9156a8
commit
08ec6e874d
@@ -175,7 +175,7 @@ struct nvgpu_mapped_buf *nvgpu_vm_find_mapping(struct vm_gk20a *vm,
|
||||
* the dmabuf doesn't support drvdata, prior SGT is unpinned as the
|
||||
* new SGT was pinned at the beginning of the current map call.
|
||||
*/
|
||||
nvgpu_mm_unpin_privdata(os_buf->dev, os_buf->dmabuf,
|
||||
nvgpu_mm_unpin(os_buf->dev, os_buf->dmabuf,
|
||||
mapped_buffer->os_priv.attachment,
|
||||
mapped_buffer->os_priv.sgt);
|
||||
dma_buf_put(os_buf->dmabuf);
|
||||
@@ -205,7 +205,7 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm,
|
||||
struct dma_buf_attachment *attachment;
|
||||
int err = 0;
|
||||
|
||||
sgt = nvgpu_mm_pin_privdata(dev, dmabuf, &attachment);
|
||||
sgt = nvgpu_mm_pin(dev, dmabuf, &attachment);
|
||||
if (IS_ERR(sgt)) {
|
||||
nvgpu_warn(g, "Failed to pin dma_buf!");
|
||||
return PTR_ERR(sgt);
|
||||
@@ -257,7 +257,7 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm,
|
||||
return 0;
|
||||
|
||||
clean_up:
|
||||
nvgpu_mm_unpin_privdata(dev, dmabuf, attachment, sgt);
|
||||
nvgpu_mm_unpin(dev, dmabuf, attachment, sgt);
|
||||
|
||||
return err;
|
||||
}
|
||||
@@ -324,12 +324,6 @@ int nvgpu_vm_map_buffer(struct vm_gk20a *vm,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
err = gk20a_dmabuf_alloc_drvdata(dmabuf, dev_from_vm(vm));
|
||||
if (err) {
|
||||
dma_buf_put(dmabuf);
|
||||
return err;
|
||||
}
|
||||
|
||||
err = nvgpu_vm_map_linux(vm, dmabuf, *map_addr,
|
||||
nvgpu_vm_translate_linux_flags(g, flags),
|
||||
page_size,
|
||||
@@ -358,9 +352,9 @@ void nvgpu_vm_unmap_system(struct nvgpu_mapped_buf *mapped_buffer)
|
||||
{
|
||||
struct vm_gk20a *vm = mapped_buffer->vm;
|
||||
|
||||
nvgpu_mm_unpin_privdata(dev_from_vm(vm), mapped_buffer->os_priv.dmabuf,
|
||||
mapped_buffer->os_priv.attachment,
|
||||
mapped_buffer->os_priv.sgt);
|
||||
nvgpu_mm_unpin(dev_from_vm(vm), mapped_buffer->os_priv.dmabuf,
|
||||
mapped_buffer->os_priv.attachment,
|
||||
mapped_buffer->os_priv.sgt);
|
||||
|
||||
dma_buf_put(mapped_buffer->os_priv.dmabuf);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user