From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH 1/3] drm: Export routines for inserting preallocated nodes into the mm manager Date: Wed, 12 Dec 2012 12:02:32 +0200 Message-ID: <87y5h3a8qv.fsf@intel.com> References: <1354912628-7776-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1354912628-7776-1-git-send-email-chris@chris-wilson.co.uk> 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: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: Dave Airlie , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org On Fri, 07 Dec 2012, Chris Wilson wrote: > Required by i915 in order to avoid the allocation in the middle of > manipulating the drm_mm lists. > > Use a pair of stubs to preserve the existing EXPORT_SYMBOLs for > backporting; to be removed later. Regardless of whether you choose to do anything about the two nitpicks below or not, Reviewed-by: Jani Nikula > > Cc: Dave Airlie > Cc: dri-devel@lists.freedesktop.org > Signed-off-by: Chris Wilson > --- > drivers/gpu/drm/drm_mm.c | 42 ++++++++++++++++++++++++++++++------------ > include/drm/drm_mm.h | 27 +++++++++++++++++++++++---- > 2 files changed, 53 insertions(+), 16 deletions(-) > > diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c > index 0761a03..d93dc05 100644 > --- a/drivers/gpu/drm/drm_mm.c > +++ b/drivers/gpu/drm/drm_mm.c > @@ -184,19 +184,27 @@ EXPORT_SYMBOL(drm_mm_get_block_generic); > * -ENOSPC if no suitable free area is available. The preallocated memory node > * must be cleared. > */ > -int drm_mm_insert_node(struct drm_mm *mm, struct drm_mm_node *node, > - unsigned long size, unsigned alignment) > +int drm_mm_insert_node_generic(struct drm_mm *mm, struct drm_mm_node *node, > + unsigned long size, unsigned alignment, > + unsigned long color, int atomic) > { > struct drm_mm_node *hole_node; > > - hole_node = drm_mm_search_free(mm, size, alignment, false); > + hole_node = drm_mm_search_free_generic(mm, size, alignment, > + color, atomic); The last param for drm_mm_search_free_generic is a bool, any reason not to make atomic a bool too? > if (!hole_node) > return -ENOSPC; > > - drm_mm_insert_helper(hole_node, node, size, alignment, 0); > - > + drm_mm_insert_helper(hole_node, node, size, alignment, color); > return 0; > } > +EXPORT_SYMBOL(drm_mm_insert_node_generic); > + > +int drm_mm_insert_node(struct drm_mm *mm, struct drm_mm_node *node, > + unsigned long size, unsigned alignment) > +{ > + return drm_mm_insert_node_generic(mm, node, size, alignment, 0, false); > +} > EXPORT_SYMBOL(drm_mm_insert_node); > > static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node, > @@ -275,22 +283,32 @@ EXPORT_SYMBOL(drm_mm_get_block_range_generic); > * -ENOSPC if no suitable free area is available. This is for range > * restricted allocations. The preallocated memory node must be cleared. > */ > -int drm_mm_insert_node_in_range(struct drm_mm *mm, struct drm_mm_node *node, > - unsigned long size, unsigned alignment, > - unsigned long start, unsigned long end) > +int drm_mm_insert_node_in_range_generic(struct drm_mm *mm, struct drm_mm_node *node, > + unsigned long size, unsigned alignment, unsigned long color, > + unsigned long start, unsigned long end, > + int atomic) > { > struct drm_mm_node *hole_node; > > - hole_node = drm_mm_search_free_in_range(mm, size, alignment, > - start, end, false); > + hole_node = drm_mm_search_free_in_range_generic(mm, > + size, alignment, color, > + start, end, atomic); Same as above. > if (!hole_node) > return -ENOSPC; > > - drm_mm_insert_helper_range(hole_node, node, size, alignment, 0, > + drm_mm_insert_helper_range(hole_node, node, > + size, alignment, color, > start, end); > - > return 0; > } > +EXPORT_SYMBOL(drm_mm_insert_node_in_range_generic); > + > +int drm_mm_insert_node_in_range(struct drm_mm *mm, struct drm_mm_node *node, > + unsigned long size, unsigned alignment, > + unsigned long start, unsigned long end) > +{ > + return drm_mm_insert_node_in_range_generic(mm, node, size, alignment, 0, start, end, false); > +} > EXPORT_SYMBOL(drm_mm_insert_node_in_range); > > /** > diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h > index 06d7f79..87b0968 100644 > --- a/include/drm/drm_mm.h > +++ b/include/drm/drm_mm.h > @@ -158,12 +158,31 @@ static inline struct drm_mm_node *drm_mm_get_block_atomic_range( > return drm_mm_get_block_range_generic(parent, size, alignment, 0, > start, end, 1); > } > -extern int drm_mm_insert_node(struct drm_mm *mm, struct drm_mm_node *node, > - unsigned long size, unsigned alignment); > + > +extern int drm_mm_insert_node(struct drm_mm *mm, > + struct drm_mm_node *node, > + unsigned long size, > + unsigned alignment); > extern int drm_mm_insert_node_in_range(struct drm_mm *mm, > struct drm_mm_node *node, > - unsigned long size, unsigned alignment, > - unsigned long start, unsigned long end); > + unsigned long size, > + unsigned alignment, > + unsigned long start, > + unsigned long end); > +extern int drm_mm_insert_node_generic(struct drm_mm *mm, > + struct drm_mm_node *node, > + unsigned long size, > + unsigned alignment, > + unsigned long color, > + int atomic); > +extern int drm_mm_insert_node_in_range_generic(struct drm_mm *mm, > + struct drm_mm_node *node, > + unsigned long size, > + unsigned alignment, > + unsigned long color, > + unsigned long start, > + unsigned long end, > + int atomic); > extern void drm_mm_put_block(struct drm_mm_node *cur); > extern void drm_mm_remove_node(struct drm_mm_node *node); > extern void drm_mm_replace_node(struct drm_mm_node *old, struct drm_mm_node *new); > -- > 1.7.10.4 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel