vshost-util-vserver

Build script and sources for util-vserver.
git clone https://ccx.te2000.cz/git/vshost-util-vserver
Log | Files | Refs

syscall_rlimit-v11.hc (2236B)


      1 // $Id$    --*- c++ -*--
      2 
      3 // Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
      4 //  
      5 // This program is free software; you can redistribute it and/or modify
      6 // it under the terms of the GNU General Public License as published by
      7 // the Free Software Foundation; version 2 of the License.
      8 //  
      9 // This program is distributed in the hope that it will be useful,
     10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
     11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     12 // GNU General Public License for more details.
     13 //  
     14 // You should have received a copy of the GNU General Public License
     15 // along with this program; if not, write to the Free Software
     16 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     17 
     18 
     19 #ifdef HAVE_CONFIG_H
     20 #  include <config.h>
     21 #endif
     22 
     23 #define KERN2USR(LIMIT) \
     24   (((LIMIT)==CRLIM_INFINITY)  ? VC_LIM_INFINITY :		\
     25    ((LIMIT)==CRLIM_KEEP)      ? VC_LIM_KEEP     : (LIMIT))
     26 
     27 #define USR2KERN(LIMIT) \
     28   (((LIMIT)==VC_LIM_INFINITY) ? CRLIM_INFINITY :		\
     29    ((LIMIT)==VC_LIM_KEEP)     ? CRLIM_KEEP     : (LIMIT))
     30 
     31 static inline ALWAYSINLINE int
     32 vc_get_rlimit_v11(xid_t ctx, int resource, struct vc_rlimit *lim)
     33 {
     34   struct vcmd_ctx_rlimit_v0	vc_lim;
     35   int				rc;
     36 
     37   vc_lim.id        = resource;
     38   rc = vserver(VCMD_get_rlimit, CTX_USER2KERNEL(ctx), &vc_lim);
     39   lim->min  = KERN2USR(vc_lim.minimum);
     40   lim->soft = KERN2USR(vc_lim.softlimit);
     41   lim->hard = KERN2USR(vc_lim.maximum);
     42 
     43   return rc;
     44 }
     45 
     46 static inline ALWAYSINLINE int
     47 vc_set_rlimit_v11(xid_t ctx, int resource, struct vc_rlimit const *lim)
     48 {
     49   struct vcmd_ctx_rlimit_v0	vc_lim;
     50 
     51   vc_lim.id        = resource;
     52   vc_lim.minimum   = USR2KERN(lim->min);
     53   vc_lim.softlimit = USR2KERN(lim->soft);
     54   vc_lim.maximum   = USR2KERN(lim->hard);
     55 
     56   return vserver(VCMD_set_rlimit, CTX_USER2KERNEL(ctx), &vc_lim);
     57 }
     58 
     59 static inline ALWAYSINLINE int
     60 vc_get_rlimit_mask_v11(xid_t ctx, int UNUSED tmp, struct vc_rlimit_mask *lim)
     61 {
     62   struct vcmd_ctx_rlimit_mask_v0	vc_lim;
     63   int					rc;
     64 
     65   rc = vserver(VCMD_get_rlimit_mask, CTX_USER2KERNEL(ctx), &vc_lim);
     66 
     67   lim->min  = vc_lim.minimum;
     68   lim->soft = vc_lim.softlimit;
     69   lim->hard = vc_lim.maximum;
     70 
     71   return rc;
     72 }
     73 
     74 #undef KERN2USR
     75 #undef USR2KERN