From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dario Faggioli Subject: [PATCH 2 of 2 v2] xl: check for meaningful combination of sedf config file parameters Date: Thu, 07 Jun 2012 15:42:33 +0200 Message-ID: <2a35be0bef3f16b8f136.1339076553@Solace> References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: George Dunlap , Juergen Gross , Ian Jackson , Ian Campbell List-Id: xen-devel@lists.xenproject.org As it happens in the implementation of `xl sched-sedf -d ...', some consistency checking is needed for the scheduling parameters when they come from the config file. Signed-off-by: Dario Faggioli diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -550,6 +550,31 @@ vcpp_out: return rc; } +static int sched_params_valid(libxl_domain_sched_params *scp) +{ + int has_weight = scp->weight != LIBXL_DOMAIN_SCHED_PARAM_WEIGHT_DEFAULT; + int has_period = scp->period != LIBXL_DOMAIN_SCHED_PARAM_PERIOD_DEFAULT; + int has_slice = scp->slice != LIBXL_DOMAIN_SCHED_PARAM_SLICE_DEFAULT; + libxl_domain_sched_params sci; + + libxl_domain_sched_params_get(ctx, domid, &sci); + + /* The sedf scheduler needs some more consistency checking */ + if (sci.sched == LIBXL_SCHEDULER_SEDF) { + if (has_weight && (has_period || has_slice)) + return 0; + + if (has_weight) { + scp->slice = 0; + scp->period = 0; + } + if (has_period || has_slice) + scp->weight = 0; + } + + return 1; +} + static void parse_config_data(const char *config_source, const char *config_data, int config_len, @@ -644,6 +669,10 @@ static void parse_config_data(const char b_info->sched_params.latency = l; if (!xlu_cfg_get_long (config, "extratime", &l, 0)) b_info->sched_params.extratime = l; + if (!sched_params_valid(&b_info->sched_params)) { + fprintf(stderr, "Invalid scheduling parameters\n"); + exit(1); + } if (!xlu_cfg_get_long (config, "vcpus", &l, 0)) { b_info->max_vcpus = l;