drm/ttm: Fix TTM BO accounting
TTM BO accounting is out of sync with how memory is really allocated in ttm[_dma]_tt_alloc_page_directory. This resulted in excessive estimated overhead with many small allocations. ttm_dma_tt_alloc_page_directory makes a single allocation for three arrays: pages, DMA and CPU addresses. It uses drm_calloc_large, which uses kmalloc internally for allocations smaller than PAGE_SIZE. ttm_round_pot should be a good approximation of its memory usage both above and below PAGE_SIZE. Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com> Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> Reviewed-by: Monk Liu <monk.liu@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
110e6f26af
commit
85621630f1
|
@ -1215,7 +1215,7 @@ size_t ttm_bo_acc_size(struct ttm_bo_device *bdev,
|
|||
size_t size = 0;
|
||||
|
||||
size += ttm_round_pot(struct_size);
|
||||
size += PAGE_ALIGN(npages * sizeof(void *));
|
||||
size += ttm_round_pot(npages * sizeof(void *));
|
||||
size += ttm_round_pot(sizeof(struct ttm_tt));
|
||||
return size;
|
||||
}
|
||||
|
@ -1229,8 +1229,7 @@ size_t ttm_bo_dma_acc_size(struct ttm_bo_device *bdev,
|
|||
size_t size = 0;
|
||||
|
||||
size += ttm_round_pot(struct_size);
|
||||
size += PAGE_ALIGN(npages * sizeof(void *));
|
||||
size += PAGE_ALIGN(npages * sizeof(dma_addr_t));
|
||||
size += ttm_round_pot(npages * (2*sizeof(void *) + sizeof(dma_addr_t)));
|
||||
size += ttm_round_pot(sizeof(struct ttm_dma_tt));
|
||||
return size;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue