On Thu, Jul 25, 2013 at 03:55:59PM +0200, David Herrmann wrote:
Add a "best_match" argument similar to the drm_mm_search_*() helpers so we can convert TTM to use them in follow up patches. We can also inline the non-generic helpers and move them into the header to allow compile-time optimizations.
Signed-off-by: David Herrmann dh.herrmann@gmail.com
drivers/gpu/drm/drm_mm.c | 23 ++++------------------- drivers/gpu/drm/drm_vma_manager.c | 4 ++-- drivers/gpu/drm/i915/i915_gem.c | 3 ++- drivers/gpu/drm/sis/sis_mm.c | 4 ++-- drivers/gpu/drm/via/via_mm.c | 4 ++-- include/drm/drm_mm.h | 38 ++++++++++++++++++++++++++------------ 6 files changed, 38 insertions(+), 38 deletions(-)
diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c index fe304f9..5aad736 100644 --- a/drivers/gpu/drm/drm_mm.c +++ b/drivers/gpu/drm/drm_mm.c @@ -212,12 +212,12 @@ EXPORT_SYMBOL(drm_mm_get_block_generic); */ int drm_mm_insert_node_generic(struct drm_mm *mm, struct drm_mm_node *node, unsigned long size, unsigned alignment,
unsigned long color)
unsigned long color, bool best_match)
Hm, we have a patch in the queue to add a top-down allocator mode, see:
http://www.mail-archive.com/dri-devel@lists.freedesktop.org/msg40556.html
So if we go to the trouble of changing all callers I'd vote for a unsinged int flags parameter and #define DRM_MM_BEST_MATCH (1 << 0)
Then we could add the top-down flag without another tree-wide change.
Note that the above patch needs to be rebased onto your series here anyway since it still tries to cope with GFP_ATOMIC allocations and the preallocation dance. So imo it's best if your series here goes in first.
Otherwise this looks good. -Daniel
{ struct drm_mm_node *hole_node;
hole_node = drm_mm_search_free_generic(mm, size, alignment,
color, 0);
if (!hole_node) return -ENOSPC;color, best_match);
@@ -226,13 +226,6 @@ int drm_mm_insert_node_generic(struct drm_mm *mm, struct drm_mm_node *node, } 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);
-} -EXPORT_SYMBOL(drm_mm_insert_node);
static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node, struct drm_mm_node *node, unsigned long size, unsigned alignment, @@ -313,13 +306,13 @@ EXPORT_SYMBOL(drm_mm_get_block_range_generic); */ 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)
unsigned long start, unsigned long end, bool best_match)
{ struct drm_mm_node *hole_node;
hole_node = drm_mm_search_free_in_range_generic(mm, size, alignment, color,
start, end, 0);
if (!hole_node) return -ENOSPC;start, end, best_match);
@@ -330,14 +323,6 @@ int drm_mm_insert_node_in_range_generic(struct drm_mm *mm, struct drm_mm_node *n } 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);
-} -EXPORT_SYMBOL(drm_mm_insert_node_in_range);
/**
- Remove a memory node from the allocator.
*/ diff --git a/drivers/gpu/drm/drm_vma_manager.c b/drivers/gpu/drm/drm_vma_manager.c index b966cea..4285b38 100644 --- a/drivers/gpu/drm/drm_vma_manager.c +++ b/drivers/gpu/drm/drm_vma_manager.c @@ -241,8 +241,8 @@ int drm_vma_offset_add(struct drm_vma_offset_manager *mgr, goto out_unlock; }
- ret = drm_mm_insert_node_generic(&mgr->vm_addr_space_mm,
&node->vm_node, pages, 0, 0);
- ret = drm_mm_insert_node(&mgr->vm_addr_space_mm, &node->vm_node,
if (ret) goto out_unlock;pages, 0, false);
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 8673a00..6667322 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -3092,7 +3092,8 @@ search_free: ret = drm_mm_insert_node_in_range_generic(&dev_priv->mm.gtt_space, &obj->gtt_space, size, alignment,
obj->cache_level, 0, gtt_max);
obj->cache_level, 0, gtt_max,
if (ret) { ret = i915_gem_evict_something(dev, size, alignment, obj->cache_level,false);
diff --git a/drivers/gpu/drm/sis/sis_mm.c b/drivers/gpu/drm/sis/sis_mm.c index 9a43d98..85da1a4 100644 --- a/drivers/gpu/drm/sis/sis_mm.c +++ b/drivers/gpu/drm/sis/sis_mm.c @@ -109,7 +109,7 @@ static int sis_drm_alloc(struct drm_device *dev, struct drm_file *file, if (pool == AGP_TYPE) { retval = drm_mm_insert_node(&dev_priv->agp_mm, &item->mm_node,
mem->size, 0);
offset = item->mm_node.start; } else {mem->size, 0, false);
#if defined(CONFIG_FB_SIS) || defined(CONFIG_FB_SIS_MODULE) @@ -121,7 +121,7 @@ static int sis_drm_alloc(struct drm_device *dev, struct drm_file *file, #else retval = drm_mm_insert_node(&dev_priv->vram_mm, &item->mm_node,
mem->size, 0);
offset = item->mm_node.start;mem->size, 0, false);
#endif } diff --git a/drivers/gpu/drm/via/via_mm.c b/drivers/gpu/drm/via/via_mm.c index 0ab93ff..10b962e 100644 --- a/drivers/gpu/drm/via/via_mm.c +++ b/drivers/gpu/drm/via/via_mm.c @@ -140,11 +140,11 @@ int via_mem_alloc(struct drm_device *dev, void *data, if (mem->type == VIA_MEM_AGP) retval = drm_mm_insert_node(&dev_priv->agp_mm, &item->mm_node,
tmpSize, 0);
else retval = drm_mm_insert_node(&dev_priv->vram_mm, &item->mm_node,tmpSize, 0, false);
tmpSize, 0);
if (retval) goto fail_alloc;tmpSize, 0, false);
diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h index b87d05e..a30c9aa 100644 --- a/include/drm/drm_mm.h +++ b/include/drm/drm_mm.h @@ -186,28 +186,42 @@ static inline struct drm_mm_node *drm_mm_get_block_atomic_range( 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_in_range(struct drm_mm *mm,
struct drm_mm_node *node,
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);
unsigned long color,
bool best_match);
+static inline int drm_mm_insert_node(struct drm_mm *mm,
struct drm_mm_node *node,
unsigned long size,
unsigned alignment,
bool best_match)
+{
- return drm_mm_insert_node_generic(mm, node, size, alignment, 0,
best_match);
+}
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);
unsigned long end,
bool best_match);
+static inline 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,
bool best_match)
+{
- return drm_mm_insert_node_in_range_generic(mm, node, size, alignment,
0, start, end, best_match);
+}
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.8.3.3