[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v11 3/9] tools: provide interface for generic MSR access
On Fri, Jun 20, 2014 at 10:31:44PM +0800, Dongxiao Xu wrote: > Xen added a new sysctl hypercall for generic MSR access, and this is the > tool side change to wrapper the hypercall into xc APIs. > I really like the idea that Jan surfaced. That is use an cpu bitmap for the operation (see xc_tbuf.c as an example) and my recent postings http://osdir.com/ml/general/2014-06/msg24386.html. That way you can define exactly which CPUs you want to do it at and you can do one nice hypercall that will do it all at once for you. > Signed-off-by: Dongxiao Xu <dongxiao.xu@xxxxxxxxx> > --- > tools/libxc/Makefile | 1 + > tools/libxc/xc_msr_x86.c | 53 > ++++++++++++++++++++++++++++++++++++++++++++++++ > tools/libxc/xenctrl.h | 6 ++++++ > 3 files changed, 60 insertions(+) > create mode 100644 tools/libxc/xc_msr_x86.c > > diff --git a/tools/libxc/Makefile b/tools/libxc/Makefile > index a74b19e..fec4aca 100644 > --- a/tools/libxc/Makefile > +++ b/tools/libxc/Makefile > @@ -35,6 +35,7 @@ CTRL_SRCS-y += xc_kexec.c > CTRL_SRCS-y += xtl_core.c > CTRL_SRCS-y += xtl_logger_stdio.c > CTRL_SRCS-$(CONFIG_X86) += xc_pagetab.c > +CTRL_SRCS-$(CONFIG_X86) += xc_msr_x86.c > CTRL_SRCS-$(CONFIG_Linux) += xc_linux.c xc_linux_osdep.c > CTRL_SRCS-$(CONFIG_SunOS) += xc_solaris.c > CTRL_SRCS-$(CONFIG_NetBSD) += xc_netbsd.c > diff --git a/tools/libxc/xc_msr_x86.c b/tools/libxc/xc_msr_x86.c > new file mode 100644 > index 0000000..46e77dd > --- /dev/null > +++ b/tools/libxc/xc_msr_x86.c > @@ -0,0 +1,53 @@ > +/* > + * xc_msr_x86.c > + * > + * Generic MSR access API > + * > + * Copyright (C) 2014 Intel Corporation > + * Author Dongxiao Xu <dongxiao.xu@xxxxxxxxx> > + * > + * This program 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 only. with the special > + * exception on linking described in file LICENSE. > + * > + * This program 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. > + */ > + > +#include "xc_private.h" > + > +int xc_msr_op(xc_interface *xch, uint32_t cpu, > + uint32_t nr_ops, xc_msr_data_t *msr_data) > +{ > + int rc; > + DECLARE_SYSCTL; > + DECLARE_HYPERCALL_BOUNCE(msr_data, nr_ops * sizeof(*msr_data), > + XC_HYPERCALL_BUFFER_BOUNCE_BOTH); > + > + if ( xc_hypercall_bounce_pre(xch, msr_data) ) > + return -1; > + > + sysctl.cmd = XEN_SYSCTL_msr_op; > + sysctl.u.msr_op.nr_ops = nr_ops; > + sysctl.u.msr_op.cpu = cpu; > + set_xen_guest_handle(sysctl.u.msr_op.msr_data, msr_data); > + > + rc = do_sysctl(xch, &sysctl); > + > + xc_hypercall_bounce_post(xch, msr_data); > + > + return rc; > +} > + > +/* > + * Local variables: > + * mode: C > + * c-file-style: "BSD" > + * c-basic-offset: 4 > + * tab-width: 4 > + * indent-tabs-mode: nil > + * End: > + */ > diff --git a/tools/libxc/xenctrl.h b/tools/libxc/xenctrl.h > index 02129f7..50625ca 100644 > --- a/tools/libxc/xenctrl.h > +++ b/tools/libxc/xenctrl.h > @@ -2424,4 +2424,10 @@ int xc_kexec_load(xc_interface *xch, uint8_t type, > uint16_t arch, > */ > int xc_kexec_unload(xc_interface *xch, int type); > > +#if defined(__i386__) || defined(__x86_64__) > +typedef xen_sysctl_msr_data_t xc_msr_data_t; > +int xc_msr_op(xc_interface *xch, uint32_t cpu, > + uint32_t nr_ops, xc_msr_data_t *msr_data); > +#endif > + > #endif /* XENCTRL_H */ > -- > 1.8.1.5 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |