On 12/18/18 11:19 AM, Paolo Valente wrote: > > >> Il giorno 18 dic 2018, alle ore 19:08, Jens Axboe <axboe@xxxxxxxxx> ha scritto: >> >> On 12/18/18 11:04 AM, Paolo Valente wrote: >>> static bool bfq_symmetric_scenario(struct bfq_data *bfqd) >>> { >>> - return !bfq_varied_queue_weights_or_active_groups(bfqd); >>> + /* >>> + * For queue weights to differ, queue_weights_tree must contain >>> + * at least two nodes. >>> + */ >>> + bool varied_queue_weights = !RB_EMPTY_ROOT(&bfqd->queue_weights_tree) && >>> + (bfqd->queue_weights_tree.rb_node->rb_left || >>> + bfqd->queue_weights_tree.rb_node->rb_right); >>> + >>> + bool multiple_classes_busy = >>> + (bfqd->busy_queues[0] & bfqd->busy_queues[1]) | >>> + (bfqd->busy_queues[0] & bfqd->busy_queues[2]) | >>> + (bfqd->busy_queues[1] & bfqd->busy_queues[2]); >> >> I don't think this does what you want it to, looks like these should be >> logical AND and OR. >> > > Absolutely, sorry. Fortunately, the end result is still correct :) Is it? What if ->busy_queues[0] is 1 and ->busy_queues[1] is 2. You'd expect the first comparison to be true, but it'd be false. Ditto for the rest of them, of course. -- Jens Axboe