summaryrefslogtreecommitdiff
path: root/kern/kmem.c
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2012-12-01 15:44:20 +0100
committerRichard Braun <rbraun@sceen.net>2012-12-01 15:44:20 +0100
commit7639d05dcb960c91ba0bd18daa55b4deb30e8b52 (patch)
tree277e410676165fb83cd4eaa049e450d18545090f /kern/kmem.c
parent7226ab8883555e2f3806e6d2ff3773cbb8756a4e (diff)
kern/kmem: rework the info functions
Directly use existing caches instead of copying them to temporary storage (the idea was to reduce contention but these functions are so infrequently used that it's actually irrelevant). Also, wrap the dozen printk calls into one.
Diffstat (limited to 'kern/kmem.c')
-rw-r--r--kern/kmem.c112
1 files changed, 37 insertions, 75 deletions
diff --git a/kern/kmem.c b/kern/kmem.c
index af3eccac..2718c09e 100644
--- a/kern/kmem.c
+++ b/kern/kmem.c
@@ -1027,7 +1027,6 @@ slab_free:
void
kmem_cache_info(struct kmem_cache *cache)
{
- struct kmem_cache *cache_stats;
char flags_str[64];
if (cache == NULL) {
@@ -1041,55 +1040,36 @@ kmem_cache_info(struct kmem_cache *cache)
return;
}
- cache_stats = kmem_alloc(sizeof(*cache_stats));
-
- if (cache_stats == NULL) {
- printk("kmem: unable to allocate memory for cache stats\n");
- return;
- }
+ snprintf(flags_str, sizeof(flags_str), "%s%s%s",
+ (cache->flags & KMEM_CF_DIRECT) ? " DIRECT" : "",
+ (cache->flags & KMEM_CF_SLAB_EXTERNAL) ? " SLAB_EXTERNAL" : "",
+ (cache->flags & KMEM_CF_VERIFY) ? " VERIFY" : "");
/* mutex_lock(&cache->mutex); */
- cache_stats->flags = cache->flags;
- cache_stats->obj_size = cache->obj_size;
- cache_stats->align = cache->align;
- cache_stats->buf_size = cache->buf_size;
- cache_stats->bufctl_dist = cache->bufctl_dist;
- cache_stats->slab_size = cache->slab_size;
- cache_stats->color_max = cache->color_max;
- cache_stats->bufs_per_slab = cache->bufs_per_slab;
- cache_stats->nr_objs = cache->nr_objs;
- cache_stats->nr_bufs = cache->nr_bufs;
- cache_stats->nr_slabs = cache->nr_slabs;
- cache_stats->nr_free_slabs = cache->nr_free_slabs;
- strcpy(cache_stats->name, cache->name);
- cache_stats->buftag_dist = cache->buftag_dist;
- cache_stats->redzone_pad = cache->redzone_pad;
- cache_stats->cpu_pool_type = cache->cpu_pool_type;
- /* mutex_unlock(&cache->mutex); */
- snprintf(flags_str, sizeof(flags_str), "%s%s%s",
- (cache_stats->flags & KMEM_CF_DIRECT) ? " DIRECT" : "",
- (cache_stats->flags & KMEM_CF_SLAB_EXTERNAL) ? " SLAB_EXTERNAL" : "",
- (cache_stats->flags & KMEM_CF_VERIFY) ? " VERIFY" : "");
-
- printk("kmem: name: %s\n", cache_stats->name);
- printk("kmem: flags: 0x%x%s\n", cache_stats->flags, flags_str);
- printk("kmem: obj_size: %zu\n", cache_stats->obj_size);
- printk("kmem: align: %zu\n", cache_stats->align);
- printk("kmem: buf_size: %zu\n", cache_stats->buf_size);
- printk("kmem: bufctl_dist: %zu\n", cache_stats->bufctl_dist);
- printk("kmem: slab_size: %zu\n", cache_stats->slab_size);
- printk("kmem: color_max: %zu\n", cache_stats->color_max);
- printk("kmem: bufs_per_slab: %lu\n", cache_stats->bufs_per_slab);
- printk("kmem: nr_objs: %lu\n", cache_stats->nr_objs);
- printk("kmem: nr_bufs: %lu\n", cache_stats->nr_bufs);
- printk("kmem: nr_slabs: %lu\n", cache_stats->nr_slabs);
- printk("kmem: nr_free_slabs: %lu\n", cache_stats->nr_free_slabs);
- printk("kmem: buftag_dist: %zu\n", cache_stats->buftag_dist);
- printk("kmem: redzone_pad: %zu\n", cache_stats->redzone_pad);
- printk("kmem: cpu_pool_size: %d\n", cache_stats->cpu_pool_type->array_size);
-
- kmem_free(cache_stats, sizeof(*cache_stats));
+ printk("kmem: name: %s\n"
+ "kmem: flags: 0x%x%s\n"
+ "kmem: obj_size: %zu\n"
+ "kmem: align: %zu\n"
+ "kmem: buf_size: %zu\n"
+ "kmem: bufctl_dist: %zu\n"
+ "kmem: slab_size: %zu\n"
+ "kmem: color_max: %zu\n"
+ "kmem: bufs_per_slab: %lu\n"
+ "kmem: nr_objs: %lu\n"
+ "kmem: nr_bufs: %lu\n"
+ "kmem: nr_slabs: %lu\n"
+ "kmem: nr_free_slabs: %lu\n"
+ "kmem: buftag_dist: %zu\n"
+ "kmem: redzone_pad: %zu\n"
+ "kmem: cpu_pool_size: %d\n", cache->name, cache->flags, flags_str,
+ cache->obj_size, cache->align, cache->buf_size, cache->bufctl_dist,
+ cache->slab_size, cache->color_max, cache->bufs_per_slab,
+ cache->nr_objs, cache->nr_bufs, cache->nr_slabs,
+ cache->nr_free_slabs, cache->buftag_dist, cache->redzone_pad,
+ cache->cpu_pool_type->array_size);
+
+ /* mutex_unlock(&cache->mutex); */
}
void __init
@@ -1248,47 +1228,29 @@ kmem_free(void *ptr, size_t size)
void
kmem_info(void)
{
- struct kmem_cache *cache, *cache_stats;
+ struct kmem_cache *cache;
size_t mem_usage, mem_reclaimable;
- cache_stats = kmem_alloc(sizeof(*cache_stats));
-
- if (cache_stats == NULL) {
- printk("kmem: unable to allocate memory for cache stats\n");
- return;
- }
-
printk("kmem: cache obj slab bufs objs bufs "
- " total reclaimable\n");
- printk("kmem: name size size /slab usage count "
+ " total reclaimable\n"
+ "kmem: name size size /slab usage count "
" memory memory\n");
/* mutex_lock(&kmem_cache_list_mutex); */
list_for_each_entry(&kmem_cache_list, cache, node) {
/* mutex_lock(&cache->mutex); */
- cache_stats->obj_size = cache->obj_size;
- cache_stats->slab_size = cache->slab_size;
- cache_stats->bufs_per_slab = cache->bufs_per_slab;
- cache_stats->nr_objs = cache->nr_objs;
- cache_stats->nr_bufs = cache->nr_bufs;
- cache_stats->nr_slabs = cache->nr_slabs;
- cache_stats->nr_free_slabs = cache->nr_free_slabs;
- strcpy(cache_stats->name, cache->name);
- /* mutex_unlock(&cache->mutex); */
- mem_usage = (cache_stats->nr_slabs * cache_stats->slab_size) >> 10;
- mem_reclaimable =
- (cache_stats->nr_free_slabs * cache_stats->slab_size) >> 10;
+ mem_usage = (cache->nr_slabs * cache->slab_size) >> 10;
+ mem_reclaimable = (cache->nr_free_slabs * cache->slab_size) >> 10;
printk("kmem: %-19s %6zu %3zuk %4lu %6lu %6lu %7zuk %10zuk\n",
- cache_stats->name, cache_stats->obj_size,
- cache_stats->slab_size >> 10, cache_stats->bufs_per_slab,
- cache_stats->nr_objs, cache_stats->nr_bufs, mem_usage,
- mem_reclaimable);
+ cache->name, cache->obj_size, cache->slab_size >> 10,
+ cache->bufs_per_slab, cache->nr_objs, cache->nr_bufs,
+ mem_usage, mem_reclaimable);
+
+ /* mutex_unlock(&cache->mutex); */
}
/* mutex_unlock(&kmem_cache_list_mutex); */
-
- kmem_free(cache_stats, sizeof(*cache_stats));
}