From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2] drm/gem: fix mmap vma size calculations Date: Fri, 26 Jul 2013 22:15:27 +0200 Message-ID: <20130726201527.GP6084@phenom.ffwll.local> References: <1374830685-21602-1-git-send-email-dh.herrmann@gmail.com> <1374833372-21926-1-git-send-email-dh.herrmann@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail-ea0-f172.google.com (mail-ea0-f172.google.com [209.85.215.172]) by gabe.freedesktop.org (Postfix) with ESMTP id 94562E62E9 for ; Fri, 26 Jul 2013 13:15:28 -0700 (PDT) Received: by mail-ea0-f172.google.com with SMTP id q10so1786155eaj.3 for ; Fri, 26 Jul 2013 13:15:27 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1374833372-21926-1-git-send-email-dh.herrmann@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: David Herrmann Cc: Sedat Dilek , Daniel Vetter , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org On Fri, Jul 26, 2013 at 12:09:32PM +0200, David Herrmann wrote: > The VMA manager is page-size based so drm_vma_node_size() returns the size > in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply > PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small > buffers. > > This bug was introduced in commit: > 0de23977cfeb5b357ec884ba15417ae118ff9e9b > "drm/gem: convert to new unified vma manager" > > Fixes i915 gtt mmap failure reported by Sedat Dilek in: > Re: linux-next: Tree for Jul 25 [ call-trace: drm | drm-intel related? ] > > Cc: Daniel Vetter > Cc: Chris Wilson > Signed-off-by: David Herrmann > Reported-by: Sedat Dilek > Tested-by: Sedat Dilek I remember that I even checked whether v4 was consistent with pages vs. bytes ;-) So Reviewed-by: Daniel Vetter on this little fixup. -Daniel > --- > drivers/gpu/drm/drm_gem.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c > index 3613b50..1f76572 100644 > --- a/drivers/gpu/drm/drm_gem.c > +++ b/drivers/gpu/drm/drm_gem.c > @@ -666,7 +666,7 @@ int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma) > } > > obj = container_of(node, struct drm_gem_object, vma_node); > - ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node), vma); > + ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node) << PAGE_SHIFT, vma); > > mutex_unlock(&dev->struct_mutex); > > -- > 1.8.3.4 > -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch