Reviewed-by: Christian König <christian.koenig at amd.com> for this one as well as the two patches for radeon and amdgpu. Feel free to also add my Acked-by to the nouveau patch. Regards, Christian. Am 22.08.2017 um 13:13 schrieb Tom St Denis: > ping? Haven't seen any comments on amd-gfx or dri-devel. > > Cheers, > Tom > > > On 18/08/17 10:07 AM, Tom St Denis wrote: >> These functions replace a section of common code found >> in radeon/amdgpu drivers (and possibly others) as part >> of the ttm_tt_*populate() callbacks. >> >> Signed-off-by: Tom St Denis <tom.stdenis at amd.com> >> --- >> drivers/gpu/drm/ttm/ttm_page_alloc.c | 41 >> ++++++++++++++++++++++++++++++++++++ >> include/drm/ttm/ttm_page_alloc.h | 11 ++++++++++ >> 2 files changed, 52 insertions(+) >> >> diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c >> b/drivers/gpu/drm/ttm/ttm_page_alloc.c >> index 871599826773..6a660d196d87 100644 >> --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c >> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c >> @@ -920,6 +920,47 @@ void ttm_pool_unpopulate(struct ttm_tt *ttm) >> } >> EXPORT_SYMBOL(ttm_pool_unpopulate); >> +int ttm_populate_and_map_pages(struct device *dev, struct >> ttm_dma_tt *tt) >> +{ >> + unsigned i; >> + int r; >> + >> + r = ttm_pool_populate(&tt->ttm); >> + if (r) >> + return r; >> + >> + for (i = 0; i < tt->ttm.num_pages; i++) { >> + tt->dma_address[i] = dma_map_page(dev, tt->ttm.pages[i], >> + 0, PAGE_SIZE, >> + DMA_BIDIRECTIONAL); >> + if (dma_mapping_error(dev, tt->dma_address[i])) { >> + while (i--) { >> + dma_unmap_page(dev, tt->dma_address[i], >> + PAGE_SIZE, DMA_BIDIRECTIONAL); >> + tt->dma_address[i] = 0; >> + } >> + ttm_pool_unpopulate(&tt->ttm); >> + return -EFAULT; >> + } >> + } >> + return 0; >> +} >> +EXPORT_SYMBOL(ttm_populate_and_map_pages); >> + >> +void ttm_unmap_and_unpopulate_pages(struct device *dev, struct >> ttm_dma_tt *tt) >> +{ >> + unsigned i; >> + >> + for (i = 0; i < tt->ttm.num_pages; i++) { >> + if (tt->dma_address[i]) { >> + dma_unmap_page(dev, tt->dma_address[i], >> + PAGE_SIZE, DMA_BIDIRECTIONAL); >> + } >> + } >> + ttm_pool_unpopulate(&tt->ttm); >> +} >> +EXPORT_SYMBOL(ttm_unmap_and_unpopulate_pages); >> + >> int ttm_page_alloc_debugfs(struct seq_file *m, void *data) >> { >> struct ttm_page_pool *p; >> diff --git a/include/drm/ttm/ttm_page_alloc.h >> b/include/drm/ttm/ttm_page_alloc.h >> index 49a828425fa2..8695918ea629 100644 >> --- a/include/drm/ttm/ttm_page_alloc.h >> +++ b/include/drm/ttm/ttm_page_alloc.h >> @@ -83,6 +83,17 @@ extern int ttm_dma_page_alloc_debugfs(struct >> seq_file *m, void *data); >> extern int ttm_dma_populate(struct ttm_dma_tt *ttm_dma, struct >> device *dev); >> extern void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct >> device *dev); >> + >> +/** >> + * Populates and DMA maps pages to fullfil a ttm_dma_populate() request >> + */ >> +int ttm_populate_and_map_pages(struct device *dev, struct ttm_dma_tt >> *tt); >> + >> +/** >> + * Unpopulates and DMA unmaps pages as part of a >> + * ttm_dma_unpopulate() request */ >> +void ttm_unmap_and_unpopulate_pages(struct device *dev, struct >> ttm_dma_tt *tt); >> + >> #else >> static inline int ttm_dma_page_alloc_init(struct ttm_mem_global *glob, >> unsigned max_pages) >> > > _______________________________________________ > amd-gfx mailing list > amd-gfx at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx