| 
					
				 | 
			
			
				@@ -17,7 +17,14 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define _STARPU_MALLOC(p, s) do {p = malloc(s);} while (0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define STARPU_ATTRIBUTE_UNUSED __attribute((__unused__)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#ifdef BUILDING_STARPU 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <config.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define _GNU_SOURCE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// Assuming recent simgrid 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define STARPU_HAVE_SIMGRID_MSG_H 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define STARPU_HAVE_XBT_SYNCHRO_H 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <unistd.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <stdlib.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <stdio.h> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -36,12 +43,13 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <xbt/synchro_core.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define L 1 /* number of lists */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define N 2 /* number of threads */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define M 4 /* number of elements */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // MC_ignore 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-xbt_mutex_t mutex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+xbt_mutex_t mutex[L]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 LIST_TYPE(foo, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -50,7 +58,7 @@ LIST_TYPE(foo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 PRIO_LIST_TYPE(foo, prio); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-struct foo_prio_list mylist; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+struct foo_prio_list mylist[L]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void check_list_prio(struct foo_prio_list *list) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -72,14 +80,17 @@ void check_list_prio(struct foo_prio_list *list) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-int worker(int argc, char *argv[]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+int worker(int argc STARPU_ATTRIBUTE_UNUSED, char *argv[]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	unsigned i, n; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	unsigned myrank = atoi(argv[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	unsigned i, n, l; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	struct foo *elem; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	struct drand48_data buffer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	long res; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	srand48_r(atoi(argv[0]), &buffer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	srand48_r(myrank, &buffer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	l = myrank%L; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	for (i = 0; i < M; i++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	{ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -88,13 +99,13 @@ int worker(int argc, char *argv[]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		elem->prio = res%10; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		lrand48_r(&buffer, &res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		elem->back = res%2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		xbt_mutex_acquire(mutex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		xbt_mutex_acquire(mutex[l]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (elem->back) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			foo_prio_list_push_back(&mylist, elem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			foo_prio_list_push_back(&mylist[l], elem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			foo_prio_list_push_front(&mylist, elem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		check_list_prio(&mylist); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		xbt_mutex_release(mutex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			foo_prio_list_push_front(&mylist[l], elem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		check_list_prio(&mylist[l]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		xbt_mutex_release(mutex[l]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	for (i = 0; i < M; i++) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -102,14 +113,14 @@ int worker(int argc, char *argv[]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		lrand48_r(&buffer, &res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		n = res%(M-i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		xbt_mutex_acquire(mutex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for (elem  = foo_prio_list_begin(&mylist); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		xbt_mutex_acquire(mutex[l]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for (elem  = foo_prio_list_begin(&mylist[l]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		     n--; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		     elem  = foo_prio_list_next(&mylist, elem)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		     elem  = foo_prio_list_next(&mylist[l], elem)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		foo_prio_list_erase(&mylist, elem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		check_list_prio(&mylist); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		xbt_mutex_release(mutex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		foo_prio_list_erase(&mylist[l], elem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		check_list_prio(&mylist[l]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		xbt_mutex_release(mutex[l]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return 0; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -117,10 +128,13 @@ int worker(int argc, char *argv[]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 int master(int argc STARPU_ATTRIBUTE_UNUSED, char *argv[] STARPU_ATTRIBUTE_UNUSED) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	unsigned i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	unsigned i, l; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	mutex = xbt_mutex_init(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	foo_prio_list_init(&mylist); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for (l = 0; l < L; l++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		mutex[l] = xbt_mutex_init(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		foo_prio_list_init(&mylist[l]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	for (i = 0; i < N; i++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	{ 
			 |