From patchwork Sun May 25 12:34:11 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Herrmann X-Patchwork-Id: 4238391 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id D5A7BBF90B for ; Sun, 25 May 2014 12:34:29 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 15ACD20265 for ; Sun, 25 May 2014 12:34:29 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 060682025A for ; Sun, 25 May 2014 12:34:28 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2ED9A6E4D5; Sun, 25 May 2014 05:34:27 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wg0-f42.google.com (mail-wg0-f42.google.com [74.125.82.42]) by gabe.freedesktop.org (Postfix) with ESMTP id AA7B16E4B3 for ; Sun, 25 May 2014 05:34:22 -0700 (PDT) Received: by mail-wg0-f42.google.com with SMTP id y10so6628895wgg.1 for ; Sun, 25 May 2014 05:34:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=19tZjEPjtM0S/dOmu9cng5lnRRtkKdehF50GgPbIfCc=; b=a4rT5njLqRlboGk7imJ+C2ZvzQVCZ2gUj4Dv4KRj7YB9yAvzfmxgdYVO2IqttgXC72 QPbvQ2JYACIsOYIj85KRl+XCMynW16vxRwVrisHh4mHG5zk3xN/ejaalNidSSVYwquOu r4YBBkSjjCCWT17bwQxfN7FHPsYXiHjIISgOJmMzC5EpzCT0/ghHiB6MG0mjJeExSkOx ipAU6xyBYzG5NEazibV8nNHgAJf1mM8LrOVO+BnkTxxswtVWhtIjbLbfQRXiimhbau9K W2Va3NJNYf9vPakUf4vDdE4RvinqnWeo7Z7uf+3oAHnAI70RmLrIMvLNt1IypucWhnKG s39w== X-Received: by 10.194.90.39 with SMTP id bt7mr3061129wjb.93.1401021261773; Sun, 25 May 2014 05:34:21 -0700 (PDT) Received: from david-tp.localdomain (stgt-5f728b13.pool.mediaWays.net. [95.114.139.19]) by mx.google.com with ESMTPSA id w6sm18246933wjq.29.2014.05.25.05.34.20 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 25 May 2014 05:34:20 -0700 (PDT) From: David Herrmann To: dri-devel@lists.freedesktop.org Subject: [PATCH 4/5] drm/omap: use __GFP_DMA32 for shmem-backed gem Date: Sun, 25 May 2014 14:34:11 +0200 Message-Id: <1401021252-29006-4-git-send-email-dh.herrmann@gmail.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1401021252-29006-1-git-send-email-dh.herrmann@gmail.com> References: <1401021252-29006-1-git-send-email-dh.herrmann@gmail.com> Cc: Daniel Vetter , Tomi Valkeinen X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.7 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP OMAP requires bo-pages to be in the DMA32 zone. Explicitly request this by setting __GFP_DMA32 as mapping-gfp-mask during shmem initialization. This drops HIGHMEM from the gfp-mask and uses DMA32 instead. shmem-core takes care to relocate pages during swap-in in case they have been loaded into the wrong zone. It is _not_ possible to pass __GFP_DMA32 to shmem_read_mapping_page_gfp() as the page might have already been swapped-in at that time. The zone-mask must be set during initialization and be kept constant for now. Remove the now superfluous TODO in omap_gem.c. Cc: Tomi Valkeinen Cc: Rob Clark Signed-off-by: David Herrmann Reviewed-by: Rob Clark --- drivers/gpu/drm/omapdrm/omap_gem.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c index 95dbce2..1331fd5 100644 --- a/drivers/gpu/drm/omapdrm/omap_gem.c +++ b/drivers/gpu/drm/omapdrm/omap_gem.c @@ -233,10 +233,6 @@ static int omap_gem_attach_pages(struct drm_gem_object *obj) WARN_ON(omap_obj->pages); - /* TODO: __GFP_DMA32 .. but somehow GFP_HIGHMEM is coming from the - * mapping_gfp_mask(mapping) which conflicts w/ GFP_DMA32.. probably - * we actually want CMA memory for it all anyways.. - */ pages = drm_gem_get_pages(obj, GFP_KERNEL); if (IS_ERR(pages)) { dev_err(obj->dev->dev, "could not get pages: %ld\n", PTR_ERR(pages)); @@ -1347,6 +1343,7 @@ struct drm_gem_object *omap_gem_new(struct drm_device *dev, struct omap_drm_private *priv = dev->dev_private; struct omap_gem_object *omap_obj; struct drm_gem_object *obj = NULL; + struct address_space *mapping; size_t size; int ret; @@ -1404,14 +1401,16 @@ struct drm_gem_object *omap_gem_new(struct drm_device *dev, omap_obj->height = gsize.tiled.height; } - ret = 0; - if (flags & (OMAP_BO_DMA|OMAP_BO_EXT_MEM)) + if (flags & (OMAP_BO_DMA|OMAP_BO_EXT_MEM)) { drm_gem_private_object_init(dev, obj, size); - else + } else { ret = drm_gem_object_init(dev, obj, size); + if (ret) + goto fail; - if (ret) - goto fail; + mapping = file_inode(obj->filp)->i_mapping; + mapping_set_gfp_mask(mapping, GFP_USER | __GFP_DMA32); + } return obj;