From f42f76d31b736ac08e79b9989fa23af4d189759c Mon Sep 17 00:00:00 2001 From: Lucas Stach Date: Tue, 7 Jun 2022 09:43:27 -0700 Subject: [PATCH] drm/msm: don't allocate pages from the MOVABLE zone The pages backing the GEM objects are kept pinned in place as long as they are alive, so they must not be allocated from the MOVABLE zone. Blocking page migration for too long will cause the VM subsystem headaches and will outright break CMA, as a few pinned pages in CMA will lead to failure to find the required large contiguous regions. Change-Id: I5eba32fc8a2730eac29668dbd96aaf8f04ac155f Signed-off-by: Lucas Stach Signed-off-by: Rob Clark Signed-off-by: Rob Clark Git-commit: 0abdba47dc1df708c365421d481734d3f7fecb01 Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git Signed-off-by: Patrick Daly Signed-off-by: Narendra Muppalla --- msm/msm_gem.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/msm/msm_gem.c b/msm/msm_gem.c index 99e2ca2ccd..43929fd8f0 100644 --- a/msm/msm_gem.c +++ b/msm/msm_gem.c @@ -1092,6 +1092,14 @@ static struct drm_gem_object *_msm_gem_new(struct drm_device *dev, ret = drm_gem_object_init(dev, obj, size); if (ret) goto fail; + + /* + * Our buffers are kept pinned, so allocating them from the + * MOVABLE zone is a really bad idea, and conflicts with CMA. + * See comments above new_inode() why this is required _and_ + * expected if you're going to pin these pages. + */ + mapping_set_gfp_mask(obj->filp->f_mapping, GFP_HIGHUSER); } #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0))