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