X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Flinux%2Fvserver%2Flimit.h;h=449a4fc178ddcc35d7c3b53a22d2cffcf6eaed42;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=d9e1eea015d7544943f27f973f3a4b19f5cbbf70;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/include/linux/vserver/limit.h b/include/linux/vserver/limit.h index d9e1eea01..449a4fc17 100644 --- a/include/linux/vserver/limit.h +++ b/include/linux/vserver/limit.h @@ -1,144 +1,23 @@ -/* _VX_LIMIT_H defined below */ - -#if defined(__KERNEL__) && defined(_VX_INFO_DEF_) - -#include -#include - -/* context sub struct */ - -#define NUM_LIMITS 20 - -#define VLIMIT_NSOCK 16 - - -extern const char *vlimit_name[NUM_LIMITS]; - -struct _vx_limit { - atomic_t ticks; - - unsigned long rlim[NUM_LIMITS]; /* Context limit */ - unsigned long rmax[NUM_LIMITS]; /* Context maximum */ - atomic_t rcur[NUM_LIMITS]; /* Current value */ - atomic_t lhit[NUM_LIMITS]; /* Limit hits */ -}; - -static inline void vx_info_init_limit(struct _vx_limit *limit) -{ - int lim; - - for (lim=0; limrlim[lim] = RLIM_INFINITY; - limit->rmax[lim] = 0; - atomic_set(&limit->rcur[lim], 0); - atomic_set(&limit->lhit[lim], 0); - } -} - -static inline void vx_info_exit_limit(struct _vx_limit *limit) -{ -#ifdef CONFIG_VSERVER_DEBUG - unsigned long value; - unsigned int lim; - - for (lim=0; limrcur[lim]); - if (value) - printk("!!! limit: %p[%s,%d] = %ld on exit.\n", - limit, vlimit_name[lim], lim, value); - } -#endif -} - -static inline void vx_limit_fixup(struct _vx_limit *limit) -{ - unsigned long value; - unsigned int lim; - - for (lim=0; limrcur[lim]); - if (value > limit->rmax[lim]) - limit->rmax[lim] = value; - if (limit->rmax[lim] > limit->rlim[lim]) - limit->rmax[lim] = limit->rlim[lim]; - } -} - -#define VX_LIMIT_FMT ":\t%10d\t%10ld\t%10ld\t%6d\n" - -#define VX_LIMIT_ARG(r) \ - ,atomic_read(&limit->rcur[r]) \ - ,limit->rmax[r] \ - ,limit->rlim[r] \ - ,atomic_read(&limit->lhit[r]) - -static inline int vx_info_proc_limit(struct _vx_limit *limit, char *buffer) -{ - vx_limit_fixup(limit); - return sprintf(buffer, - "PROC" VX_LIMIT_FMT - "VM" VX_LIMIT_FMT - "VML" VX_LIMIT_FMT - "RSS" VX_LIMIT_FMT - "FILES" VX_LIMIT_FMT - "SOCK" VX_LIMIT_FMT - VX_LIMIT_ARG(RLIMIT_NPROC) - VX_LIMIT_ARG(RLIMIT_AS) - VX_LIMIT_ARG(RLIMIT_MEMLOCK) - VX_LIMIT_ARG(RLIMIT_RSS) - VX_LIMIT_ARG(RLIMIT_NOFILE) - VX_LIMIT_ARG(VLIMIT_NSOCK) - ); -} - -#else /* _VX_INFO_DEF_ */ #ifndef _VX_LIMIT_H #define _VX_LIMIT_H -#include "switch.h" - -#define VXD_RLIMIT(r,l) (VXD_CBIT(limit, (l)) && ((r) == (l))) - -/* rlimit vserver commands */ - -#define VCMD_get_rlimit VC_CMD(RLIMIT, 1, 0) -#define VCMD_set_rlimit VC_CMD(RLIMIT, 2, 0) -#define VCMD_get_rlimit_mask VC_CMD(RLIMIT, 3, 0) - -struct vcmd_ctx_rlimit_v0 { - uint32_t id; - uint64_t minimum; - uint64_t softlimit; - uint64_t maximum; -}; - -struct vcmd_ctx_rlimit_mask_v0 { - uint32_t minimum; - uint32_t softlimit; - uint32_t maximum; -}; - -#define CRLIM_UNSET (0ULL) -#define CRLIM_INFINITY (~0ULL) -#define CRLIM_KEEP (~1ULL) - #ifdef __KERNEL__ -#include - -extern int vc_get_rlimit(uint32_t, void __user *); -extern int vc_set_rlimit(uint32_t, void __user *); -extern int vc_get_rlimit_mask(uint32_t, void __user *); - struct sysinfo; void vx_vsi_meminfo(struct sysinfo *); void vx_vsi_swapinfo(struct sysinfo *); +#define VXD_RLIMIT(r,l) (VXD_CBIT(limit, (l)) && ((r) == (l))) -#endif /* __KERNEL__ */ +#define NUM_LIMITS 24 -#endif /* _VX_LIMIT_H */ -#endif +#define VLIMIT_NSOCK 16 +#define VLIMIT_OPENFD 17 +#define VLIMIT_ANON 18 +#define VLIMIT_SHMEM 19 +extern const char *vlimit_name[NUM_LIMITS]; +#endif /* __KERNEL__ */ +#endif /* _VX_LIMIT_H */