summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linux-core/drmP.h31
-rw-r--r--linux-core/drm_drv.c51
-rw-r--r--linux-core/drm_fence.c9
-rw-r--r--linux-core/drm_mm.c15
-rw-r--r--linux-core/drm_stub.c5
5 files changed, 9 insertions, 102 deletions
diff --git a/linux-core/drmP.h b/linux-core/drmP.h
index d02184c7..13f97eee 100644
--- a/linux-core/drmP.h
+++ b/linux-core/drmP.h
@@ -755,17 +755,6 @@ typedef struct drm_head {
struct class_device *dev_class;
} drm_head_t;
-typedef struct drm_cache {
-
- /*
- * Memory caches
- */
-
- kmem_cache_t *mm;
- kmem_cache_t *fence_object;
-} drm_cache_t;
-
-
typedef struct drm_fence_driver{
int no_types;
@@ -1318,7 +1307,6 @@ extern int drm_put_head(drm_head_t * head);
extern unsigned int drm_debug; /* 1 to enable debug output */
extern unsigned int drm_cards_limit;
extern drm_head_t **drm_heads;
-extern drm_cache_t drm_cache;
extern struct drm_sysfs_class *drm_class;
extern struct proc_dir_entry *drm_proc_root;
@@ -1581,25 +1569,6 @@ static inline void drm_ctl_free(void *pt, size_t size, int area)
drm_free_memctl(size);
}
-static inline void *drm_ctl_cache_alloc(kmem_cache_t *cache, size_t size,
- int flags)
-{
- void *ret;
- if (drm_alloc_memctl(size))
- return NULL;
- ret = kmem_cache_alloc(cache, flags);
- if (!ret)
- drm_free_memctl(size);
- return ret;
-}
-
-static inline void drm_ctl_cache_free(kmem_cache_t *cache, size_t size,
- void *obj)
-{
- kmem_cache_free(cache, obj);
- drm_free_memctl(size);
-}
-
/*@}*/
#endif /* __KERNEL__ */
diff --git a/linux-core/drm_drv.c b/linux-core/drm_drv.c
index 518e2aa3..45f563ff 100644
--- a/linux-core/drm_drv.c
+++ b/linux-core/drm_drv.c
@@ -446,52 +446,6 @@ static struct file_operations drm_stub_fops = {
.open = drm_stub_open
};
-static int drm_create_memory_caches(void)
-{
- drm_cache.mm = kmem_cache_create("drm_mm_node_t",
- sizeof(drm_mm_node_t),
- 0,
- SLAB_HWCACHE_ALIGN,
- NULL,NULL);
- if (!drm_cache.mm)
- return -ENOMEM;
-
- drm_cache.fence_object= kmem_cache_create("drm_fence_object_t",
- sizeof(drm_fence_object_t),
- 0,
- SLAB_HWCACHE_ALIGN,
- NULL,NULL);
- if (!drm_cache.fence_object)
- return -ENOMEM;
-
- return 0;
-}
-
-static void drm_free_mem_cache(kmem_cache_t *cache,
- const char *name)
-{
- if (!cache)
- return;
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
- if (kmem_cache_destroy(cache)) {
- DRM_ERROR("Warning! DRM is leaking %s memory.\n",
- name);
- }
-#else
- kmem_cache_destroy(cache);
-#endif
-}
-
-static void drm_free_memory_caches(void )
-{
-
- drm_free_mem_cache(drm_cache.fence_object, "fence object");
- drm_cache.fence_object = NULL;
- drm_free_mem_cache(drm_cache.mm, "memory manager block");
- drm_cache.mm = NULL;
-}
-
-
static int __init drm_core_init(void)
{
int ret;
@@ -499,9 +453,6 @@ static int __init drm_core_init(void)
si_meminfo(&si);
drm_init_memctl(si.totalram/2, si.totalram*3/4);
- ret = drm_create_memory_caches();
- if (ret)
- goto err_p1;
ret = -ENOMEM;
drm_cards_limit =
@@ -539,13 +490,11 @@ err_p2:
unregister_chrdev(DRM_MAJOR, "drm");
drm_free(drm_heads, sizeof(*drm_heads) * drm_cards_limit, DRM_MEM_STUB);
err_p1:
- drm_free_memory_caches();
return ret;
}
static void __exit drm_core_exit(void)
{
- drm_free_memory_caches();
remove_proc_entry("dri", NULL);
drm_sysfs_destroy(drm_class);
diff --git a/linux-core/drm_fence.c b/linux-core/drm_fence.c
index f656340e..06d48255 100644
--- a/linux-core/drm_fence.c
+++ b/linux-core/drm_fence.c
@@ -117,8 +117,7 @@ void drm_fence_usage_deref_locked(drm_device_t * dev,
DRM_DEBUG("Destroyed a fence object 0x%08lx\n",
fence->base.hash.key);
atomic_dec(&fm->count);
- drm_ctl_cache_free(drm_cache.fence_object, sizeof(*fence),
- fence);
+ drm_ctl_free(fence, sizeof(*fence), DRM_MEM_FENCE);
}
}
@@ -132,8 +131,7 @@ void drm_fence_usage_deref_unlocked(drm_device_t * dev,
if (atomic_read(&fence->usage) == 0) {
drm_fence_unring(dev, &fence->ring);
atomic_dec(&fm->count);
- drm_ctl_cache_free(drm_cache.fence_object,
- sizeof(*fence), fence);
+ drm_ctl_free(fence, sizeof(*fence), DRM_MEM_FENCE);
}
mutex_unlock(&dev->struct_mutex);
}
@@ -439,8 +437,7 @@ int drm_fence_object_create(drm_device_t * dev, uint32_t type,
int ret;
drm_fence_manager_t *fm = &dev->fm;
- fence = drm_ctl_cache_alloc(drm_cache.fence_object,
- sizeof(*fence), GFP_KERNEL);
+ fence = drm_ctl_alloc(sizeof(*fence), DRM_MEM_FENCE);
if (!fence)
return -ENOMEM;
ret = drm_fence_object_init(dev, type, flags, fence);
diff --git a/linux-core/drm_mm.c b/linux-core/drm_mm.c
index a5566b2f..34708ef9 100644
--- a/linux-core/drm_mm.c
+++ b/linux-core/drm_mm.c
@@ -82,8 +82,7 @@ static int drm_mm_create_tail_node(drm_mm_t *mm,
drm_mm_node_t *child;
child = (drm_mm_node_t *)
- drm_ctl_cache_alloc(drm_cache.mm, sizeof(*child),
- GFP_KERNEL);
+ drm_ctl_alloc(sizeof(*child), DRM_MEM_MM);
if (!child)
return -ENOMEM;
@@ -119,8 +118,7 @@ static drm_mm_node_t *drm_mm_split_at_start(drm_mm_node_t *parent,
drm_mm_node_t *child;
child = (drm_mm_node_t *)
- drm_ctl_cache_alloc(drm_cache.mm, sizeof(*child),
- GFP_KERNEL);
+ drm_ctl_alloc(sizeof(*child), DRM_MEM_MM);
if (!child)
return NULL;
@@ -207,9 +205,8 @@ void drm_mm_put_block(drm_mm_node_t * cur)
prev_node->size += next_node->size;
list_del(&next_node->ml_entry);
list_del(&next_node->fl_entry);
- drm_ctl_cache_free(drm_cache.mm,
- sizeof(*next_node),
- next_node);
+ drm_ctl_free(next_node, sizeof(*next_node),
+ DRM_MEM_MM);
} else {
next_node->size += cur->size;
next_node->start = cur->start;
@@ -222,7 +219,7 @@ void drm_mm_put_block(drm_mm_node_t * cur)
list_add(&cur->fl_entry, &list_root->fl_entry);
} else {
list_del(&cur->ml_entry);
- drm_ctl_cache_free(drm_cache.mm, sizeof(*cur), cur);
+ drm_ctl_free(cur, sizeof(*cur), DRM_MEM_MM);
}
}
@@ -296,7 +293,7 @@ void drm_mm_takedown(drm_mm_t * mm)
list_del(&entry->fl_entry);
list_del(&entry->ml_entry);
- drm_ctl_cache_free(drm_cache.mm, sizeof(*entry), entry);
+ drm_ctl_free(entry, sizeof(*entry), DRM_MEM_MM);
}
EXPORT_SYMBOL(drm_mm_takedown);
diff --git a/linux-core/drm_stub.c b/linux-core/drm_stub.c
index c03a56a1..4f6cd3f1 100644
--- a/linux-core/drm_stub.c
+++ b/linux-core/drm_stub.c
@@ -54,11 +54,6 @@ drm_head_t **drm_heads;
struct drm_sysfs_class *drm_class;
struct proc_dir_entry *drm_proc_root;
-drm_cache_t drm_cache =
-{ .mm = NULL,
- .fence_object = NULL
-};
-
static int drm_fill_in_dev(drm_device_t * dev, struct pci_dev *pdev,
const struct pci_device_id *ent,
struct drm_driver *driver)