From: Daniel Hokka Zakrisson Date: Sun, 5 Nov 2006 17:48:24 +0000 (+0000) Subject: Set svn:keywords. X-Git-Tag: release-0.30.212~51 X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=df9b64342dac0b2120e3912bdb13993eee35de0c;p=util-vserver.git Set svn:keywords. Fix the vc_set_sched API to make more sense, and handle the logic in the wrapper. git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2372 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- diff --git a/lib/syscall_setsched-v21.hc b/lib/syscall_setsched-v21.hc index e89e480..24b5977 100644 --- a/lib/syscall_setsched-v21.hc +++ b/lib/syscall_setsched-v21.hc @@ -26,8 +26,8 @@ static inline ALWAYSINLINE int vc_set_sched_v21(xid_t xid, struct vc_set_sched const *data) { struct vcmd_set_sched_v4 k_data; + int ret; - k_data.set_mask = data->set_mask; k_data.fill_rate = data->fill_rate; k_data.interval = data->interval; k_data.tokens = data->tokens; @@ -37,5 +37,21 @@ vc_set_sched_v21(xid_t xid, struct vc_set_sched const *data) k_data.cpu_id = data->cpu_id; k_data.bucket_id = data->bucket_id; - return vserver(VCMD_set_sched, CTX_USER2KERNEL(xid), &k_data); + if ((data->set_mask & VC_VXSM_FILL_RATE2 && data->fill_rate != data->fill_rate2) || + (data->set_mask & VC_VXSM_INTERVAL2 && data->interval != data->interval2)) { + /* first set the regular values */ + k_data.set_mask = data->set_mask & ~(VC_VXSM_FILL_RATE2|VC_VXSM_INTERVAL2|VC_VXSM_FORCE); + ret = vserver(VCMD_set_sched, CTX_USER2KERNEL(xid), &k_data); + if (ret) + return ret; + /* then set idle time */ + k_data.set_mask = data->set_mask & (VC_VXSM_FILL_RATE2|VC_VXSM_INTERVAL2|VC_VXSM_FORCE|VC_VXSM_IDLE_TIME|VC_VXSM_CPU_ID|VC_VXSM_BUCKET_ID); + k_data.fill_rate = data->fill_rate2; + k_data.interval = data->interval2; + return vserver(VCMD_set_sched, CTX_USER2KERNEL(xid), &k_data); + } + else { + k_data.set_mask = data->set_mask; + return vserver(VCMD_set_sched, CTX_USER2KERNEL(xid), &k_data); + } } diff --git a/lib/vserver.h b/lib/vserver.h index b704b17..105c0df 100644 --- a/lib/vserver.h +++ b/lib/vserver.h @@ -706,6 +706,8 @@ extern "C" { uint_least32_t set_mask; int_least32_t fill_rate; int_least32_t interval; + int_least32_t fill_rate2; + int_least32_t interval2; int_least32_t tokens; int_least32_t tokens_min; int_least32_t tokens_max;