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