[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC v2 2/4] libxc: add rt scheduler
Add xc_sched_rt_* functions to interact with Xen to set/get domain's parameters for rt scheduler. Signed-off-by: Sisu Xi <xisisu@xxxxxxxxx> Signed-off-by: Meng Xu <mengxu@xxxxxxxxxxxxx> --- tools/libxc/Makefile | 1 + tools/libxc/xc_rt.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++++ tools/libxc/xenctrl.h | 12 +++++++ 3 files changed, 102 insertions(+) create mode 100644 tools/libxc/xc_rt.c diff --git a/tools/libxc/Makefile b/tools/libxc/Makefile index 22eef8e..c2b02a4 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/xc_rt.c b/tools/libxc/xc_rt.c new file mode 100644 index 0000000..74a1c3e --- /dev/null +++ b/tools/libxc/xc_rt.c @@ -0,0 +1,89 @@ +/**************************************************************************** + * + * File: xc_rt.c + * Author: Sisu Xi + * Meng Xu + * + * Description: XC Interface to the rt scheduler + * + * 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_rt_domain_set(xc_interface *xch, + uint32_t domid, + struct xen_domctl_sched_rt_params *sdom) +{ + int rc; + DECLARE_DOMCTL; + + domctl.cmd = XEN_DOMCTL_scheduler_op; + domctl.domain = (domid_t) domid; + domctl.u.scheduler_op.sched_id = XEN_SCHEDULER_RT_DS; + domctl.u.scheduler_op.cmd = XEN_DOMCTL_SCHEDOP_putinfo; + domctl.u.scheduler_op.u.rt.vcpu_index = sdom->index; + domctl.u.scheduler_op.u.rt.period = sdom->period; + domctl.u.scheduler_op.u.rt.budget = sdom->budget; + + rc = do_domctl(xch, &domctl); + + return rc; +} + +int xc_sched_rt_domain_get(xc_interface *xch, + uint32_t domid, + struct xen_domctl_sched_rt_params *sdom, + uint16_t num_vcpus) +{ + int rc; + DECLARE_DOMCTL; + DECLARE_HYPERCALL_BOUNCE(sdom, + sizeof(*sdom) * num_vcpus, + XC_HYPERCALL_BUFFER_BOUNCE_OUT); + + if ( xc_hypercall_bounce_pre(xch, sdom) ) + return -1; + + domctl.cmd = XEN_DOMCTL_scheduler_op; + domctl.domain = (domid_t) domid; + domctl.u.scheduler_op.sched_id = XEN_SCHEDULER_RT_DS; + domctl.u.scheduler_op.cmd = XEN_DOMCTL_SCHEDOP_getinfo; + set_xen_guest_handle(domctl.u.scheduler_op.u.rt.vcpu, sdom); + + rc = do_domctl(xch, &domctl); + + xc_hypercall_bounce_post(xch, sdom); + + return rc; +} + +int xc_sched_rt_domain_get_num_vcpus(xc_interface *xch, + uint32_t domid, + uint16_t *num_vcpus) +{ + int rc; + DECLARE_DOMCTL; + + domctl.cmd = XEN_DOMCTL_scheduler_op; + domctl.domain = (domid_t) domid; + domctl.u.scheduler_op.sched_id = XEN_SCHEDULER_RT_DS; + domctl.u.scheduler_op.cmd = XEN_DOMCTL_SCHEDOP_getnumvcpus; + + rc = do_domctl(xch, &domctl); + + *num_vcpus = domctl.u.scheduler_op.u.rt.nr_vcpus; + return rc; +} diff --git a/tools/libxc/xenctrl.h b/tools/libxc/xenctrl.h index 5beb846..ca38a4f 100644 --- a/tools/libxc/xenctrl.h +++ b/tools/libxc/xenctrl.h @@ -875,6 +875,18 @@ int xc_sched_credit2_domain_get(xc_interface *xch, uint32_t domid, struct xen_domctl_sched_credit2 *sdom); +int xc_sched_rt_domain_set(xc_interface *xch, + uint32_t domid, + struct xen_domctl_sched_rt_params *sdom); +int xc_sched_rt_domain_get(xc_interface *xch, + uint32_t domid, + struct xen_domctl_sched_rt_params *sdom, + uint16_t num_vcpus); + +int xc_sched_rt_domain_get_num_vcpus(xc_interface *xch, + uint32_t domid, + uint16_t *num_vcpus); + int xc_sched_arinc653_schedule_set( xc_interface *xch, -- 1.7.9.5 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |