perf stat: Don't report a null stalled cycles per insn metric
[linux-2.6-microblaze.git] / block / bfq-wf2q.c
index ffe9ce9..eb0e2a6 100644 (file)
@@ -533,7 +533,9 @@ static void bfq_get_entity(struct bfq_entity *entity)
                bfqq->ref++;
                bfq_log_bfqq(bfqq->bfqd, bfqq, "get_entity: %p %d",
                             bfqq, bfqq->ref);
-       }
+       } else
+               bfqg_and_blkg_get(container_of(entity, struct bfq_group,
+                                              entity));
 }
 
 /**
@@ -645,10 +647,16 @@ static void bfq_forget_entity(struct bfq_service_tree *st,
 {
        struct bfq_queue *bfqq = bfq_entity_to_bfqq(entity);
 
-       entity->on_st = false;
+       entity->on_st_or_in_serv = false;
        st->wsum -= entity->weight;
-       if (bfqq && !is_in_service)
+       if (is_in_service)
+               return;
+
+       if (bfqq)
                bfq_put_queue(bfqq);
+       else
+               bfqg_and_blkg_put(container_of(entity, struct bfq_group,
+                                              entity));
 }
 
 /**
@@ -999,7 +1007,7 @@ static void __bfq_activate_entity(struct bfq_entity *entity,
                 */
                bfq_get_entity(entity);
 
-               entity->on_st = true;
+               entity->on_st_or_in_serv = true;
        }
 
 #ifdef CONFIG_BFQ_GROUP_IOSCHED
@@ -1165,7 +1173,10 @@ bool __bfq_deactivate_entity(struct bfq_entity *entity, bool ins_into_idle_tree)
        struct bfq_service_tree *st;
        bool is_in_service;
 
-       if (!entity->on_st) /* entity never activated, or already inactive */
+       if (!entity->on_st_or_in_serv) /*
+                                       * entity never activated, or
+                                       * already inactive
+                                       */
                return false;
 
        /*
@@ -1620,7 +1631,7 @@ bool __bfq_bfqd_reset_in_service(struct bfq_data *bfqd)
         * service tree either, then release the service reference to
         * the queue it represents (taken with bfq_get_entity).
         */
-       if (!in_serv_entity->on_st) {
+       if (!in_serv_entity->on_st_or_in_serv) {
                /*
                 * If no process is referencing in_serv_bfqq any
                 * longer, then the service reference may be the only