]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/jdb/jdb_space.cpp
Some minor fixes.
[l4.git] / kernel / fiasco / src / jdb / jdb_space.cpp
1 IMPLEMENTATION:
2
3 #include <climits>
4 #include <cstring>
5 #include <cstdio>
6
7 #include "jdb.h"
8 #include "jdb_core.h"
9 #include "jdb_module.h"
10 #include "jdb_screen.h"
11 #include "jdb_kobject.h"
12 #include "kernel_console.h"
13 #include "kernel_task.h"
14 #include "keycodes.h"
15 #include "ram_quota.h"
16 #include "simpleio.h"
17 #include "task.h"
18 #include "thread_object.h"
19 #include "static_init.h"
20
21 class Jdb_space : public Jdb_module, public Jdb_kobject_handler
22 {
23 public:
24   Jdb_space() FIASCO_INIT;
25 private:
26   static Task *task;
27 };
28
29 Task *Jdb_space::task;
30
31 IMPLEMENT
32 Jdb_space::Jdb_space()
33   : Jdb_module("INFO"), Jdb_kobject_handler((Task*)0)
34 {
35   Jdb_kobject::module()->register_handler(this);
36 }
37
38 PUBLIC
39 bool
40 Jdb_space::show_kobject(Kobject_common *o, int lvl)
41 {
42   Task *t = cxx::dyn_cast<Task*>(o);
43   show(t);
44   if (lvl)
45     {
46       Jdb::getchar();
47       return true;
48     }
49
50   return false;
51 }
52
53 PUBLIC
54 char const *
55 Jdb_space::kobject_type(Kobject_common *) const
56 {
57   return JDB_ANSI_COLOR(red) "Task" JDB_ANSI_COLOR(default);
58 }
59
60 PUBLIC
61 void
62 Jdb_space::show_kobject_short(String_buffer *buf, Kobject_common *o)
63 {
64   Task *t = cxx::dyn_cast<Task*>(o);
65   if (t == Kernel_task::kernel_task())
66     buf->printf(" {KERNEL}");
67
68   buf->printf(" R=%ld", t->ref_cnt());
69 }
70
71 PRIVATE static
72 void
73 Jdb_space::print_space(Space *s)
74 {
75   printf("%p", s);
76 }
77
78 PRIVATE
79 void
80 Jdb_space::show(Task *t)
81 {
82   printf("Space %p (Kobject*)%p\n", t, static_cast<Kobject*>(t));
83
84   for (Space::Ku_mem_list::Const_iterator m = t->_ku_mem.begin(); m != t->_ku_mem.end();
85        ++m)
86     printf("  utcb area: user_va=%p kernel_va=%p size=%x\n",
87            m->u_addr.get(), m->k_addr, m->size);
88
89   unsigned long m = t->ram_quota()->current();
90   unsigned long l = t->ram_quota()->limit();
91   printf("  mem usage:  %lu (%luKB) of %lu (%luKB) @%p\n", 
92          m, m/1024, l, l/1024, t->ram_quota());
93 }
94
95 static bool space_filter(Kobject_common const *o)
96 { return cxx::dyn_cast<Task const *>(o); }
97
98 PUBLIC
99 Jdb_module::Action_code
100 Jdb_space::action(int cmd, void *&, char const *&, int &)
101 {
102   if (cmd == 0)
103     {
104       Jdb_kobject_list list(space_filter);
105       list.do_list();
106     }
107   return NOTHING;
108 }
109
110 PUBLIC
111 Jdb_module::Cmd const *
112 Jdb_space::cmds() const
113 {
114   static Cmd cs[] =
115     {
116         { 0, "s", "spacelist", "", "s\tshow task list", 0 },
117     };
118   return cs;
119 }
120   
121 PUBLIC
122 int
123 Jdb_space::num_cmds() const
124 { return 1; }
125
126 static
127 bool
128 filter_task_thread(Kobject_common const *o)
129 {
130   return cxx::dyn_cast<Task const *>(o) || cxx::dyn_cast<Thread const *>(o);
131 }
132 static Jdb_space jdb_space INIT_PRIORITY(JDB_MODULE_INIT_PRIO);
133 static Jdb_kobject_list::Mode INIT_PRIORITY(JDB_MODULE_INIT_PRIO) tnt("[Tasks + Threads]", filter_task_thread);
134