From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Ian Campbell <ian.campbell@citrix.com>
Cc: xen-devel@lists.xenproject.org, ian.jackson@eu.citrix.com
Subject: Re: [PATCH v2 08/13] libxc: Check xc_domain_maximum_gpfn for negative return values
Date: Fri, 20 Mar 2015 11:45:55 -0400 [thread overview]
Message-ID: <20150320154555.GD2085@l.oracle.com> (raw)
In-Reply-To: <1426863624.21742.213.camel@citrix.com>
> > All of them are
> >
> > git://xenbits.xen.org/people/konradwilk/xen.git xc_cleanup.v4
..snip..
> Looks good, only one minor comment:
> [...]
>
> > - *gpfn = (xen_pfn_t)rc + 1;
>
> Perhaps the new parameter to xc_domain_maximum_gpfn should be a
> xen_pfn_t?
>
Here you go. They are at:
git://xenbits.xen.org/people/konradwilk/xen.git xc_cleanup.v4.1
>From 45bd7cd377b0b8364757cc2bc0bd8d6a13523a97 Mon Sep 17 00:00:00 2001
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Date: Fri, 13 Mar 2015 14:57:44 -0400
Subject: [PATCH] libxc: Check xc_domain_maximum_gpfn for negative return
values
Instead of assuming everything is always OK. We stash
the gpfns value as an parameter. Since we use it in three
of places we might as well update xc_domain_maximum_gpfn
to do the right thing.
Suggested-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
---
tools/libxc/include/xenctrl.h | 2 +-
tools/libxc/xc_core_arm.c | 11 ++++-------
tools/libxc/xc_core_x86.c | 29 +++++++++++------------------
tools/libxc/xc_domain.c | 11 +++++++++--
tools/libxc/xc_domain_save.c | 6 +++++-
5 files changed, 30 insertions(+), 29 deletions(-)
diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h
index df18292..7853fdb 100644
--- a/tools/libxc/include/xenctrl.h
+++ b/tools/libxc/include/xenctrl.h
@@ -1315,7 +1315,7 @@ int xc_domain_get_tsc_info(xc_interface *xch,
int xc_domain_disable_migrate(xc_interface *xch, uint32_t domid);
-int xc_domain_maximum_gpfn(xc_interface *xch, domid_t domid);
+int xc_domain_maximum_gpfn(xc_interface *xch, domid_t domid, xen_pfn_t *gpfns);
int xc_domain_increase_reservation(xc_interface *xch,
uint32_t domid,
diff --git a/tools/libxc/xc_core_arm.c b/tools/libxc/xc_core_arm.c
index 16508e7..c3f5868 100644
--- a/tools/libxc/xc_core_arm.c
+++ b/tools/libxc/xc_core_arm.c
@@ -30,12 +30,6 @@ xc_core_arch_gpfn_may_present(struct xc_core_arch_context *arch_ctxt,
return 0;
}
-
-static int nr_gpfns(xc_interface *xch, domid_t domid)
-{
- return xc_domain_maximum_gpfn(xch, domid) + 1;
-}
-
int
xc_core_arch_auto_translated_physmap(const xc_dominfo_t *info)
{
@@ -48,9 +42,12 @@ xc_core_arch_memory_map_get(xc_interface *xch, struct xc_core_arch_context *unus
xc_core_memory_map_t **mapp,
unsigned int *nr_entries)
{
- unsigned long p2m_size = nr_gpfns(xch, info->domid);
+ xen_pfn_t p2m_size = 0;
xc_core_memory_map_t *map;
+ if ( xc_domain_maximum_gpfn(xch, info->domid, &p2m_size) < 0 )
+ return -1;
+
map = malloc(sizeof(*map));
if ( map == NULL )
{
diff --git a/tools/libxc/xc_core_x86.c b/tools/libxc/xc_core_x86.c
index d8846f1..4552e43 100644
--- a/tools/libxc/xc_core_x86.c
+++ b/tools/libxc/xc_core_x86.c
@@ -35,12 +35,6 @@ xc_core_arch_gpfn_may_present(struct xc_core_arch_context *arch_ctxt,
return 1;
}
-
-static int nr_gpfns(xc_interface *xch, domid_t domid)
-{
- return xc_domain_maximum_gpfn(xch, domid) + 1;
-}
-
int
xc_core_arch_auto_translated_physmap(const xc_dominfo_t *info)
{
@@ -53,9 +47,12 @@ xc_core_arch_memory_map_get(xc_interface *xch, struct xc_core_arch_context *unus
xc_core_memory_map_t **mapp,
unsigned int *nr_entries)
{
- unsigned long p2m_size = nr_gpfns(xch, info->domid);
+ xen_pfn_t p2m_size = 0;
xc_core_memory_map_t *map;
+ if ( xc_domain_maximum_gpfn(xch, info->domid, &p2m_size) < 0 )
+ return -1;
+
map = malloc(sizeof(*map));
if ( map == NULL )
{
@@ -88,7 +85,12 @@ xc_core_arch_map_p2m_rw(xc_interface *xch, struct domain_info_context *dinfo, xc
int err;
int i;
- dinfo->p2m_size = nr_gpfns(xch, info->domid);
+ if ( xc_domain_maximum_gpfn(xch, info->domid, &dinfo->p2m_size) < 0 )
+ {
+ ERROR("Could not get maximum GPFN!");
+ goto out;
+ }
+
if ( dinfo->p2m_size < info->nr_pages )
{
ERROR("p2m_size < nr_pages -1 (%lx < %lx", dinfo->p2m_size, info->nr_pages - 1);
@@ -210,16 +212,7 @@ int
xc_core_arch_get_scratch_gpfn(xc_interface *xch, domid_t domid,
xen_pfn_t *gpfn)
{
- int rc;
-
- rc = xc_domain_maximum_gpfn(xch, domid);
-
- if ( rc < 0 )
- return rc;
-
- *gpfn = (xen_pfn_t)rc + 1;
-
- return 0;
+ return xc_domain_maximum_gpfn(xch, domid, gpfn);
}
/*
diff --git a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c
index 2fed727..da88e08 100644
--- a/tools/libxc/xc_domain.c
+++ b/tools/libxc/xc_domain.c
@@ -789,9 +789,16 @@ int xc_domain_get_tsc_info(xc_interface *xch,
}
-int xc_domain_maximum_gpfn(xc_interface *xch, domid_t domid)
+int xc_domain_maximum_gpfn(xc_interface *xch, domid_t domid, xen_pfn_t *gpfns)
{
- return do_memory_op(xch, XENMEM_maximum_gpfn, &domid, sizeof(domid));
+ int rc = do_memory_op(xch, XENMEM_maximum_gpfn, &domid, sizeof(domid));
+
+ if ( rc >= 0 )
+ {
+ *gpfns = rc + 1;
+ rc = 0;
+ }
+ return rc;
}
int xc_domain_increase_reservation(xc_interface *xch,
diff --git a/tools/libxc/xc_domain_save.c b/tools/libxc/xc_domain_save.c
index 254fdb3..b611c07 100644
--- a/tools/libxc/xc_domain_save.c
+++ b/tools/libxc/xc_domain_save.c
@@ -939,7 +939,11 @@ int xc_domain_save(xc_interface *xch, int io_fd, uint32_t dom, uint32_t max_iter
}
/* Get the size of the P2M table */
- dinfo->p2m_size = xc_domain_maximum_gpfn(xch, dom) + 1;
+ if ( xc_domain_maximum_gpfn(xch, dom, &dinfo->p2m_size) < 0 )
+ {
+ ERROR("Could not get maximum GPFN!");
+ goto out;
+ }
if ( dinfo->p2m_size > ~XEN_DOMCTL_PFINFO_LTAB_MASK )
{
--
2.1.0
>
next prev parent reply other threads:[~2015-03-20 15:46 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-19 0:24 [PATCH v2] Fix libxc return -E misusage Konrad Rzeszutek Wilk
2015-03-19 0:24 ` [PATCH v2 01/13] libxc: Replaces tabs with spaces in xc_cpupool_freeinfo Konrad Rzeszutek Wilk
2015-03-19 0:24 ` [PATCH v2 02/13] libxc: Propagate errno from hypercall instead of anything else Konrad Rzeszutek Wilk
2015-03-19 0:24 ` [PATCH v2 03/13] libxc: Fix xc_domain_get_tsc_info to return -1 instead of -Exx Konrad Rzeszutek Wilk
2015-03-19 0:24 ` [PATCH v2 04/13] libxc: xc_physdev_map return -1 and populate errno Konrad Rzeszutek Wilk
2015-03-19 0:24 ` [PATCH v2 05/13] libxc: Return negative value and propagate errno for xc_offline_page API Konrad Rzeszutek Wilk
2015-03-19 0:24 ` [PATCH v2 06/13] libxc: Fix xc_pm API calls to return negative error and stash error in errno Konrad Rzeszutek Wilk
2015-03-19 0:24 ` [PATCH v2 07/13] libxc: Fix xc_tmem_control to return proper error Konrad Rzeszutek Wilk
2015-03-19 16:39 ` Ian Campbell
2015-03-19 18:52 ` Konrad Rzeszutek Wilk
2015-03-19 0:24 ` [PATCH v2 08/13] libxc: Check xc_domain_maximum_gpfn for negative return values Konrad Rzeszutek Wilk
2015-03-19 16:47 ` Ian Campbell
2015-03-19 18:54 ` Konrad Rzeszutek Wilk
2015-03-20 9:48 ` Ian Campbell
2015-03-20 14:34 ` Konrad Rzeszutek Wilk
2015-03-20 14:49 ` Konrad Rzeszutek Wilk
2015-03-20 15:00 ` Ian Campbell
2015-03-20 15:45 ` Konrad Rzeszutek Wilk [this message]
2015-03-20 17:03 ` Ian Campbell
2015-03-26 21:07 ` REGRESSION " Andrew Cooper
2015-03-27 10:52 ` Ian Campbell
2015-03-27 14:14 ` Konrad Rzeszutek Wilk
2015-03-27 19:42 ` Konrad Rzeszutek Wilk
2015-03-27 20:04 ` Andrew Cooper
2015-03-27 20:41 ` Konrad Rzeszutek Wilk
2015-03-27 21:17 ` Andrew Cooper
2015-03-30 8:49 ` Ian Campbell
2015-03-19 20:04 ` Konrad Rzeszutek Wilk
2015-03-20 0:18 ` Konrad Rzeszutek Wilk
2015-03-19 0:24 ` [PATCH v2 09/13] libxc: Check xc_maximum_ram_page " Konrad Rzeszutek Wilk
2015-03-19 16:49 ` Ian Campbell
2015-03-19 0:24 ` [PATCH v2 10/13] libxc: If xc_domain_add_to_physmap fails, include errno value Konrad Rzeszutek Wilk
2015-03-19 0:24 ` [PATCH v2 11/13] libxc: Check xc_sharing_* for proper return values Konrad Rzeszutek Wilk
2015-03-19 16:50 ` Ian Campbell
2015-03-19 0:24 ` [PATCH v2 12/13] libxl: Don't assign return value to errno for E820 get/set xc_ calls Konrad Rzeszutek Wilk
2015-03-19 0:24 ` [PATCH v2 13/13] libxc: Fix do_memory_op to return negative value on errors Konrad Rzeszutek Wilk
2015-03-19 16:51 ` Ian Campbell
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=20150320154555.GD2085@l.oracle.com \
--to=konrad.wilk@oracle.com \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=xen-devel@lists.xenproject.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.