sched.c

Go to the documentation of this file.
00001 // Copyright 2005-2006 Benedikt Böhm <hollow@gentoo.org>
00002 //
00003 // This program is free software; you can redistribute it and/or modify
00004 // it under the terms of the GNU General Public License as published by
00005 // the Free Software Foundation; either version 2 of the License, or
00006 // (at your option) any later version.
00007 //
00008 // This program is distributed in the hope that it will be useful,
00009 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00010 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00011 // GNU General Public License for more details.
00012 //
00013 // You should have received a copy of the GNU General Public License
00014 // along with this program; if not, write to the
00015 // Free Software Foundation, Inc.,
00016 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00017 
00018 #include <errno.h>
00019 
00020 #include "vserver.h"
00021 
00022 #include "linux/vserver/switch.h"
00023 #include "linux/vserver/sched_cmd.h"
00024 
00025 int vx_sched_get(xid_t xid, vx_sched_t *data)
00026 {
00027         struct vcmd_sched_v5 kdata;
00028 
00029         if (!data)
00030                 return errno = EINVAL, -1;
00031 
00032         kdata.cpu_id    = data->cpu_id;
00033         kdata.bucket_id = data->bucket_id;
00034         kdata.mask      = data->mask;
00035 
00036         int rc = vserver(VCMD_get_sched, xid, &kdata);
00037 
00038         if (rc == -1)
00039                 return -1;
00040 
00041         data->fill_rate[0] = kdata.fill_rate[0];
00042         data->fill_rate[1] = kdata.fill_rate[1];
00043         data->interval[0]  = kdata.interval[0];
00044         data->interval[1]  = kdata.interval[1];
00045         data->tokens       = kdata.tokens;
00046         data->tokens_min   = kdata.tokens_min;
00047         data->tokens_max   = kdata.tokens_max;
00048         data->prio_bias    = kdata.prio_bias;
00049 
00050         return rc;
00051 }
00052 
00053 int vx_sched_set(xid_t xid, vx_sched_t *data)
00054 {
00055         struct vcmd_sched_v5 kdata;
00056 
00057         if (!data)
00058                 return errno = EINVAL, -1;
00059 
00060         kdata.mask         = data->mask;
00061         kdata.cpu_id       = data->cpu_id;
00062         kdata.fill_rate[0] = data->fill_rate[0];
00063         kdata.fill_rate[1] = data->fill_rate[1];
00064         kdata.interval[0]  = data->interval[0];
00065         kdata.interval[1]  = data->interval[1];
00066         kdata.tokens       = data->tokens;
00067         kdata.tokens_min   = data->tokens_min;
00068         kdata.tokens_max   = data->tokens_max;
00069         kdata.prio_bias    = data->prio_bias;
00070 
00071         return vserver(VCMD_set_sched, xid, &kdata);
00072 }
00073 
00074 int vx_sched_info(xid_t xid, vx_sched_info_t *data)
00075 {
00076         struct vcmd_sched_info kdata;
00077 
00078         if (!data)
00079                 return errno = EINVAL, -1;
00080 
00081         kdata.cpu_id = data->cpu_id;
00082         kdata.bucket_id = data->bucket_id;
00083 
00084         int rc = vserver(VCMD_sched_info, xid, &kdata);
00085 
00086         if (rc == -1)
00087                 return -1;
00088 
00089         data->user_msec  = kdata.user_msec;
00090         data->sys_msec   = kdata.sys_msec;
00091         data->hold_msec  = kdata.hold_msec;
00092         data->token_usec = kdata.token_usec;
00093         data->vavavoom   = kdata.vavavoom;
00094 
00095         return rc;
00096 }

Generated on Wed Jun 20 19:50:08 2007 for libvserver by  doxygen 1.5.2