added Vector_zeroEnd() function
[util-vserver.git] / util-vserver / kernel / cvirt.h
1 #if     defined(__KERNEL__) && defined(_VX_INFO_DEF_)
2
3 #include <linux/utsname.h>
4 #include <linux/rwsem.h>
5 #include <linux/jiffies.h>
6 #include <linux/time.h>
7 #include <asm/atomic.h>
8
9 /* context sub struct */
10
11 struct sock_acc {
12         atomic_t count;
13         atomic_t total;
14 };
15
16 struct _vx_cvirt {
17         int nr_threads;
18         int nr_running;
19         int max_threads;
20         unsigned long total_forks;
21
22         unsigned int bias_cswtch;
23         struct timespec bias_idle;
24         struct timespec bias_tp;
25         uint64_t bias_jiffies;
26
27         struct new_utsname utsname;
28
29         struct sock_acc sock[5][3];
30 };
31
32
33 static inline long vx_sock_count(struct _vx_cvirt *cvirt, int type, int pos)
34 {
35         return atomic_read(&cvirt->sock[type][pos].count);
36 }
37
38
39 static inline long vx_sock_total(struct _vx_cvirt *cvirt, int type, int pos)
40 {
41         return atomic_read(&cvirt->sock[type][pos].total);
42 }
43
44
45 extern uint64_t vx_idle_jiffies(void);
46
47 static inline void vx_info_init_cvirt(struct _vx_cvirt *cvirt)
48 {
49         int i,j;
50         uint64_t idle_jiffies = vx_idle_jiffies();
51
52         cvirt->nr_threads = 1;
53         // new->virt.bias_cswtch = kstat.context_swtch;
54         cvirt->bias_jiffies = get_jiffies_64();
55
56         jiffies_to_timespec(idle_jiffies, &cvirt->bias_idle);
57         do_posix_clock_monotonic_gettime(&cvirt->bias_tp);
58
59         down_read(&uts_sem);
60         cvirt->utsname = system_utsname;
61         up_read(&uts_sem);
62
63         for (i=0; i<5; i++) {
64                 for (j=0; j<3; j++) {
65                         atomic_set(&cvirt->sock[i][j].count, 0);
66                         atomic_set(&cvirt->sock[i][j].total, 0);
67                 }
68         }
69 }
70
71 static inline int vx_info_proc_cvirt(struct _vx_cvirt *cvirt, char *buffer)
72 {
73         int i,j, length = 0;
74         static char *type[] = { "UNSPEC", "UNIX", "INET", "INET6", "OTHER" };
75
76         for (i=0; i<5; i++) {
77                 length += sprintf(buffer + length,
78                         "%s:", type[i]);
79                 for (j=0; j<3; j++) {
80                         length += sprintf(buffer + length,
81                                 "\t%12lu/%-12lu"
82                                 ,vx_sock_count(cvirt, i, j)
83                                 ,vx_sock_total(cvirt, i, j)
84                                 );
85                 }       
86                 buffer[length++] = '\n';
87         }
88         return length;
89 }
90
91 #else   /* _VX_INFO_DEF_ */
92 #ifndef _VX_CVIRT_H
93 #define _VX_CVIRT_H
94
95 #include "switch.h"
96
97 /*  cvirt vserver commands */
98
99
100 #ifdef  __KERNEL__
101
102 struct timespec;
103
104 void vx_vsi_uptime(struct timespec *uptime, struct timespec *idle);
105
106 #endif  /* __KERNEL__ */
107
108 #endif  /* _VX_CVIRT_H */
109 #endif