From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xen.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
Julien Grall <julien.grall@arm.com>,
Ian Jackson <Ian.Jackson@eu.citrix.com>
Subject: [PATCH for-4.10 v2 5/5] tools/dombuilder: Prevent failures of xc_dom_gnttab_init()
Date: Thu, 12 Oct 2017 20:19:09 +0100 [thread overview]
Message-ID: <1507835949-9429-6-git-send-email-andrew.cooper3@citrix.com> (raw)
In-Reply-To: <1507835949-9429-1-git-send-email-andrew.cooper3@citrix.com>
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@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Tested-by: Julien Grall <julien.grall@arm.com>
---
CC: Ian Jackson <Ian.Jackson@eu.citrix.com>
CC: Julien Grall <julien.grall@arm.com>
v2:
* Set errno to EINVAL if max_{grant,maptrack}_frames are not provided
---
tools/libxc/include/xc_dom.h | 4 ++++
tools/libxc/xc_dom_boot.c | 16 ++++++++++++++++
tools/libxc/xc_dom_core.c | 3 +++
tools/libxl/libxl_dom.c | 12 ++++++------
4 files changed, 29 insertions(+), 6 deletions(-)
diff --git a/tools/libxc/include/xc_dom.h b/tools/libxc/include/xc_dom.h
index a1c3de2..5292424 100644
--- a/tools/libxc/include/xc_dom.h
+++ b/tools/libxc/include/xc_dom.h
@@ -116,6 +116,10 @@ struct xc_dom_image {
uint32_t console_domid;
uint32_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 75836bd..7c21fea 100644
--- a/tools/libxc/xc_dom_boot.c
+++ b/tools/libxc/xc_dom_boot.c
@@ -420,6 +420,22 @@ int xc_dom_gnttab_hvm_seed(xc_interface *xch, uint32_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__);
+ errno = EINVAL;
+
+ 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@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-10-12 19:19 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-12 19:19 [PATCH for-4.10 v2 0/5] tools/dombuilder: Fixes and improvements to grant handling Andrew Cooper
2017-10-12 19:19 ` [PATCH for-4.10 v2 1/5] tools/dombuilder: Drop more PVH v1 leftovers Andrew Cooper
2017-10-12 19:19 ` [PATCH for-4.10 v2 2/5] tools/dombuilder: Remove clear_page() from xc_dom_boot.c Andrew Cooper
2017-10-12 19:19 ` [PATCH for-4.10 v2 3/5] tools/dombuilder: Switch to using gfn terminology for console and xenstore rings Andrew Cooper
2017-11-02 16:42 ` Wei Liu
2017-10-12 19:19 ` [PATCH for-4.10 v2 4/5] tools/dombuilder: Fix asymmetry when setting up " Andrew Cooper
2017-10-12 19:19 ` Andrew Cooper [this message]
2017-10-24 16:06 ` [PATCH for-4.10 v2 0/5] tools/dombuilder: Fixes and improvements to grant handling Julien Grall
2017-10-25 7:08 ` Juergen Gross
2017-10-27 13:31 ` Julien Grall
2017-11-02 13:44 ` Julien Grall
2017-11-02 13:45 ` Julien Grall
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1507835949-9429-6-git-send-email-andrew.cooper3@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=Ian.Jackson@eu.citrix.com \
--cc=julien.grall@arm.com \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).