The commit
a8f8a590e02d2d2b717257c0bd9a8b396103bdf4
"libxc: Check xc_domain_maximum_gpfn for negative return values"
introduced an regression in tools outside libxc (migrate v2)
which wanted the unfiltered GPFN value. Said commit added
a wrapper which added +1 if there were no errors.
To make it work pre-commit
a8f8a59 we add an xc_domain_nr_gpfns
which will add +1 if there are no errors (and change all in-tree
callers to use it). The xc_domain_maximum_gpfn will return the
unfiltered GPFN value.
Suggested-by: Ian Campbell <ian.campbell@citrix.com>
Reported-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
int xc_domain_maximum_gpfn(xc_interface *xch, domid_t domid, xen_pfn_t *gpfns);
+int xc_domain_nr_gpfns(xc_interface *xch, domid_t domid, xen_pfn_t *gpfns);
+
int xc_domain_increase_reservation(xc_interface *xch,
uint32_t domid,
unsigned long nr_extents,
xen_pfn_t p2m_size = 0;
xc_core_memory_map_t *map;
- if ( xc_domain_maximum_gpfn(xch, info->domid, &p2m_size) < 0 )
+ if ( xc_domain_nr_gpfns(xch, info->domid, &p2m_size) < 0 )
return -1;
map = malloc(sizeof(*map));
xen_pfn_t p2m_size = 0;
xc_core_memory_map_t *map;
- if ( xc_domain_maximum_gpfn(xch, info->domid, &p2m_size) < 0 )
+ if ( xc_domain_nr_gpfns(xch, info->domid, &p2m_size) < 0 )
return -1;
map = malloc(sizeof(*map));
int err;
int i;
- if ( xc_domain_maximum_gpfn(xch, info->domid, &dinfo->p2m_size) < 0 )
+ if ( xc_domain_nr_gpfns(xch, info->domid, &dinfo->p2m_size) < 0 )
{
ERROR("Could not get maximum GPFN!");
goto out;
xc_core_arch_get_scratch_gpfn(xc_interface *xch, domid_t domid,
xen_pfn_t *gpfn)
{
- return xc_domain_maximum_gpfn(xch, domid, gpfn);
+ return xc_domain_nr_gpfns(xch, domid, gpfn);
}
/*
if ( rc >= 0 )
{
- *gpfns = rc + 1;
+ *gpfns = rc;
rc = 0;
}
return rc;
}
+int xc_domain_nr_gpfns(xc_interface *xch, domid_t domid, xen_pfn_t *gpfns)
+{
+ int rc = xc_domain_maximum_gpfn(xch, domid, gpfns);
+
+ if ( rc >= 0 )
+ *gpfns += 1;
+
+ return rc;
+}
+
int xc_domain_increase_reservation(xc_interface *xch,
uint32_t domid,
unsigned long nr_extents,
}
/* Get the size of the P2M table */
- if ( xc_domain_maximum_gpfn(xch, dom, &dinfo->p2m_size) < 0 )
+ if ( xc_domain_nr_gpfns(xch, dom, &dinfo->p2m_size) < 0 )
{
ERROR("Could not get maximum GPFN!");
goto out;