diff options
author | Christian König <christian.koenig@amd.com> | 2017-03-13 05:13:39 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-03-29 23:54:01 -0400 |
commit | 80f95c579d800fa22e9e57ecb3d50b9e93bc1f82 (patch) | |
tree | 833a2a919c669f013318bf84397230f9553afe83 /drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | |
parent | dc54d3d1744d23ed0b345fd8bc1c493b74e8df44 (diff) |
drm/amdgpu: add a VM mapping replace operation v2
Add a new operation to replace mappings in a VM with a new one.
v2: Fix Jerry's comment, separate out clear operation.
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index b311b389bd5a..c71c087727b8 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | |||
@@ -544,7 +544,8 @@ static void amdgpu_gem_va_update_vm(struct amdgpu_device *adev, | |||
544 | if (r) | 544 | if (r) |
545 | goto error; | 545 | goto error; |
546 | 546 | ||
547 | if (operation == AMDGPU_VA_OP_MAP) | 547 | if (operation == AMDGPU_VA_OP_MAP || |
548 | operation == AMDGPU_VA_OP_REPLACE) | ||
548 | r = amdgpu_vm_bo_update(adev, bo_va, false); | 549 | r = amdgpu_vm_bo_update(adev, bo_va, false); |
549 | 550 | ||
550 | error: | 551 | error: |
@@ -595,6 +596,7 @@ int amdgpu_gem_va_ioctl(struct drm_device *dev, void *data, | |||
595 | case AMDGPU_VA_OP_MAP: | 596 | case AMDGPU_VA_OP_MAP: |
596 | case AMDGPU_VA_OP_UNMAP: | 597 | case AMDGPU_VA_OP_UNMAP: |
597 | case AMDGPU_VA_OP_CLEAR: | 598 | case AMDGPU_VA_OP_CLEAR: |
599 | case AMDGPU_VA_OP_REPLACE: | ||
598 | break; | 600 | break; |
599 | default: | 601 | default: |
600 | dev_err(&dev->pdev->dev, "unsupported operation %d\n", | 602 | dev_err(&dev->pdev->dev, "unsupported operation %d\n", |
@@ -656,6 +658,17 @@ int amdgpu_gem_va_ioctl(struct drm_device *dev, void *data, | |||
656 | args->va_address, | 658 | args->va_address, |
657 | args->map_size); | 659 | args->map_size); |
658 | break; | 660 | break; |
661 | case AMDGPU_VA_OP_REPLACE: | ||
662 | r = amdgpu_vm_alloc_pts(adev, bo_va->vm, args->va_address, | ||
663 | args->map_size); | ||
664 | if (r) | ||
665 | goto error_backoff; | ||
666 | |||
667 | va_flags = amdgpu_vm_get_pte_flags(adev, args->flags); | ||
668 | r = amdgpu_vm_bo_replace_map(adev, bo_va, args->va_address, | ||
669 | args->offset_in_bo, args->map_size, | ||
670 | va_flags); | ||
671 | break; | ||
659 | default: | 672 | default: |
660 | break; | 673 | break; |
661 | } | 674 | } |