/** * rsvn_add_params - Populate parameters for a RESERVE request * @resv: the reservation to add to * @width: mppwidth > 0 * @depth: mppdepth >= 0 (0 meaning 'use defaults') * @nppn: mppnppn >= 0 (0 meaning 'use defaults') * @mem_mb: mppmem >= 0 (0 meaning 'use defaults', else size in MB) * @mppnodes: comma-separated nodelist (will be freed if not NULL) * @accel: accelerator parameters (will be freed if not NULL) */ static int _rsvn_add_params(struct basil_reservation *resv, uint32_t width, uint32_t depth, uint32_t nppn, uint32_t mem_mb, char *mppnodes, uint32_t nppcu, struct basil_accel_param *accel) { struct basil_rsvn_param *rp = xmalloc(sizeof(*rp)); if (rp == NULL) return -1; rp->arch = BNA_XT; /* "XT" is the only supported architecture */ rp->width = width; rp->depth = depth; rp->nppn = nppn; rp->nodes = mppnodes; rp->nppcu = nppcu; rp->accel = accel; if (mem_mb && _rsvn_add_mem_param(rp, mem_mb) < 0) { rsvn_free_param(rp); return -1; } if (resv->params) rp->next = resv->params; resv->params = rp; return 0; }
void free_rsvn(struct basil_reservation *r) { if (r) { rsvn_free_param(r->params); free_nodespec(r->rsvd_nodes); free(r); } }
void rsvn_free_param(struct basil_rsvn_param *p) { if (p) { rsvn_free_param(p->next); rsvn_free_param_mem(p->memory); rsvn_free_param_accel(p->accel); free_basil_label(p->labels); free(p->nodes); free(p); } }