summaryrefslogtreecommitdiff
path: root/debian/patches/slabinfo0001-ddb-add-new-command-show-slabinfo.patch
blob: b0a573306ed9cec92e9d38f30096ef0663db1a7a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
From b64c73ca13beef304e86753b78f8079faa885989 Mon Sep 17 00:00:00 2001
From: Justus Winter <4winter@informatik.uni-hamburg.de>
Date: Tue, 29 Sep 2015 13:20:52 +0200
Subject: [PATCH gnumach 1/4] ddb: add new command `show slabinfo'

* ddb/db_command.c (db_show_cmds): Add `slabinfo'.
* kern/slab.c (slab_info): Generalize so that it can be used with
different printf-like functions, and turn it into a static function.
(slab_info): New wrapper retaining the old behaviour.
(db_show_slab_info): New wrapper that uses `db_printf' instead.
* kern/slab.h (db_show_slab_info): New declaration.
---
 ddb/db_command.c |  2 ++
 kern/slab.c      | 21 ++++++++++++++++++---
 kern/slab.h      |  4 ++++
 3 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/ddb/db_command.c b/ddb/db_command.c
index 5651667..721f04f 100644
--- a/ddb/db_command.c
+++ b/ddb/db_command.c
@@ -57,6 +57,7 @@
 #include <machine/db_interface.h>
 #include <kern/debug.h>
 #include <kern/thread.h>
+#include <kern/slab.h>
 #include <ipc/ipc_pset.h> /* 4proto */
 #include <ipc/ipc_port.h> /* 4proto */
 
@@ -327,6 +328,7 @@ struct db_command db_show_cmds[] = {
 	{ "kmsg",	ipc_kmsg_print,		0,	0 },
 	{ "msg",	ipc_msg_print,		0,	0 },
 	{ "ipc_port",	db_show_port_id,	0,	0 },
+	{ "slabinfo",	db_show_slab_info,	0,	0 },
 	{ (char *)0, }
 };
 
diff --git a/kern/slab.c b/kern/slab.c
index 1114cfa..8a98aa5 100644
--- a/kern/slab.c
+++ b/kern/slab.c
@@ -1433,12 +1433,12 @@ void kfree(vm_offset_t data, vm_size_t size)
     }
 }
 
-void slab_info(void)
+static void _slab_info(int (printx)(const char *fmt, ...))
 {
     struct kmem_cache *cache;
     vm_size_t mem_usage, mem_reclaimable;
 
-    printf("cache                  obj slab  bufs   objs   bufs "
+    printx("cache                  obj slab  bufs   objs   bufs "
            "   total reclaimable\n"
            "name                  size size /slab  usage  count "
            "  memory      memory\n");
@@ -1451,7 +1451,7 @@ void slab_info(void)
         mem_usage = (cache->nr_slabs * cache->slab_size) >> 10;
         mem_reclaimable = (cache->nr_free_slabs * cache->slab_size) >> 10;
 
-        printf("%-19s %6lu %3luk  %4lu %6lu %6lu %7uk %10uk\n",
+        printx("%-19s %6lu %3luk  %4lu %6lu %6lu %7uk %10uk\n",
                cache->name, cache->obj_size, cache->slab_size >> 10,
                cache->bufs_per_slab, cache->nr_objs, cache->nr_bufs,
                mem_usage, mem_reclaimable);
@@ -1462,6 +1462,21 @@ void slab_info(void)
     simple_unlock(&kmem_cache_list_lock);
 }
 
+void slab_info(void)
+{
+    _slab_info(printf);
+}
+
+#if MACH_KDB
+#include <ddb/db_output.h>
+
+ void db_show_slab_info(void)
+{
+    _slab_info(db_printf);
+}
+
+#endif /* MACH_KDB */
+
 #if MACH_DEBUG
 kern_return_t host_slab_info(host_t host, cache_info_array_t *infop,
                              unsigned int *infoCntp)
diff --git a/kern/slab.h b/kern/slab.h
index c7be169..77db7c1 100644
--- a/kern/slab.h
+++ b/kern/slab.h
@@ -253,4 +253,8 @@ void slab_collect(void);
  */
 void slab_info(void);
 
+#if MACH_KDB
+void db_show_slab_info(void);
+#endif /* MACH_KDB */
+
 #endif /* _KERN_SLAB_H */
-- 
2.1.4