aboutsummaryrefslogtreecommitdiff
path: root/linux-core/drm_mm.c
diff options
context:
space:
mode:
authorThomas Hellstrom <thomas-at-tungstengraphics-dot-com>2006-09-04 16:57:20 +0200
committerThomas Hellstrom <thomas-at-tungstengraphics-dot-com>2006-09-04 16:57:20 +0200
commita6b8e3eaf49044e135a0b9288192525f301458d5 (patch)
treef13f3c9327e597e2fdc372d2bce8be3e8bdeaa0b /linux-core/drm_mm.c
parenta96b61fdc4fc3df50c91ca489f45f12cdad74f69 (diff)
Make memory caches global so that they can be used with
multiple heads.
Diffstat (limited to 'linux-core/drm_mm.c')
-rw-r--r--linux-core/drm_mm.c23
1 files changed, 5 insertions, 18 deletions
diff --git a/linux-core/drm_mm.c b/linux-core/drm_mm.c
index 6e2da81a..debac9d9 100644
--- a/linux-core/drm_mm.c
+++ b/linux-core/drm_mm.c
@@ -44,8 +44,6 @@
#include "drmP.h"
#include <linux/slab.h>
-static kmem_cache_t *mm_cache = NULL;
-
drm_mm_node_t *drm_mm_get_block(drm_mm_node_t * parent,
unsigned long size, unsigned alignment)
{
@@ -61,7 +59,7 @@ drm_mm_node_t *drm_mm_get_block(drm_mm_node_t * parent,
return parent;
} else {
- child = (drm_mm_node_t *) kmem_cache_alloc(mm_cache,
+ child = (drm_mm_node_t *) kmem_cache_alloc(drm_cache.mm,
GFP_KERNEL);
if (!child)
return NULL;
@@ -110,7 +108,7 @@ void drm_mm_put_block(drm_mm_t * mm, drm_mm_node_t * cur)
prev_node->size += next_node->size;
list_del(&next_node->ml_entry);
list_del(&next_node->fl_entry);
- kmem_cache_free(mm_cache, next_node);
+ kmem_cache_free(drm_cache.mm, next_node);
} else {
next_node->size += cur->size;
@@ -124,7 +122,7 @@ void drm_mm_put_block(drm_mm_t * mm, drm_mm_node_t * cur)
list_add(&cur->fl_entry, &list_root->fl_entry);
} else {
list_del(&cur->ml_entry);
- kmem_cache_free(mm_cache, cur);
+ kmem_cache_free(drm_cache.mm, cur);
}
}
@@ -159,11 +157,6 @@ drm_mm_node_t *drm_mm_search_free(const drm_mm_t * mm,
return best;
}
-void drm_mm_set_cache(kmem_cache_t *cache)
-{
- mm_cache = cache;
-}
-
int drm_mm_clean(drm_mm_t *mm)
{
struct list_head *head = &mm->root_node.ml_entry;
@@ -175,17 +168,11 @@ int drm_mm_init(drm_mm_t * mm, unsigned long start, unsigned long size)
{
drm_mm_node_t *child;
- if (!mm_cache) {
- DRM_ERROR("Memory manager memory cache "
- "is not initialized.\n");
- return -EINVAL;
- }
-
INIT_LIST_HEAD(&mm->root_node.ml_entry);
INIT_LIST_HEAD(&mm->root_node.fl_entry);
- child = (drm_mm_node_t *) kmem_cache_alloc(mm_cache, GFP_KERNEL);
+ child = (drm_mm_node_t *) kmem_cache_alloc(drm_cache.mm, GFP_KERNEL);
if (!child)
return -ENOMEM;
@@ -220,7 +207,7 @@ void drm_mm_takedown(drm_mm_t * mm)
list_del(&entry->fl_entry);
list_del(&entry->ml_entry);
- kmem_cache_free(mm_cache, entry);
+ kmem_cache_free(drm_cache.mm, entry);
}
EXPORT_SYMBOL(drm_mm_takedown);