1 /* _VX_LIMIT_H defined below */
3 #if defined(__KERNEL__) && defined(_VX_INFO_DEF_)
5 #include <asm/atomic.h>
6 #include <asm/resource.h>
8 /* context sub struct */
12 #define VLIMIT_NSOCK 16
15 extern const char *vlimit_name[NUM_LIMITS];
20 unsigned long rlim[NUM_LIMITS]; /* Context limit */
21 unsigned long rmax[NUM_LIMITS]; /* Context maximum */
22 atomic_t rcur[NUM_LIMITS]; /* Current value */
23 atomic_t lhit[NUM_LIMITS]; /* Limit hits */
26 static inline void vx_info_init_limit(struct _vx_limit *limit)
30 for (lim=0; lim<NUM_LIMITS; lim++) {
31 limit->rlim[lim] = RLIM_INFINITY;
33 atomic_set(&limit->rcur[lim], 0);
34 atomic_set(&limit->lhit[lim], 0);
38 static inline void vx_info_exit_limit(struct _vx_limit *limit)
40 #ifdef CONFIG_VSERVER_DEBUG
44 for (lim=0; lim<NUM_LIMITS; lim++) {
45 value = atomic_read(&limit->rcur[lim]);
47 printk("!!! limit: %p[%s,%d] = %ld on exit.\n",
48 limit, vlimit_name[lim], lim, value);
53 static inline void vx_limit_fixup(struct _vx_limit *limit)
58 for (lim=0; lim<NUM_LIMITS; lim++) {
59 value = atomic_read(&limit->rcur[lim]);
60 if (value > limit->rmax[lim])
61 limit->rmax[lim] = value;
62 if (limit->rmax[lim] > limit->rlim[lim])
63 limit->rmax[lim] = limit->rlim[lim];
67 #define VX_LIMIT_FMT ":\t%10d\t%10ld\t%10ld\t%6d\n"
69 #define VX_LIMIT_ARG(r) \
70 ,atomic_read(&limit->rcur[r]) \
73 ,atomic_read(&limit->lhit[r])
75 static inline int vx_info_proc_limit(struct _vx_limit *limit, char *buffer)
77 vx_limit_fixup(limit);
78 return sprintf(buffer,
85 VX_LIMIT_ARG(RLIMIT_NPROC)
86 VX_LIMIT_ARG(RLIMIT_AS)
87 VX_LIMIT_ARG(RLIMIT_MEMLOCK)
88 VX_LIMIT_ARG(RLIMIT_RSS)
89 VX_LIMIT_ARG(RLIMIT_NOFILE)
90 VX_LIMIT_ARG(VLIMIT_NSOCK)
94 #else /* _VX_INFO_DEF_ */
100 #define VXD_RLIMIT(r,l) (VXD_CBIT(limit, (l)) && ((r) == (l)))
102 /* rlimit vserver commands */
104 #define VCMD_get_rlimit VC_CMD(RLIMIT, 1, 0)
105 #define VCMD_set_rlimit VC_CMD(RLIMIT, 2, 0)
106 #define VCMD_get_rlimit_mask VC_CMD(RLIMIT, 3, 0)
108 struct vcmd_ctx_rlimit_v0 {
115 struct vcmd_ctx_rlimit_mask_v0 {
121 #define CRLIM_UNSET (0ULL)
122 #define CRLIM_INFINITY (~0ULL)
123 #define CRLIM_KEEP (~1ULL)
127 #include <linux/compiler.h>
129 extern int vc_get_rlimit(uint32_t, void __user *);
130 extern int vc_set_rlimit(uint32_t, void __user *);
131 extern int vc_get_rlimit_mask(uint32_t, void __user *);
135 void vx_vsi_meminfo(struct sysinfo *);
136 void vx_vsi_swapinfo(struct sysinfo *);
139 #endif /* __KERNEL__ */
141 #endif /* _VX_LIMIT_H */