Skip to content

Commit 0a8c1fe

Browse files
cyyselfChristianKoenigAMD
authored andcommitted
drm/ttm: allocate dummy_read_page without DMA32 on fail
Some platforms may not have any memory in ZONE_DMA32 and use IOMMU to allow 32-bit-DMA-only device to work. Forcing GFP_DMA32 on dummy_read_page will fail on such platforms. Retry after fail will get this works on such platforms. Signed-off-by: Yangyu Chen <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] Signed-off-by: Christian König <[email protected]>
1 parent 3fc6c76 commit 0a8c1fe

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

drivers/gpu/drm/ttm/ttm_device.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,17 @@ static int ttm_global_init(void)
9595
ttm_pool_mgr_init(num_pages);
9696
ttm_tt_mgr_init(num_pages, num_dma32);
9797

98-
glob->dummy_read_page = alloc_page(__GFP_ZERO | GFP_DMA32);
98+
glob->dummy_read_page = alloc_page(__GFP_ZERO | GFP_DMA32 |
99+
__GFP_NOWARN);
99100

101+
/* Retry without GFP_DMA32 for platforms DMA32 is not available */
100102
if (unlikely(glob->dummy_read_page == NULL)) {
101-
ret = -ENOMEM;
102-
goto out;
103+
glob->dummy_read_page = alloc_page(__GFP_ZERO);
104+
if (unlikely(glob->dummy_read_page == NULL)) {
105+
ret = -ENOMEM;
106+
goto out;
107+
}
108+
pr_warn("Using GFP_DMA32 fallback for dummy_read_page\n");
103109
}
104110

105111
INIT_LIST_HEAD(&glob->device_list);

0 commit comments

Comments
 (0)