From 3ac4d896a1958b18198b2603f8ba60ad20aa2c86 Mon Sep 17 00:00:00 2001 From: Enrico Scholz Date: Wed, 22 Sep 2004 20:45:03 +0000 Subject: [PATCH] updated to new 'struct vcmd_set_sched_v3' added some optimizations git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@1694 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- util-vserver/lib/syscall_setsched-v13.hc | 45 +++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/util-vserver/lib/syscall_setsched-v13.hc b/util-vserver/lib/syscall_setsched-v13.hc index 7fa74aa..74cab17 100644 --- a/util-vserver/lib/syscall_setsched-v13.hc +++ b/util-vserver/lib/syscall_setsched-v13.hc @@ -21,18 +21,49 @@ #endif #include "vserver.h" +#include + +#define VCGET(MASK,VAL) ((data->set_mask & (MASK)) ? (VAL) : SCHED_KEEP); static inline ALWAYSINLINE int -vc_set_sched_v13(xid_t xid, struct vc_set_sched const *data) +vc_set_sched_v13obs(xid_t xid, struct vc_set_sched const *data) { +#warning vc_set_sched_v13() uses an obsolete interface; remove it in the final version struct vcmd_set_sched_v2 k_data; - k_data.fill_rate = data->fill_rate; - k_data.interval = data->interval; - k_data.tokens = data->tokens; - k_data.tokens_min = data->tokens_min; - k_data.tokens_max = data->tokens_max; - k_data.cpu_mask = data->cpu_mask; + + k_data.cpu_mask = 0; + k_data.fill_rate = VCGET(VC_VXSM_FILL_RATE, data->fill_rate); + k_data.interval = VCGET(VC_VXSM_INTERVAL, data->interval); + k_data.tokens = VCGET(VC_VXSM_TOKENS, data->tokens); + k_data.tokens_min = VCGET(VC_VXSM_TOKENS_MIN, data->tokens_min); + k_data.tokens_max = VCGET(VC_VXSM_TOKENS_MAX, data->tokens_max); return vserver(VCMD_set_sched, CTX_USER2KERNEL(xid), &k_data); } + +#define X(ATTR) ENSC_SAME_STRUCT_IDX(k_data, *data, ATTR) + +static inline ALWAYSINLINE int +vc_set_sched_v13b(xid_t xid, struct vc_set_sched const *data) +{ + struct vcmd_set_sched_v3 k_data; + + // This expression will be evaluated at compile-time + if (sizeof(struct vcmd_set_sched_v3)==sizeof(struct vc_set_sched) && + X(set_mask) && X(fill_rate) && X(interval) && X(tokens) && + X(tokens_min) && X(tokens_max) && X(priority_bias)) + return vserver(VCMD_set_sched, CTX_USER2KERNEL(xid), + const_cast(struct vc_set_sched *)(data)); + else { + k_data.set_mask = data->set_mask; + k_data.fill_rate = data->fill_rate; + k_data.interval = data->interval; + k_data.tokens = data->tokens; + k_data.tokens_min = data->tokens_min; + k_data.tokens_max = data->tokens_max; + k_data.priority_bias = data->priority_bias; + + return vserver(VCMD_set_sched, CTX_USER2KERNEL(xid), &k_data); + } +} -- 1.8.1.5