diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2012-11-01 20:09:53 -0400 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2012-11-01 20:09:53 -0400 |
commit | 2b8b9c348e9928c2a0d29ee78d589ee2e1334558 (patch) | |
tree | 663c1a053d0476ae0471f704a96d6e2a8c796780 | |
parent | 3fcedce6999b2a00dc1266b2d98ba9f8442ab4b1 (diff) |
Fixed bug when removing ghost group requests.
-rw-r--r-- | litmus/dgl.c | 46 |
1 files changed, 21 insertions, 25 deletions
diff --git a/litmus/dgl.c b/litmus/dgl.c index 09314606866e..82a5e0b0e62c 100644 --- a/litmus/dgl.c +++ b/litmus/dgl.c | |||
@@ -7,14 +7,14 @@ | |||
7 | 7 | ||
8 | #define DEBUG_DGL | 8 | #define DEBUG_DGL |
9 | 9 | ||
10 | #define STRACE2(fmt, args...) printk(KERN_ERR fmt, ## args) | ||
11 | |||
12 | #ifdef DEBUG_DGL | 10 | #ifdef DEBUG_DGL |
13 | #define TRACE(fmt, args...) STRACE(fmt, ## args) | 11 | #define TRACE(fmt, args...) STRACE(fmt, ## args) |
12 | #define STRACE2(fmt, args...) STRACE(fmt, ## args) | ||
14 | #define TRACE_GREQ(greq, fmt, args...) \ | 13 | #define TRACE_GREQ(greq, fmt, args...) \ |
15 | TRACE("(greq-%s/%llu) " fmt, (greq->task ? greq->task->comm : "greq"), \ | 14 | TRACE("(greq-%s/%llu) " fmt, (greq->task ? greq->task->comm : "greq"), \ |
16 | (greq->task ? greq->task->pid : (unsigned long long)greq), ## args) | 15 | (greq->task ? greq->task->pid : (unsigned long long)greq), ## args) |
17 | #else | 16 | #else |
17 | #define STRACE2(fmt, args...) printk(KERN_ERR fmt, ## args) | ||
18 | #define TRACE(fmt, args...) | 18 | #define TRACE(fmt, args...) |
19 | #define TRACE_GREQ(greq, fmt, args...) | 19 | #define TRACE_GREQ(greq, fmt, args...) |
20 | #endif | 20 | #endif |
@@ -79,7 +79,7 @@ static void print_queue(struct dgl *dgl, struct list_head *list) | |||
79 | 79 | ||
80 | list_for_each_entry(pos, list, list) { | 80 | list_for_each_entry(pos, list, list) { |
81 | greq = pos->greq; | 81 | greq = pos->greq; |
82 | sched_trace_log_message("(%s-%d:r%d-p%d-b%d)->", greq->task->comm, | 82 | sched_trace_log_message("(%s-%d:r%d-p%x-b%x)->", greq->task->comm, |
83 | greq->task->pid, pos->replicas, | 83 | greq->task->pid, pos->replicas, |
84 | arr_to_bool(dgl, greq->need_prio), | 84 | arr_to_bool(dgl, greq->need_prio), |
85 | arr_to_bool(dgl, greq->blocked)); | 85 | arr_to_bool(dgl, greq->blocked)); |
@@ -745,43 +745,39 @@ void remove_group_req(struct dgl *dgl, struct dgl_group_req *greq) | |||
745 | 745 | ||
746 | for_each_resource(greq->requested, dgl, w, b, i) { | 746 | for_each_resource(greq->requested, dgl, w, b, i) { |
747 | our_req = &greq->requests[i]; | 747 | our_req = &greq->requests[i]; |
748 | list_del_init(&our_req->list); | ||
748 | resource = &dgl->resources[i]; | 749 | resource = &dgl->resources[i]; |
749 | 750 | ||
750 | if (running) { | 751 | if (running) { |
751 | resource->real_free += our_req->replicas; | 752 | resource->real_free += our_req->replicas; |
752 | BUG_DUMP(dgl, resource->real_free > dgl->num_replicas); | 753 | BUG_DUMP(dgl, resource->real_free > dgl->num_replicas); |
753 | update_blocked(dgl, resource); | ||
754 | } | 754 | } |
755 | if (has_prio) { | 755 | if (has_prio) { |
756 | resource->goal_free += our_req->replicas; | 756 | resource->goal_free += our_req->replicas; |
757 | BUG_DUMP(dgl, resource->goal_free > dgl->num_replicas); | 757 | BUG_DUMP(dgl, resource->goal_free > dgl->num_replicas); |
758 | update_prio(dgl, resource); | ||
759 | } | 758 | } |
759 | } | ||
760 | 760 | ||
761 | list_del_init(&our_req->list); | 761 | --dgl->requests; |
762 | |||
763 | if (has_prio) { | ||
764 | for_each_resource(greq->requested, dgl, w, b, i) { | ||
765 | update_prio(dgl, &dgl->resources[i]); | ||
766 | } | ||
767 | for_each_resource(greq->requested, dgl, w, b, i) { | ||
768 | pull_prio(dgl, &dgl->resources[i]); | ||
769 | } | ||
762 | } | 770 | } |
763 | 771 | ||
764 | /* if (!arr_to_bool(dgl, greq->need_prio)) { */ | 772 | if (running || has_prio) { |
765 | /* for_each_resource(greq->requested, dgl, w, b, i) { */ | 773 | for_each_resource(greq->requested, dgl, w, b, i) { |
766 | /* update_prio(dgl, &dgl->resources[i]); */ | 774 | update_blocked(dgl, &dgl->resources[i]); |
767 | /* } */ | 775 | } |
768 | /* for_each_resource(greq->requested, dgl, w, b, i) { */ | 776 | for_each_resource(greq->requested, dgl, w, b, i) { |
769 | /* pull_prio(dgl, &dgl->resources[i]); */ | 777 | pull_blocked(dgl, &dgl->resources[i]); |
770 | /* } */ | 778 | } |
771 | /* } */ | ||
772 | |||
773 | /* for_each_resource(greq->requested, dgl, w, b, i) { */ | ||
774 | /* resource = &dgl->resources[i]; */ | ||
775 | /* if (running) update_blocked(dgl, resource); */ | ||
776 | /* if (has_prio) update_prio(dgl, resource); */ | ||
777 | /* } */ | ||
778 | for_each_resource(greq->requested, dgl, w, b, i) { | ||
779 | resource = &dgl->resources[i]; | ||
780 | if (running) pull_blocked(dgl, resource); | ||
781 | if (has_prio) pull_prio(dgl, resource); | ||
782 | } | 779 | } |
783 | 780 | ||
784 | --dgl->requests; | ||
785 | print_state(dgl); | 781 | print_state(dgl); |
786 | } | 782 | } |
787 | 783 | ||