[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V2 5/25] tools/libxc: Add viommu operations in libxc
On Wed, Aug 09, 2017 at 04:34:06PM -0400, Lan Tianyu wrote: > From: Chao Gao <chao.gao@xxxxxxxxx> > > This patch adds XEN_DOMCTL_viommu_op hypercall. This hypercall > comprises three sub-command: ^ s > - query capabilities of one specific type vIOMMU emulated by Xen ^ of > - create vIOMMU in Xen hypervisor, given viommu type, register-set location ^ a ^s/hypervisor// > and capabilities > - destroy vIOMMU specified by viommu_id ^ a > > Signed-off-by: Chao Gao <chao.gao@xxxxxxxxx> > Signed-off-by: Lan Tianyu <tianyu.lan@xxxxxxxxx> > --- > tools/libxc/Makefile | 1 + > tools/libxc/include/xenctrl.h | 8 +++++ > tools/libxc/xc_viommu.c | 81 > +++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 90 insertions(+) > create mode 100644 tools/libxc/xc_viommu.c > > diff --git a/tools/libxc/Makefile b/tools/libxc/Makefile > index 28b1857..8724df5 100644 > --- a/tools/libxc/Makefile > +++ b/tools/libxc/Makefile > @@ -51,6 +51,7 @@ CTRL_SRCS-$(CONFIG_MiniOS) += xc_minios.c > CTRL_SRCS-y += xc_evtchn_compat.c > CTRL_SRCS-y += xc_gnttab_compat.c > CTRL_SRCS-y += xc_devicemodel_compat.c > +CTRL_SRCS-y += xc_viommu.c > > GUEST_SRCS-y := > GUEST_SRCS-y += xg_private.c xc_suspend.c > diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h > index bde8313..dfaa9d5 100644 > --- a/tools/libxc/include/xenctrl.h > +++ b/tools/libxc/include/xenctrl.h > @@ -27,6 +27,7 @@ > #define __XEN_TOOLS__ 1 > #endif > > +#include <errno.h> I don't see the need for this include. > #include <unistd.h> > #include <stddef.h> > #include <stdint.h> > @@ -2499,6 +2500,13 @@ enum xc_static_cpu_featuremask { > const uint32_t *xc_get_static_cpu_featuremask(enum > xc_static_cpu_featuremask); > const uint32_t *xc_get_feature_deep_deps(uint32_t feature); > > +int xc_viommu_query_cap(xc_interface *xch, domid_t dom, > + uint64_t type, uint64_t *cap); > +int xc_viommu_create(xc_interface *xch, domid_t dom, uint64_t type, > + uint64_t base_addr, uint64_t length, uint64_t cap, > + uint32_t *viommu_id); > +int xc_viommu_destroy(xc_interface *xch, domid_t dom, uint32_t viommu_id); > + > #endif > > int xc_livepatch_upload(xc_interface *xch, > diff --git a/tools/libxc/xc_viommu.c b/tools/libxc/xc_viommu.c > new file mode 100644 > index 0000000..04aae96 > --- /dev/null > +++ b/tools/libxc/xc_viommu.c > @@ -0,0 +1,81 @@ > +/* > + * xc_viommu.c > + * > + * viommu related API functions. > + * > + * Copyright (C) 2017 Intel Corporation > + * > + * This library is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License, version 2.1, as published by the Free Software Foundation. > + * > + * 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, see > <http://www.gnu.org/licenses/>. > + */ > + > +#include "xc_private.h" > + > +int xc_viommu_query_cap(xc_interface *xch, domid_t dom, > + uint64_t type, uint64_t *cap) > +{ > + int rc; > + DECLARE_DOMCTL; > + > + domctl.cmd = XEN_DOMCTL_viommu_op; > + domctl.domain = (domid_t)dom; Pointless cast. > + domctl.u.viommu_op.cmd = XEN_DOMCTL_query_viommu_caps; > + domctl.u.viommu_op.u.query_caps.viommu_type = type; > + > + rc = do_domctl(xch, &domctl); > + if ( !rc ) > + *cap = domctl.u.viommu_op.u.query_caps.capabilities; > + return rc; > +} > + > +int xc_viommu_create(xc_interface *xch, domid_t dom, uint64_t type, > + uint64_t base_addr, uint64_t length, uint64_t cap, > + uint32_t *viommu_id) > +{ > + int rc; > + DECLARE_DOMCTL; > + > + domctl.cmd = XEN_DOMCTL_viommu_op; > + domctl.domain = (domid_t)dom; Pointless cast. > + domctl.u.viommu_op.cmd = XEN_DOMCTL_create_viommu; > + domctl.u.viommu_op.u.create_viommu.viommu_type = type; > + domctl.u.viommu_op.u.create_viommu.base_address = base_addr; > + domctl.u.viommu_op.u.create_viommu.length = length; > + domctl.u.viommu_op.u.create_viommu.capabilities = cap; > + > + rc = do_domctl(xch, &domctl); > + if ( !rc ) > + *viommu_id = domctl.u.viommu_op.u.create_viommu.viommu_id; > + return rc; > +} > + > +int xc_viommu_destroy(xc_interface *xch, domid_t dom, uint32_t viommu_id) > +{ > + DECLARE_DOMCTL; > + > + domctl.cmd = XEN_DOMCTL_viommu_op; > + domctl.domain = (domid_t)dom; > + domctl.u.viommu_op.cmd = XEN_DOMCTL_destroy_viommu; > + domctl.u.viommu_op.u.destroy_viommu.viommu_id = viommu_id; > + > + return do_domctl(xch, &domctl); > +} > + > +/* > + * Local variables: > + * mode: C > + * c-file-style: "BSD" > + * c-basic-offset: 4 > + * tab-width: 4 > + * indent-tabs-mode: nil > + * End: > + */ > -- > 1.8.3.1 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > https://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |