aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2012-11-01 20:09:53 -0400
committerJonathan Herman <hermanjl@cs.unc.edu>2012-11-01 20:09:53 -0400
commit2b8b9c348e9928c2a0d29ee78d589ee2e1334558 (patch)
tree663c1a053d0476ae0471f704a96d6e2a8c796780
parent3fcedce6999b2a00dc1266b2d98ba9f8442ab4b1 (diff)
Fixed bug when removing ghost group requests.
-rw-r--r--litmus/dgl.c46
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