diff --git a/src/plugins/select/cray/basil_alps.h b/src/plugins/select/cray/basil_alps.h index 44c2349e7ca65c9708c4d692c1682918b9233c25..9b11b40dc0361a9af55fb52e52c0be145799ebd9 100644 --- a/src/plugins/select/cray/basil_alps.h +++ b/src/plugins/select/cray/basil_alps.h @@ -260,16 +260,16 @@ enum basil_accelstate { /* Alps 4.x (Basil 1.2) */ /* * Inventory structs */ -struct basil_proc_alloc { - uint32_t rsvn_id; - /* NB: processor is indivisible, i.e. at most 1 allocation */ -}; - struct basil_node_processor { uint32_t ordinal; uint32_t clock_mhz; enum basil_proc_type arch; - struct basil_proc_alloc *allocation; + + /* With gang scheduling we can have more than 1 rsvn per node, + so this is just here to see if the node itself is allocated + at all. + */ + uint32_t rsvn_id; struct basil_node_processor *next; }; diff --git a/src/plugins/select/cray/libalps/do_query.c b/src/plugins/select/cray/libalps/do_query.c index b4592d913ff2323b05d4ced2d990a57a3268f6dc..20d3c825b48ecb91636befe40f6de53b2ac72e63 100644 --- a/src/plugins/select/cray/libalps/do_query.c +++ b/src/plugins/select/cray/libalps/do_query.c @@ -32,7 +32,7 @@ static bool _segment_is_allocated(const struct basil_segment *seg) struct basil_node_memory *mem; for (proc = seg->proc_head; proc; proc = proc->next) - if (proc->allocation != NULL) + if (proc->rsvn_id) return true; for (mem = seg->mem_head; mem; mem = mem->next) if (mem->a_head != NULL) diff --git a/src/plugins/select/cray/libalps/memory_handling.c b/src/plugins/select/cray/libalps/memory_handling.c index 8e968f9e91447e49c79387ec8fb1c197262a24b4..0a7afdfcd83dbb0d4dc39fea3499f56b49a1341a 100644 --- a/src/plugins/select/cray/libalps/memory_handling.c +++ b/src/plugins/select/cray/libalps/memory_handling.c @@ -10,7 +10,7 @@ static void _free_basil_processor(struct basil_node_processor *p) { if (p) { _free_basil_processor(p->next); - xfree(p->allocation); + p->rsvn_id = 0; /* just to be safe */ xfree(p); } } diff --git a/src/plugins/select/cray/libalps/parser_common.c b/src/plugins/select/cray/libalps/parser_common.c index ba44378a93fb07f08899eb3b18621fbe277cebd3..6f91647e6a616d3443a526583825afeb9a21e03c 100644 --- a/src/plugins/select/cray/libalps/parser_common.c +++ b/src/plugins/select/cray/libalps/parser_common.c @@ -281,17 +281,12 @@ void eh_proc_alloc(struct ud *ud, const XML_Char **attrs) ud->current_node.reserved = true; if (ud->ud_inventory) { - struct basil_proc_alloc *new = xmalloc(sizeof(*new)); - - new->rsvn_id = rsvn_id; xassert(ud->ud_inventory->node_head); xassert(ud->ud_inventory->node_head->seg_head); xassert(ud->ud_inventory->node_head->seg_head->proc_head); - xassert(!ud->ud_inventory->node_head->seg_head-> - proc_head->allocation); - ud->ud_inventory->node_head->seg_head->proc_head->allocation = - new; + ud->ud_inventory->node_head->seg_head->proc_head->rsvn_id = + rsvn_id; } }