Merge tag 'platform-drivers-x86-v5.1-1' of git://git.infradead.org/linux-platform...
[linux-2.6-microblaze.git] / block / bfq-wf2q.c
index 72adbbe..63311d1 100644 (file)
@@ -44,6 +44,12 @@ static unsigned int bfq_class_idx(struct bfq_entity *entity)
                BFQ_DEFAULT_GRP_CLASS - 1;
 }
 
+unsigned int bfq_tot_busy_queues(struct bfq_data *bfqd)
+{
+       return bfqd->busy_queues[0] + bfqd->busy_queues[1] +
+               bfqd->busy_queues[2];
+}
+
 static struct bfq_entity *bfq_lookup_next_entity(struct bfq_sched_data *sd,
                                                 bool expiration);
 
@@ -1513,7 +1519,7 @@ struct bfq_queue *bfq_get_next_queue(struct bfq_data *bfqd)
        struct bfq_sched_data *sd;
        struct bfq_queue *bfqq;
 
-       if (bfqd->busy_queues == 0)
+       if (bfq_tot_busy_queues(bfqd) == 0)
                return NULL;
 
        /*
@@ -1665,10 +1671,7 @@ void bfq_del_bfqq_busy(struct bfq_data *bfqd, struct bfq_queue *bfqq,
 
        bfq_clear_bfqq_busy(bfqq);
 
-       bfqd->busy_queues--;
-
-       if (!bfqq->dispatched)
-               bfq_weights_tree_remove(bfqd, bfqq);
+       bfqd->busy_queues[bfqq->ioprio_class - 1]--;
 
        if (bfqq->wr_coeff > 1)
                bfqd->wr_busy_queues--;
@@ -1676,6 +1679,9 @@ void bfq_del_bfqq_busy(struct bfq_data *bfqd, struct bfq_queue *bfqq,
        bfqg_stats_update_dequeue(bfqq_group(bfqq));
 
        bfq_deactivate_bfqq(bfqd, bfqq, true, expiration);
+
+       if (!bfqq->dispatched)
+               bfq_weights_tree_remove(bfqd, bfqq);
 }
 
 /*
@@ -1688,7 +1694,7 @@ void bfq_add_bfqq_busy(struct bfq_data *bfqd, struct bfq_queue *bfqq)
        bfq_activate_bfqq(bfqd, bfqq);
 
        bfq_mark_bfqq_busy(bfqq);
-       bfqd->busy_queues++;
+       bfqd->busy_queues[bfqq->ioprio_class - 1]++;
 
        if (!bfqq->dispatched)
                if (bfqq->wr_coeff == 1)