fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / kernel / vserver / cvirt_proc.h
1 #ifndef _VX_CVIRT_PROC_H
2 #define _VX_CVIRT_PROC_H
3
4 #include <linux/nsproxy.h>
5 #include <linux/mnt_namespace.h>
6 #include <linux/utsname.h>
7 #include <linux/ipc.h>
8
9
10 static inline
11 int vx_info_proc_nsproxy(struct nsproxy *nsproxy, char *buffer)
12 {
13         struct mnt_namespace *ns;
14         struct uts_namespace *uts;
15         struct ipc_namespace *ipc;
16         struct vfsmount *mnt;
17         char *path, *root;
18         int length = 0;
19
20         if (!nsproxy)
21                 goto out;
22
23         length += sprintf(buffer + length,
24                 "NSProxy:\t%p [%p,%p,%p]\n",
25                 nsproxy, nsproxy->mnt_ns,
26                 nsproxy->uts_ns, nsproxy->ipc_ns);
27
28         ns = nsproxy->mnt_ns;
29         if (!ns)
30                 goto skip_ns;
31
32         path = kmalloc(PATH_MAX, GFP_KERNEL);
33         if (!path)
34                 goto skip_ns;
35
36         mnt = ns->root;
37         root = d_path(mnt->mnt_root, mnt->mnt_parent, path, PATH_MAX-2);
38         length += sprintf(buffer + length,
39                 "Namespace:\t%p [#%u]\n"
40                 "RootPath:\t%s\n"
41                 ,ns , atomic_read(&ns->count)
42                 ,root);
43         kfree(path);
44 skip_ns:
45
46         uts = nsproxy->uts_ns;
47         if (!uts)
48                 goto skip_uts;
49
50         length += sprintf(buffer + length,
51                 "SysName:\t%.*s\n"
52                 "NodeName:\t%.*s\n"
53                 "Release:\t%.*s\n"
54                 "Version:\t%.*s\n"
55                 "Machine:\t%.*s\n"
56                 "DomainName:\t%.*s\n"
57                 ,__NEW_UTS_LEN, uts->name.sysname
58                 ,__NEW_UTS_LEN, uts->name.nodename
59                 ,__NEW_UTS_LEN, uts->name.release
60                 ,__NEW_UTS_LEN, uts->name.version
61                 ,__NEW_UTS_LEN, uts->name.machine
62                 ,__NEW_UTS_LEN, uts->name.domainname
63                 );
64 skip_uts:
65
66         ipc = nsproxy->ipc_ns;
67         if (!ipc)
68                 goto skip_ipc;
69
70         length += sprintf(buffer + length,
71                 "SEMS:\t\t%d %d %d %d  %d\n"
72                 "MSG:\t\t%d %d %d\n"
73                 "SHM:\t\t%lu %lu  %d %d\n"
74                 ,ipc->sem_ctls[0], ipc->sem_ctls[1]
75                 ,ipc->sem_ctls[2], ipc->sem_ctls[3]
76                 ,ipc->used_sems
77                 ,ipc->msg_ctlmax, ipc->msg_ctlmnb, ipc->msg_ctlmni
78                 ,(unsigned long)ipc->shm_ctlmax
79                 ,(unsigned long)ipc->shm_ctlall
80                 ,ipc->shm_ctlmni, ipc->shm_tot
81                 );
82 skip_ipc:
83
84 out:
85         return length;
86 }
87
88
89 #include <linux/sched.h>
90
91 #define LOAD_INT(x) ((x) >> FSHIFT)
92 #define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100)
93
94 static inline
95 int vx_info_proc_cvirt(struct _vx_cvirt *cvirt, char *buffer)
96 {
97         int length = 0;
98         int a, b, c;
99
100         length += sprintf(buffer + length,
101                 "BiasUptime:\t%lu.%02lu\n",
102                         (unsigned long)cvirt->bias_uptime.tv_sec,
103                         (cvirt->bias_uptime.tv_nsec / (NSEC_PER_SEC / 100)));
104
105         a = cvirt->load[0] + (FIXED_1/200);
106         b = cvirt->load[1] + (FIXED_1/200);
107         c = cvirt->load[2] + (FIXED_1/200);
108         length += sprintf(buffer + length,
109                 "nr_threads:\t%d\n"
110                 "nr_running:\t%d\n"
111                 "nr_unintr:\t%d\n"
112                 "nr_onhold:\t%d\n"
113                 "load_updates:\t%d\n"
114                 "loadavg:\t%d.%02d %d.%02d %d.%02d\n"
115                 "total_forks:\t%d\n"
116                 ,atomic_read(&cvirt->nr_threads)
117                 ,atomic_read(&cvirt->nr_running)
118                 ,atomic_read(&cvirt->nr_uninterruptible)
119                 ,atomic_read(&cvirt->nr_onhold)
120                 ,atomic_read(&cvirt->load_updates)
121                 ,LOAD_INT(a), LOAD_FRAC(a)
122                 ,LOAD_INT(b), LOAD_FRAC(b)
123                 ,LOAD_INT(c), LOAD_FRAC(c)
124                 ,atomic_read(&cvirt->total_forks)
125                 );
126
127         return length;
128 }
129
130 static inline
131 int vx_info_proc_cvirt_pc(struct _vx_cvirt_pc *cvirt_pc,
132         char *buffer, int cpu)
133 {
134         int length = 0;
135         return length;
136 }
137
138 #endif  /* _VX_CVIRT_PROC_H */