1 #ifndef _VX_LIMIT_INT_H
2 #define _VX_LIMIT_INT_H
7 #define VXD_RCRES_COND(r) VXD_CBIT(cres, (r))
8 #define VXD_RLIMIT_COND(r) VXD_CBIT(limit, (r))
10 extern const char *vlimit_name[NUM_LIMITS];
12 static inline void __vx_acc_cres(struct vx_info *vxi,
13 int res, int dir, void *_data, char *_file, int _line)
15 if (VXD_RCRES_COND(res))
16 vxlprintk(1, "vx_acc_cres[%5d,%s,%2d]: %5ld%s (%p)",
17 (vxi ? vxi->vx_id : -1), vlimit_name[res], res,
18 (vxi ? (long)__rlim_get(&vxi->limit, res) : 0),
19 (dir > 0) ? "++" : "--", _data, _file, _line);
24 __rlim_inc(&vxi->limit, res);
26 __rlim_dec(&vxi->limit, res);
29 static inline void __vx_add_cres(struct vx_info *vxi,
30 int res, int amount, void *_data, char *_file, int _line)
32 if (VXD_RCRES_COND(res))
33 vxlprintk(1, "vx_add_cres[%5d,%s,%2d]: %5ld += %5d (%p)",
34 (vxi ? vxi->vx_id : -1), vlimit_name[res], res,
35 (vxi ? (long)__rlim_get(&vxi->limit, res) : 0),
36 amount, _data, _file, _line);
41 __rlim_add(&vxi->limit, res, amount);
44 static inline int __vx_cres_avail(struct vx_info *vxi,
45 int res, int num, char *_file, int _line)
49 if (VXD_RLIMIT_COND(res))
50 vxlprintk(1, "vx_cres_avail[%5d,%s,%2d]: %5ld/%5ld > %5ld + %5d",
51 (vxi ? vxi->vx_id : -1), vlimit_name[res], res,
52 (vxi ? (long)__rlim_soft(&vxi->limit, res) : -1),
53 (vxi ? (long)__rlim_hard(&vxi->limit, res) : -1),
54 (vxi ? (long)__rlim_get(&vxi->limit, res) : 0),
61 value = __rlim_get(&vxi->limit, res);
63 if (value > __rlim_rmax(&vxi->limit, res))
64 __rlim_rmax(&vxi->limit, res) = value;
65 else if (value < __rlim_rmin(&vxi->limit, res))
66 __rlim_rmin(&vxi->limit, res) = value;
68 if (__rlim_soft(&vxi->limit, res) == RLIM_INFINITY)
70 if (value + num <= __rlim_soft(&vxi->limit, res))
73 if (__rlim_hard(&vxi->limit, res) == RLIM_INFINITY)
75 if (value + num <= __rlim_hard(&vxi->limit, res))
78 __rlim_hit(&vxi->limit, res);
82 #endif /* __KERNEL__ */
83 #endif /* _VX_LIMIT_INT_H */