[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH V2 10/25] tools/libxl: create vIOMMU during domain construction
From: Chao Gao <chao.gao@xxxxxxxxx> If guest is configured to have a vIOMMU, create it during domain construction. Signed-off-by: Chao Gao <chao.gao@xxxxxxxxx> Signed-off-by: Lan Tianyu <tianyu.lan@xxxxxxxxx> --- tools/libxl/libxl_x86.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tools/libxl/libxl_x86.c b/tools/libxl/libxl_x86.c index 455f6f0..ace20e5 100644 --- a/tools/libxl/libxl_x86.c +++ b/tools/libxl/libxl_x86.c @@ -341,8 +341,36 @@ int libxl__arch_domain_create(libxl__gc *gc, libxl_domain_config *d_config, if (d_config->b_info.type == LIBXL_DOMAIN_TYPE_HVM) { unsigned long shadow = DIV_ROUNDUP(d_config->b_info.shadow_memkb, 1024); + libxl_viommu_info *viommu = &d_config->b_info.viommu; + xc_shadow_control(ctx->xch, domid, XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION, NULL, 0, &shadow, 0, NULL); + + /* Check supported capbilities and create viommu */ + if (viommu->type) { + uint32_t id; + uint64_t cap; + + if (xc_viommu_query_cap(ctx->xch, domid, viommu->type, &cap)) { + LOGED(ERROR, domid, "failed to query vIOMMU's capabilities"); + ret = ERROR_FAIL; + goto out; + } + + if ((cap & viommu->cap) != viommu->cap) { + LOGED(ERROR, domid, "vIOMMU: Unsupported cap %"PRIu64, cap); + ret = ERROR_FAIL; + goto out; + } + + ret = xc_viommu_create(ctx->xch, domid, viommu->type, + viommu->base_addr, viommu->len, viommu->cap, &id); + if (ret) { + LOGED(ERROR, domid, "create vIOMMU fail"); + ret = ERROR_FAIL; + goto out; + } + } } if (d_config->c_info.type == LIBXL_DOMAIN_TYPE_PV && -- 1.8.3.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |