Commit 0a8c1fee authored by Yangyu Chen's avatar Yangyu Chen Committed by Christian König
Browse files

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: default avatarYangyu Chen <cyy@cyyself.name>
Link: https://patchwork.freedesktop.org/patch/msgid/tencent_8637383EE0A2C7CC870036AAF01909B26A0A@qq.com


Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
parent 3fc6c76a
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -95,12 +95,18 @@ static int ttm_global_init(void)
	ttm_pool_mgr_init(num_pages);
	ttm_tt_mgr_init(num_pages, num_dma32);

	glob->dummy_read_page = alloc_page(__GFP_ZERO | GFP_DMA32);
	glob->dummy_read_page = alloc_page(__GFP_ZERO | GFP_DMA32 |
					   __GFP_NOWARN);

	/* Retry without GFP_DMA32 for platforms DMA32 is not available */
	if (unlikely(glob->dummy_read_page == NULL)) {
		glob->dummy_read_page = alloc_page(__GFP_ZERO);
		if (unlikely(glob->dummy_read_page == NULL)) {
			ret = -ENOMEM;
			goto out;
		}
		pr_warn("Using GFP_DMA32 fallback for dummy_read_page\n");
	}

	INIT_LIST_HEAD(&glob->device_list);
	atomic_set(&glob->bo_count, 0);