]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/jdb/jdb_space.cpp
f5239b0675ba08657f31248cb6ea9e4538b7b78b
[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 "keycodes.h"
14 #include "ram_quota.h"
15 #include "simpleio.h"
16 #include "task.h"
17 #include "static_init.h"
18
19 class Jdb_space : public Jdb_module, public Jdb_kobject_handler
20 {
21 public:
22   Jdb_space() FIASCO_INIT;
23 private:
24   static Task *task;
25 };
26
27 Task *Jdb_space::task;
28
29 IMPLEMENT
30 Jdb_space::Jdb_space()
31   : Jdb_module("INFO"), Jdb_kobject_handler(Task::static_kobj_type)
32 {
33   Jdb_kobject::module()->register_handler(this);
34 }
35
36 PUBLIC
37 bool
38 Jdb_space::show_kobject(Kobject *o, int lvl)
39 {
40   Task *t = Kobject::dcast<Task*>(o);
41   show(t);
42   if (lvl)
43     {
44       Jdb::getchar();
45       return true;
46     }
47
48   return false;
49 }
50
51 PUBLIC
52 char const *
53 Jdb_space::kobject_type() const
54 {
55   return JDB_ANSI_COLOR(red) "Task" JDB_ANSI_COLOR(default);
56 }
57
58 PUBLIC
59 int
60 Jdb_space::show_kobject_short(char *buf, int max, Kobject *o)
61 {
62   Task *t = Kobject::dcast<Task*>(o);
63   int cnt = 0;
64   if (t == Kernel_task::kernel_task())
65     {
66       cnt = snprintf(buf, max, " {KERNEL}");
67       max -= cnt;
68       buf += cnt;
69     }
70   return cnt + snprintf(buf, max, " R=%ld", t->ref_cnt());
71 }
72
73 PRIVATE static
74 void
75 Jdb_space::print_space(Space *s)
76 {
77   printf("%p", s);
78 }
79
80 PRIVATE
81 void
82 Jdb_space::show(Task *t)
83 {
84   printf("Space %p (Kobject*)%p\n", t, static_cast<Kobject*>(t));
85   printf("\n  page table: %p\n", t->mem_space());
86   obj_space_info(t);
87   io_space_info(t);
88
89   printf("  utcb area: user_va=%lx kernel_va=%lx size=%lx\n",
90          t->user_utcb_area(), t->_utcb_kernel_area_start,
91          t->utcb_area_size());
92
93   unsigned long m = t->ram_quota()->current();
94   unsigned long l = t->ram_quota()->limit();
95   printf("  mem usage:  %ld (%ldKB) of %ld (%ldKB) @%p\n", 
96          m, m/1024, l, l/1024, t->ram_quota());
97 }
98
99 static bool space_filter(Kobject const *o)
100 { return Kobject::dcast<Task const *>(o); }
101
102 PUBLIC
103 Jdb_module::Action_code
104 Jdb_space::action(int cmd, void *&, char const *&, int &)
105 {
106   if (cmd == 0)
107     {
108       Jdb_kobject_list list(space_filter);
109       list.do_list();
110     }
111   return NOTHING;
112 }
113
114 PUBLIC
115 Jdb_module::Cmd const *
116 Jdb_space::cmds() const
117 {
118   static Cmd cs[] =
119     {
120         { 0, "s", "spacelist", "", "s\tshow task list", 0 },
121     };
122   return cs;
123 }
124   
125 PUBLIC
126 int
127 Jdb_space::num_cmds() const
128 { return 1; }
129
130 PRIVATE
131 void
132 Jdb_space::obj_space_info(Space *s)
133 {
134   printf("  obj_space:  %p\n", s->obj_space());
135 }
136
137 static
138 bool
139 filter_task_thread(Kobject const *o)
140 {
141   return Kobject::dcast<Task const *>(o) || Kobject::dcast<Thread const *>(o);
142 }
143 static Jdb_space jdb_space INIT_PRIORITY(JDB_MODULE_INIT_PRIO);
144 static Jdb_kobject_list::Mode INIT_PRIORITY(JDB_MODULE_INIT_PRIO) tnt("[Tasks + Threads]", filter_task_thread);
145
146 IMPLEMENTATION[!io || ux]:
147
148 PRIVATE
149 void
150 Jdb_space::io_space_info(Space *)
151 {}
152
153
154 IMPLEMENTATION[io && !ux]:
155
156 PRIVATE
157 void
158 Jdb_space::io_space_info(Space *s)
159 {
160   printf("  io_space:   %p\n", s->io_space());
161 }
162