X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Flbalance%2Flbalance.c;h=977de0f164ecbc72a8e73bd48be91e9f82e8c822;hp=c3cc4a22752b77266be4d26e42daa4c52fbbe20e;hb=7d1f0c73e4d321561abb74f82c8be97f10d69836;hpb=f69389e6806e2f0b63084576ffa4c84bba699147 diff --git a/ccan/lbalance/lbalance.c b/ccan/lbalance/lbalance.c index c3cc4a22..977de0f1 100644 --- a/ccan/lbalance/lbalance.c +++ b/ccan/lbalance/lbalance.c @@ -1,5 +1,6 @@ +/* Licensed under GPLv3+ - see LICENSE file for details */ #include -#include +#include #include #include #include @@ -7,9 +8,6 @@ #include #include -/* Define tlist_lbalance_task */ -TLIST_TYPE(lbalance_task, struct lbalance_task); - struct stats { /* How many stats of for this value do we have? */ unsigned int num_stats; @@ -17,8 +15,19 @@ struct stats { float work_rate; }; +struct lbalance; + +struct lbalance_task { + struct lbalance *lb; + struct list_node list; + + /* The time this task started */ + struct timeval start; + float tasks_sum_start; +}; + struct lbalance { - struct tlist_lbalance_task tasks; + TLIST2(struct lbalance_task, list) tasks; unsigned int num_tasks; /* We figured out how many we want to run. */ @@ -41,22 +50,13 @@ struct lbalance { struct stats *stats; }; -struct lbalance_task { - struct lbalance *lb; - struct list_node list; - - /* The time this task started */ - struct timeval start; - float tasks_sum_start; -}; - struct lbalance *lbalance_new(void) { struct lbalance *lb = malloc(sizeof *lb); if (!lb) return NULL; - tlist_init(&lb->tasks); + tlist2_init(&lb->tasks); lb->num_tasks = 0; gettimeofday(&lb->prev_tasks_time, NULL); lb->tasks_sum = 0.0; @@ -139,7 +139,7 @@ struct lbalance_task *lbalance_task_new(struct lbalance *lb) update_tasks_sum(lb, &task->start); task->tasks_sum_start = lb->tasks_sum; - tlist_add_tail(&lb->tasks, task, list); + tlist2_add_tail(&lb->tasks, task); lb->num_tasks++; return task; @@ -228,7 +228,7 @@ void lbalance_task_free(struct lbalance_task *task, task->lb->target_uptodate = false; /* Remove this task. */ - tlist_del_from(&task->lb->tasks, task, list); + tlist2_del_from(&task->lb->tasks, task); task->lb->num_tasks--; free(task); } @@ -241,7 +241,7 @@ void lbalance_task_free(struct lbalance_task *task, * are overloaded. */ static unsigned int best_target(const struct lbalance *lb) { - unsigned int i, best = 0, found_drop = 0; + unsigned int i, found_drop = 0; float best_f_max = -1.0, cliff = -1.0; #if 0 @@ -266,7 +266,6 @@ static unsigned int best_target(const struct lbalance *lb) #endif best_f_max = f - (f / (i + 1)) / 4; cliff = f - (f / (i + 1)) / 2; - best = i; found_drop = 0; } else if (!found_drop && f < cliff) { #if 0 @@ -314,9 +313,9 @@ void lbalance_free(struct lbalance *lb) { struct lbalance_task *task; - while ((task = tlist_top(&lb->tasks, struct lbalance_task, list))) { + while ((task = tlist2_top(&lb->tasks))) { assert(task->lb == lb); - tlist_del_from(&lb->tasks, task, list); + tlist2_del_from(&lb->tasks, task); lb->num_tasks--; free(task); }