TTM currently supports allocating pages with GFP_TRANSHUGE_LIGHT, but with
the __GFP_COMP flag cleared. Instead of being normal transparent huge
pages, these are multiorder non-compound pages that have the same order as
THPs. This interferes with drivers that import DMA-BUFs / SGTs backed by
pages from TTM, as they don't have the TTM-specific context to know how the
pages were allocated.

Change the TTM allocator so that it no longer clears the __GFP_COMP flag
when allocating THPs.

Signed-off-by: Alex Goins <ago...@nvidia.com>
---
 drivers/gpu/drm/ttm/ttm_page_alloc.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c 
b/drivers/gpu/drm/ttm/ttm_page_alloc.c
index 5c8883d7f74a..e72789184398 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
@@ -920,7 +920,6 @@ static int ttm_get_pages(struct page **pages, unsigned 
npages, int flags,
                                huge_flags |= GFP_TRANSHUGE_LIGHT | 
__GFP_NORETRY |
                                        __GFP_KSWAPD_RECLAIM;
                                huge_flags &= ~__GFP_MOVABLE;
-                               huge_flags &= ~__GFP_COMP;
                                p = alloc_pages(huge_flags, HPAGE_PMD_ORDER);
                                if (!p)
                                        break;
@@ -1057,13 +1056,13 @@ int ttm_page_alloc_init(struct ttm_mem_global *glob, 
unsigned max_pages)
        ttm_page_pool_init_locked(&_manager->wc_pool_huge,
                                  (GFP_TRANSHUGE_LIGHT | __GFP_NORETRY |
                                   __GFP_KSWAPD_RECLAIM) &
-                                 ~(__GFP_MOVABLE | __GFP_COMP),
+                                 ~(__GFP_MOVABLE),
                                  "wc huge", order);
 
        ttm_page_pool_init_locked(&_manager->uc_pool_huge,
                                  (GFP_TRANSHUGE_LIGHT | __GFP_NORETRY |
                                   __GFP_KSWAPD_RECLAIM) &
-                                 ~(__GFP_MOVABLE | __GFP_COMP)
+                                 ~(__GFP_MOVABLE)
                                  , "uc huge", order);
 
        _manager->options.max_size = max_pages;
-- 
2.25.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to