[PATCH 6/6] drm/amdgpu: add VM support for huge pages v2
Deucher, Alexander
Alexander.Deucher at amd.com
Thu Oct 5 19:19:29 UTC 2017
> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf
> Of Christian König
> Sent: Thursday, October 05, 2017 9:08 AM
> To: amd-gfx at lists.freedesktop.org; dri-devel at lists.freedesktop.org
> Subject: [PATCH 6/6] drm/amdgpu: add VM support for huge pages v2
>
> From: Christian König <christian.koenig at amd.com>
>
> Convert GTT mappings into linear ones for huge page handling.
>
> v2: use fragment size as minimum for linear conversion
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> Reviewed-by: Felix Kuehling <Felix.Kuehling at amd.com>
Series is:
Acked-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 25
> ++++++++++++++++++++++---
> 1 file changed, 22 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index bca9eeb..faedecc 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -1698,6 +1698,7 @@ static int amdgpu_vm_bo_split_mapping(struct
> amdgpu_device *adev,
> struct drm_mm_node *nodes,
> struct dma_fence **fence)
> {
> + unsigned min_linear_pages = 1 << adev-
> >vm_manager.fragment_size;
> uint64_t pfn, start = mapping->start;
> int r;
>
> @@ -1732,6 +1733,7 @@ static int amdgpu_vm_bo_split_mapping(struct
> amdgpu_device *adev,
> }
>
> do {
> + dma_addr_t *dma_addr = NULL;
> uint64_t max_entries;
> uint64_t addr, last;
>
> @@ -1745,15 +1747,32 @@ static int amdgpu_vm_bo_split_mapping(struct
> amdgpu_device *adev,
> }
>
> if (pages_addr) {
> + uint64_t count;
> +
> max_entries = min(max_entries, 16ull * 1024ull);
> - addr = 0;
> + for (count = 1; count < max_entries; ++count) {
> + uint64_t idx = pfn + count;
> +
> + if (pages_addr[idx] !=
> + (pages_addr[idx - 1] + PAGE_SIZE))
> + break;
> + }
> +
> + if (count < min_linear_pages) {
> + addr = pfn << PAGE_SHIFT;
> + dma_addr = pages_addr;
> + } else {
> + addr = pages_addr[pfn];
> + max_entries = count;
> + }
> +
> } else if (flags & AMDGPU_PTE_VALID) {
> addr += adev->vm_manager.vram_base_offset;
> + addr += pfn << PAGE_SHIFT;
> }
> - addr += pfn << PAGE_SHIFT;
>
> last = min((uint64_t)mapping->last, start + max_entries - 1);
> - r = amdgpu_vm_bo_update_mapping(adev, exclusive,
> pages_addr, vm,
> + r = amdgpu_vm_bo_update_mapping(adev, exclusive,
> dma_addr, vm,
> start, last, flags, addr,
> fence);
> if (r)
> --
> 2.7.4
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list