[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH for-4.10 5/5] tools/dombuilder: Prevent failures of xc_dom_gnttab_init()
Recent changes in grant table configuration have caused calls to xc_dom_gnttab_init() to fail if not proceeded with a call to xc_domain_set_gnttab_limits(). This is backwards from the point of view of 3rd party dombuilder users. Add max_{grant,maptrack}_frames parameters to struct xc_dom_image, and require them to be set by callers using xc_dom_gnttab_init(). Libxl, which uses xc_dom_gnttab_init() itself is updated appropriately. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> CC: Wei Liu <wei.liu2@xxxxxxxxxx> CC: Julien Grall <julien.grall@xxxxxxx> --- tools/libxc/include/xc_dom.h | 4 ++++ tools/libxc/xc_dom_boot.c | 14 ++++++++++++++ tools/libxc/xc_dom_core.c | 3 +++ tools/libxl/libxl_dom.c | 12 ++++++------ 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/tools/libxc/include/xc_dom.h b/tools/libxc/include/xc_dom.h index 790869b..8e673fb 100644 --- a/tools/libxc/include/xc_dom.h +++ b/tools/libxc/include/xc_dom.h @@ -116,6 +116,10 @@ struct xc_dom_image { domid_t console_domid; domid_t xenstore_domid; + /* Grant limit configuration; mandatory if calling xc_dom_gnttab_init(). */ + unsigned int max_grant_frames; + unsigned int max_maptrack_frames; + /* * initrd parameters as specified in start_info page * Depending on capabilities of the booted kernel this may be a virtual diff --git a/tools/libxc/xc_dom_boot.c b/tools/libxc/xc_dom_boot.c index 8d4fefa..7cb9e40 100644 --- a/tools/libxc/xc_dom_boot.c +++ b/tools/libxc/xc_dom_boot.c @@ -419,6 +419,20 @@ int xc_dom_gnttab_hvm_seed(xc_interface *xch, domid_t domid, int xc_dom_gnttab_init(struct xc_dom_image *dom) { + int rc; + + if ( dom->max_grant_frames == -1 || dom->max_maptrack_frames == -1 ) + { + xc_dom_panic(dom->xch, XC_INVALID_PARAM, + "%s: Caller didn't set grant limit information", __func__); + return -1; + } + + if ( (rc = xc_domain_set_gnttab_limits(dom->xch, dom->guest_domid, + dom->max_grant_frames, + dom->max_maptrack_frames)) != 0 ) + return rc; + if ( xc_dom_translated(dom) ) { return xc_dom_gnttab_hvm_seed(dom->xch, dom->guest_domid, dom->console_gfn, dom->xenstore_gfn, diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c index 7087c50..d660651 100644 --- a/tools/libxc/xc_dom_core.c +++ b/tools/libxc/xc_dom_core.c @@ -784,6 +784,9 @@ struct xc_dom_image *xc_dom_allocate(xc_interface *xch, dom->console_domid = INVALID_DOMID; dom->xenstore_domid = INVALID_DOMID; + dom->max_grant_frames = -1; + dom->max_maptrack_frames = -1; + dom->flags = SIF_VIRT_P2M_4TOOLS; dom->alloc_malloc += sizeof(*dom); diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c index fcdeef0..fa5319d 100644 --- a/tools/libxl/libxl_dom.c +++ b/tools/libxl/libxl_dom.c @@ -358,12 +358,6 @@ int libxl__build_pre(libxl__gc *gc, uint32_t domid, return ERROR_FAIL; } - if (xc_domain_set_gnttab_limits(ctx->xch, domid, info->max_grant_frames, - info->max_maptrack_frames) != 0) { - LOG(ERROR, "Couldn't set grant table limits"); - return ERROR_FAIL; - } - /* * Check if the domain has any CPU or node affinity already. If not, try * to build up the latter via automatic NUMA placement. In fact, in case @@ -815,6 +809,9 @@ int libxl__build_pv(libxl__gc *gc, uint32_t domid, dom->xenstore_domid = state->store_domid; dom->claim_enabled = libxl_defbool_val(info->claim_mode); + dom->max_grant_frames = info->max_grant_frames; + dom->max_maptrack_frames = info->max_maptrack_frames; + if (info->num_vnuma_nodes != 0) { unsigned int i; @@ -1151,6 +1148,9 @@ int libxl__build_hvm(libxl__gc *gc, uint32_t domid, dom->xenstore_evtchn = state->store_port; dom->xenstore_domid = state->store_domid; + dom->max_grant_frames = info->max_grant_frames; + dom->max_maptrack_frames = info->max_maptrack_frames; + /* The params from the configuration file are in Mb, which are then * multiplied by 1 Kb. This was then divided off when calling * the old xc_hvm_build_target_mem() which then turned them to bytes. -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |