From 47daad2b31c59371eb65ef91cfd18d8509b683e1 Mon Sep 17 00:00:00 2001 From: Danny Auble <da@schedmd.com> Date: Fri, 24 Jun 2011 12:19:32 -0700 Subject: [PATCH] cray - make it so we can have more than 1 reservation per node. Needed for gang scheduling. --- src/plugins/select/cray/basil_alps.h | 12 ++++++------ src/plugins/select/cray/libalps/do_query.c | 2 +- src/plugins/select/cray/libalps/memory_handling.c | 2 +- src/plugins/select/cray/libalps/parser_common.c | 9 ++------- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/plugins/select/cray/basil_alps.h b/src/plugins/select/cray/basil_alps.h index 44c2349e7ca..9b11b40dc03 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 b4592d913ff..20d3c825b48 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 8e968f9e914..0a7afdfcd83 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 ba44378a93f..6f91647e6a6 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; } } -- GitLab