Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932203AbdDRGwq (ORCPT ); Tue, 18 Apr 2017 02:52:46 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:35742 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932176AbdDRGwk (ORCPT ); Tue, 18 Apr 2017 02:52:40 -0400 Date: Tue, 18 Apr 2017 08:52:34 +0200 From: Daniel Vetter To: Eric Anholt Cc: dri-devel@lists.freedesktop.org, Yannick Fertre , linux-kernel@vger.kernel.org Subject: Re: [PATCH] drm/cma: Fix recent regression of mmap() in the MMU case. Message-ID: <20170418065234.6y543izrwwus4rq3@phenom.ffwll.local> Mail-Followup-To: Eric Anholt , dri-devel@lists.freedesktop.org, Yannick Fertre , linux-kernel@vger.kernel.org References: <20170417233124.18420-1-eric@anholt.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170417233124.18420-1-eric@anholt.net> X-Operating-System: Linux phenom 4.9.0-2-amd64 User-Agent: NeoMutt/20170306 (1.8.0) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2508 Lines: 77 On Mon, Apr 17, 2017 at 04:31:24PM -0700, Eric Anholt wrote: > The stub get_unmapped_area() function was actually getting called, so > all of our mmap()s failed. > > Cc: Yannick Fertre > Fixes: 97bf3a9aa60f ("drm/cma: Update DEFINE_DRM_GEM_CMA_FOPS to add get_unmapped_area") > Signed-off-by: Eric Anholt Oh drat, I assumed the core would only call this when needed, but things don't work like that. Reviewed-by: Daniel Vetter The strange thing is that in some cases ->mm->get_unmapped_area overwrites fops->get_unmapped_area, but not for do_mmap in the mmu case. Seems not entirely thought out to me ... -Daniel > --- > include/drm/drm_gem_cma_helper.h | 18 ++++++++---------- > 1 file changed, 8 insertions(+), 10 deletions(-) > > diff --git a/include/drm/drm_gem_cma_helper.h b/include/drm/drm_gem_cma_helper.h > index 7320b140545a..b42529e0fae0 100644 > --- a/include/drm/drm_gem_cma_helper.h > +++ b/include/drm/drm_gem_cma_helper.h > @@ -26,6 +26,13 @@ to_drm_gem_cma_obj(struct drm_gem_object *gem_obj) > return container_of(gem_obj, struct drm_gem_cma_object, base); > } > > +#ifndef CONFIG_MMU > +#define DRM_GEM_CMA_UNMAPPED_AREA_FOPS \ > + .get_unmapped_area = drm_gem_cma_get_unmapped_area, > +#else > +#define DRM_GEM_CMA_UNMAPPED_AREA_FOPS > +#endif > + > /** > * DEFINE_DRM_GEM_CMA_FOPS() - macro to generate file operations for CMA drivers > * @name: name for the generated structure > @@ -50,7 +57,7 @@ to_drm_gem_cma_obj(struct drm_gem_object *gem_obj) > .read = drm_read,\ > .llseek = noop_llseek,\ > .mmap = drm_gem_cma_mmap,\ > - .get_unmapped_area = drm_gem_cma_get_unmapped_area,\ > + DRM_GEM_CMA_UNMAPPED_AREA_FOPS \ > } > > /* free GEM object */ > @@ -86,15 +93,6 @@ unsigned long drm_gem_cma_get_unmapped_area(struct file *filp, > unsigned long len, > unsigned long pgoff, > unsigned long flags); > -#else > -static inline unsigned long drm_gem_cma_get_unmapped_area(struct file *filp, > - unsigned long addr, > - unsigned long len, > - unsigned long pgoff, > - unsigned long flags) > -{ > - return -EINVAL; > -} > #endif > > #ifdef CONFIG_DEBUG_FS > -- > 2.11.0 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch