From 93fd67e8c6f4854fccfc50aee4197f2a9e47e1ad Mon Sep 17 00:00:00 2001 From: Meng Xu Date: Sat, 20 Sep 2014 18:14:18 -0400 Subject: [PATCH] libxc: add rtds scheduler Add xc_sched_rtds_* functions to interact with Xen to set/get domain's parameters for rtds scheduler. Note: VCPU's information (period, budget) is in microsecond (us). Signed-off-by: Meng Xu Signed-off-by: Sisu Xi Reviewed-by: Dario Faggioli Acked-by: Ian Campbell Acked-by: George Dunlap [ ijc -- xenctrl.h has moved to tools/libxc/include, adjust patch to match ] --- tools/libxc/Makefile | 1 + tools/libxc/include/xenctrl.h | 7 ++++ tools/libxc/xc_rt.c | 65 +++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 tools/libxc/xc_rt.c diff --git a/tools/libxc/Makefile b/tools/libxc/Makefile index c4843212d4..8e960fac57 100644 --- a/tools/libxc/Makefile +++ b/tools/libxc/Makefile @@ -20,6 +20,7 @@ CTRL_SRCS-y += xc_sedf.c CTRL_SRCS-y += xc_csched.c CTRL_SRCS-y += xc_csched2.c CTRL_SRCS-y += xc_arinc653.c +CTRL_SRCS-y += xc_rt.c CTRL_SRCS-y += xc_tbuf.c CTRL_SRCS-y += xc_pm.c CTRL_SRCS-y += xc_cpu_hotplug.c diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h index 514b24139b..2aa86ebd21 100644 --- a/tools/libxc/include/xenctrl.h +++ b/tools/libxc/include/xenctrl.h @@ -875,6 +875,13 @@ int xc_sched_credit2_domain_get(xc_interface *xch, uint32_t domid, struct xen_domctl_sched_credit2 *sdom); +int xc_sched_rtds_domain_set(xc_interface *xch, + uint32_t domid, + struct xen_domctl_sched_rtds *sdom); +int xc_sched_rtds_domain_get(xc_interface *xch, + uint32_t domid, + struct xen_domctl_sched_rtds *sdom); + int xc_sched_arinc653_schedule_set( xc_interface *xch, diff --git a/tools/libxc/xc_rt.c b/tools/libxc/xc_rt.c new file mode 100644 index 0000000000..b2d1cc5ac7 --- /dev/null +++ b/tools/libxc/xc_rt.c @@ -0,0 +1,65 @@ +/**************************************************************************** + * + * File: xc_rt.c + * Author: Sisu Xi + * Meng Xu + * + * Description: XC Interface to the rtds scheduler + * Note: VCPU's parameter (period, budget) is in microsecond (us). + * All VCPUs of the same domain have same period and budget. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "xc_private.h" + +int xc_sched_rtds_domain_set(xc_interface *xch, + uint32_t domid, + struct xen_domctl_sched_rtds *sdom) +{ + int rc; + DECLARE_DOMCTL; + + domctl.cmd = XEN_DOMCTL_scheduler_op; + domctl.domain = (domid_t) domid; + domctl.u.scheduler_op.sched_id = XEN_SCHEDULER_RTDS; + domctl.u.scheduler_op.cmd = XEN_DOMCTL_SCHEDOP_putinfo; + domctl.u.scheduler_op.u.rtds.period = sdom->period; + domctl.u.scheduler_op.u.rtds.budget = sdom->budget; + + rc = do_domctl(xch, &domctl); + + return rc; +} + +int xc_sched_rtds_domain_get(xc_interface *xch, + uint32_t domid, + struct xen_domctl_sched_rtds *sdom) +{ + int rc; + DECLARE_DOMCTL; + + domctl.cmd = XEN_DOMCTL_scheduler_op; + domctl.domain = (domid_t) domid; + domctl.u.scheduler_op.sched_id = XEN_SCHEDULER_RTDS; + domctl.u.scheduler_op.cmd = XEN_DOMCTL_SCHEDOP_getinfo; + + rc = do_domctl(xch, &domctl); + + if ( rc == 0 ) + *sdom = domctl.u.scheduler_op.u.rtds; + + return rc; +} -- 2.39.5