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,
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)
{
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 )
{
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)
{
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 )
{
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);
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);
}
/*
}
-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,
}
/* 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 )
{