diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c index c5b93dff950a..9fc236320936 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c @@ -588,9 +588,15 @@ static void rockchip_gem_release_object(struct rockchip_gem_object *rk_obj) static struct rockchip_gem_object * rockchip_gem_alloc_object(struct drm_device *drm, unsigned int size) { + struct address_space *mapping; struct rockchip_gem_object *rk_obj; struct drm_gem_object *obj; +#ifdef CONFIG_ARM_LPAE + gfp_t gfp_mask = GFP_HIGHUSER | __GFP_RECLAIMABLE | __GFP_DMA32; +#else + gfp_t gfp_mask = GFP_HIGHUSER | __GFP_RECLAIMABLE; +#endif size = round_up(size, PAGE_SIZE); rk_obj = kzalloc(sizeof(*rk_obj), GFP_KERNEL); @@ -601,6 +607,9 @@ static struct rockchip_gem_object * drm_gem_object_init(drm, obj, size); + mapping = file_inode(obj->filp)->i_mapping; + mapping_set_gfp_mask(mapping, gfp_mask); + return rk_obj; }