Currently ldomctl init-system will error out in many situations. A number of them involve requesting more resources than there are available. Right now onw just gets error messages like:
resource_id larger than max_mblocks resource_id larger than max_guests not enough VCPU resources available not enough memory available With this diff, we put out numbers for most of these. ldomctl: requested vcpus (256) > vcpu resources (64) ldomctl: requested memory (213674622976) > memory resources (137428467712) The other change in here is moving max_cpus to uint64_t. max_cpus was an int but is only compared to uint_64t. So I moved max_cpus to uint64_t. I suppose I could have gone the other way. I don't know if anyone has strong feelings on it. Thoughts? Comments? ok? --Kurt Index: config.c =================================================================== RCS file: /cvs/src/usr.sbin/ldomctl/config.c,v retrieving revision 1.40 diff -u -p -r1.40 config.c --- config.c 24 May 2020 22:08:54 -0000 1.40 +++ config.c 24 May 2020 22:10:56 -0000 @@ -122,7 +122,7 @@ void guest_fixup_phys_io(struct guest *) TAILQ_HEAD(, frag) free_frags = TAILQ_HEAD_INITIALIZER(free_frags); TAILQ_HEAD(, cpu) free_cpus = TAILQ_HEAD_INITIALIZER(free_cpus); -int total_cpus; +uint64_t total_cpus; TAILQ_HEAD(, mblock) free_memory = TAILQ_HEAD_INITIALIZER(free_memory); uint64_t total_memory; @@ -601,7 +601,8 @@ hvmd_init_mblock(struct md *md, struct m errx(1, "missing resource_id property in mblock node"); if (resource_id >= max_mblocks) - errx(1, "resource_id larger than max_mblocks"); + errx(1, "resource_id %lld larger than max_mblocks %lld", \ + resource_id, max_mblocks); mblock = xzalloc(sizeof(*mblock)); md_get_prop_val(md, node, "membase", &mblock->membase); @@ -632,7 +633,8 @@ hvmd_init_console(struct md *md, struct errx(1, "missing resource_id property in console node"); if (resource_id >= max_guests) - errx(1, "resource_id larger than max_guests"); + errx(1, "resource_id %lld larger than max_guests %lld", \ + resource_id, max_guests); console = xzalloc(sizeof(*console)); md_get_prop_val(md, node, "ino", &console->ino); @@ -655,7 +657,8 @@ hvmd_init_cpu(struct md *md, struct md_n errx(1, "missing resource_id property in cpu node"); if (resource_id >= max_cpus) - errx(1, "resource_id larger than max-cpus"); + errx(1, "resource_id %lld larger than max-cpus %lld", \ + resource_id, max_cpus); if (!md_get_prop_val(md, node, "pid", &pid)) errx(1, "missing pid property in cpu node"); @@ -698,7 +701,8 @@ hvmd_init_device(struct md *md, struct m errx(1, "missing resource_id property in ldc_endpoint node"); if (resource_id >= max_devices) - errx(1, "resource_id larger than max_devices"); + errx(1, "resource_id %lld larger than max_devices %lld", \ + resource_id, max_devices); device = xzalloc(sizeof(*device)); md_get_prop_val(md, node, "gid", &device->gid); @@ -754,7 +758,8 @@ hvmd_init_endpoint(struct md *md, struct errx(1, "missing resource_id property in ldc_endpoint node"); if (resource_id >= max_guest_ldcs) - errx(1, "resource_id larger than max_guest_ldcs"); + errx(1, "resource_id %lld larger than max_guest_ldcs %lld", \ + resource_id, max_guest_ldcs); if (ldc_endpoints[resource_id]) { /* @@ -800,7 +805,8 @@ hvmd_init_guest(struct md *md, struct md errx(1, "missing resource_id property in guest node"); if (resource_id >= max_guests) - errx(1, "resource_id larger than max_guests"); + errx(1, "resource_id %lld larger than max_guests %lld", \ + resource_id, max_guests); guest = xzalloc(sizeof(*guest)); TAILQ_INIT(&guest->cpu_list); @@ -2816,10 +2822,19 @@ build_config(const char *filename, int n primary_num_cpus = total_cpus - num_cpus; if (primary_memory == 0 && total_memory > memory) primary_memory = total_memory - memory; - if (num_cpus > total_cpus || primary_num_cpus == 0) - errx(1, "not enough VCPU resources available"); - if (memory > total_memory || primary_memory == 0) - errx(1, "not enough memory available"); + if (num_cpus > total_cpus) + errx(1, "requested vcpus (%lld) > vcpu resources (%lld)", \ + num_cpus, total_cpus); + if (primary_num_cpus == 0) + errx(1, "No vcpus left for primary domain"); + if (memory > total_memory) + errx(1, "requested memory (%lld) > memory resources (%lld)", \ + memory, total_memory); + if (primary_memory == 0) + errx(1, "No memory left for primary domain"); + + if (noaction) + exit(0); if (noaction) exit(0);