瀏覽代碼

hypervisor: Move hash table fiddling away from policies.

Ludovic Courtès 12 年之前
父節點
當前提交
15003cc6a9

+ 1 - 3
sched_ctx_hypervisor/include/sched_ctx_hypervisor.h

@@ -108,9 +108,7 @@ struct hypervisor_policy {
 	void (*handle_poped_task)(unsigned sched_ctx, int worker);
 	void (*handle_idle_end)(unsigned sched_ctx, int worker);
 
-	/* FIXME: The 'resize_requests' hash table is an implementation
-	 * detail that should be invisible to policies.  */
-	void (*handle_post_exec_hook)(unsigned sched_ctx, struct resize_request_entry* resize_requests, int task_tag);
+	void (*handle_post_exec_hook)(unsigned sched_ctx, int task_tag);
 
 	void (*handle_submitted_job)(struct starpu_task *task, unsigned footprint);
 };

+ 2 - 12
sched_ctx_hypervisor/src/hypervisor_policies/app_driven_policy.c

@@ -18,19 +18,9 @@
 
 #include <sched_ctx_hypervisor_intern.h>
 
-void app_driven_handle_post_exec_hook(unsigned sched_ctx, struct resize_request_entry* resize_requests, int task_tag)
+static void app_driven_handle_post_exec_hook(unsigned sched_ctx, int task_tag)
 {
-	struct resize_request_entry *entry;
-
-	/* Check whether 'task_tag' is in the 'resize_requests' set.  */
-	HASH_FIND_INT(resize_requests, &task_tag, entry);
-	if(entry != NULL)
-	{
-		_resize_to_unknown_receiver(sched_ctx, 1);
-		HASH_DEL(resize_requests, entry);
-		free(entry);
-	}
-
+	_resize_to_unknown_receiver(sched_ctx, 1);
 }
 
 struct hypervisor_policy app_driven_policy = {

+ 13 - 6
sched_ctx_hypervisor/src/sched_ctx_hypervisor.c

@@ -732,15 +732,22 @@ static void notify_post_exec_hook(unsigned sched_ctx, int task_tag)
 		
 	if(hypervisor.resize[sched_ctx])
 	{
-		struct resize_request_entry* resize_requests;
-
 		pthread_mutex_lock(&hypervisor.resize_mut[sched_ctx]);
-		resize_requests = hypervisor.resize_requests[sched_ctx];
 
-		/* TODO: Move the lookup of 'task_tag' in 'resize_requests'
-		 * here, and remove + free the entry here.  */
 		if(hypervisor.policy.handle_post_exec_hook)
-			hypervisor.policy.handle_post_exec_hook(sched_ctx, resize_requests, task_tag);
+		{
+			/* Check whether 'task_tag' is in the 'resize_requests' set.  */
+			struct resize_request_entry *entry;
+			HASH_FIND_INT(hypervisor.resize_requests[sched_ctx], &task_tag, entry);
+			if (entry != NULL)
+			{
+				hypervisor.policy.handle_post_exec_hook(sched_ctx,
+									task_tag);
+				HASH_DEL(hypervisor.resize_requests[sched_ctx], entry);
+				free(entry);
+			}
+
+		}
 		pthread_mutex_unlock(&hypervisor.resize_mut[sched_ctx]);
 	}
 	return;