if (info->num_vnuma_nodes != 0) {
int i;
+ ret = libxl__vnuma_build_vmemrange_hvm(gc, domid, info, state, &args);
+ if (ret) {
+ LOGEV(ERROR, ret, "hvm build vmemranges failed");
+ goto out;
+ }
+ ret = libxl__vnuma_config_check(gc, info, state);
+ if (ret) goto out;
+ ret = set_vnuma_info(gc, domid, info, state);
+ if (ret) goto out;
+
args.nr_vmemranges = state->num_vmemranges;
args.vmemranges = libxl__malloc(gc, sizeof(*args.vmemranges) *
args.nr_vmemranges);
args.vmemranges[i].nid = state->vmemranges[i].nid;
}
- /* Consider video ram belongs to vmemrange 0 -- just shrink it
- * by the size of video ram.
- */
- if (((args.vmemranges[0].end - args.vmemranges[0].start) >> 10)
- < info->video_memkb) {
- LOG(ERROR, "vmemrange 0 too small to contain video ram");
- goto out;
- }
-
- args.vmemranges[0].end -= (info->video_memkb << 10);
-
args.nr_vnodes = info->num_vnuma_nodes;
args.vnode_to_pnode = libxl__malloc(gc, sizeof(*args.vnode_to_pnode) *
args.nr_vnodes);
goto out;
}
- if (info->num_vnuma_nodes != 0) {
- ret = libxl__vnuma_build_vmemrange_hvm(gc, domid, info, state, &args);
- if (ret) {
- LOGEV(ERROR, ret, "hvm build vmemranges failed");
- goto out;
- }
- ret = libxl__vnuma_config_check(gc, info, state);
- if (ret) goto out;
- ret = set_vnuma_info(gc, domid, info, state);
- if (ret) goto out;
- }
ret = hvm_build_set_params(ctx->xch, domid, info, state->store_port,
&state->store_mfn, state->console_port,
&state->console_mfn, state->store_domid,
uint64_t hole_start, hole_end, next;
int nid, nr_vmemrange;
xen_vmemrange_t *vmemranges;
+ int rc;
/* Derive vmemranges from vnode size and memory hole.
*
libxl_vnode_info *p = &b_info->vnuma_nodes[nid];
uint64_t remaining_bytes = p->memkb << 10;
+ /* Consider video ram belongs to vnode 0 */
+ if (nid == 0) {
+ if (p->memkb < b_info->video_memkb) {
+ LOG(ERROR, "vnode 0 too small to contain video ram");
+ rc = ERROR_INVAL;
+ goto out;
+ }
+ remaining_bytes -= (b_info->video_memkb << 10);
+ }
+
while (remaining_bytes > 0) {
uint64_t count = remaining_bytes;
state->vmemranges = vmemranges;
state->num_vmemranges = nr_vmemrange;
- return 0;
+ rc = 0;
+out:
+ return rc;
}
/*