[PATCH 1/3] drm/ttm: add support for different pool sizes
Alex Deucher
alexdeucher at gmail.com
Fri Jul 14 15:41:10 UTC 2017
On Thu, Jul 13, 2017 at 9:56 AM, Christian König
<deathsimple at vodafone.de> wrote:
> From: Christian König <christian.koenig at amd.com>
>
> Correctly handle different page sizes in the memory accounting.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
I'd split this patch in two, one to remove the no_wait and
interruptible flags and one to add the size parameter.
Alex
> ---
> drivers/gpu/drm/ttm/ttm_memory.c | 12 +++++-------
> drivers/gpu/drm/ttm/ttm_page_alloc.c | 4 ++--
> drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 6 +++---
> include/drm/ttm/ttm_memory.h | 5 ++---
> 4 files changed, 12 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_memory.c b/drivers/gpu/drm/ttm/ttm_memory.c
> index 29855be..e963749 100644
> --- a/drivers/gpu/drm/ttm/ttm_memory.c
> +++ b/drivers/gpu/drm/ttm/ttm_memory.c
> @@ -546,8 +546,7 @@ int ttm_mem_global_alloc(struct ttm_mem_global *glob, uint64_t memory,
> EXPORT_SYMBOL(ttm_mem_global_alloc);
>
> int ttm_mem_global_alloc_page(struct ttm_mem_global *glob,
> - struct page *page,
> - bool no_wait, bool interruptible)
> + struct page *page, uint64_t size)
> {
>
> struct ttm_mem_zone *zone = NULL;
> @@ -564,11 +563,11 @@ int ttm_mem_global_alloc_page(struct ttm_mem_global *glob,
> if (glob->zone_dma32 && page_to_pfn(page) > 0x00100000UL)
> zone = glob->zone_kernel;
> #endif
> - return ttm_mem_global_alloc_zone(glob, zone, PAGE_SIZE, no_wait,
> - interruptible);
> + return ttm_mem_global_alloc_zone(glob, zone, size, false, false);
> }
>
> -void ttm_mem_global_free_page(struct ttm_mem_global *glob, struct page *page)
> +void ttm_mem_global_free_page(struct ttm_mem_global *glob, struct page *page,
> + uint64_t size)
> {
> struct ttm_mem_zone *zone = NULL;
>
> @@ -579,10 +578,9 @@ void ttm_mem_global_free_page(struct ttm_mem_global *glob, struct page *page)
> if (glob->zone_dma32 && page_to_pfn(page) > 0x00100000UL)
> zone = glob->zone_kernel;
> #endif
> - ttm_mem_global_free_zone(glob, zone, PAGE_SIZE);
> + ttm_mem_global_free_zone(glob, zone, size);
> }
>
> -
> size_t ttm_round_pot(size_t size)
> {
> if ((size & (size - 1)) == 0)
> diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> index a37de5d..6add044 100644
> --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> @@ -880,7 +880,7 @@ int ttm_pool_populate(struct ttm_tt *ttm)
> }
>
> ret = ttm_mem_global_alloc_page(mem_glob, ttm->pages[i],
> - false, false);
> + PAGE_SIZE);
> if (unlikely(ret != 0)) {
> ttm_pool_unpopulate(ttm);
> return -ENOMEM;
> @@ -907,7 +907,7 @@ void ttm_pool_unpopulate(struct ttm_tt *ttm)
> for (i = 0; i < ttm->num_pages; ++i) {
> if (ttm->pages[i]) {
> ttm_mem_global_free_page(ttm->glob->mem_glob,
> - ttm->pages[i]);
> + ttm->pages[i], PAGE_SIZE);
> ttm_put_pages(&ttm->pages[i], 1,
> ttm->page_flags,
> ttm->caching_state);
> diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
> index cec4b4b..6c38046 100644
> --- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
> @@ -910,7 +910,7 @@ int ttm_dma_populate(struct ttm_dma_tt *ttm_dma, struct device *dev)
> }
>
> ret = ttm_mem_global_alloc_page(mem_glob, ttm->pages[i],
> - false, false);
> + pool->size);
> if (unlikely(ret != 0)) {
> ttm_dma_unpopulate(ttm_dma, dev);
> return -ENOMEM;
> @@ -975,13 +975,13 @@ void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev)
> if (is_cached) {
> list_for_each_entry_safe(d_page, next, &ttm_dma->pages_list, page_list) {
> ttm_mem_global_free_page(ttm->glob->mem_glob,
> - d_page->p);
> + d_page->p, pool->size);
> ttm_dma_page_put(pool, d_page);
> }
> } else {
> for (i = 0; i < count; i++) {
> ttm_mem_global_free_page(ttm->glob->mem_glob,
> - ttm->pages[i]);
> + ttm->pages[i], pool->size);
> }
> }
>
> diff --git a/include/drm/ttm/ttm_memory.h b/include/drm/ttm/ttm_memory.h
> index c452089..2c1e359 100644
> --- a/include/drm/ttm/ttm_memory.h
> +++ b/include/drm/ttm/ttm_memory.h
> @@ -150,10 +150,9 @@ extern int ttm_mem_global_alloc(struct ttm_mem_global *glob, uint64_t memory,
> extern void ttm_mem_global_free(struct ttm_mem_global *glob,
> uint64_t amount);
> extern int ttm_mem_global_alloc_page(struct ttm_mem_global *glob,
> - struct page *page,
> - bool no_wait, bool interruptible);
> + struct page *page, uint64_t size);
> extern void ttm_mem_global_free_page(struct ttm_mem_global *glob,
> - struct page *page);
> + struct page *page, uint64_t size);
> extern size_t ttm_round_pot(size_t size);
> extern uint64_t ttm_get_kernel_zone_memory_size(struct ttm_mem_global *glob);
> #endif
> --
> 2.7.4
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
More information about the dri-devel
mailing list