• Paolo Valente's avatar
    pkt_sched: sch_qfq: improve efficiency of make_eligible · 87f1369d
    Paolo Valente authored
    In make_eligible, a mask is used to decide which groups must become eligible:
    the i-th group becomes eligible only if the i-th bit of the mask (from the
    right) is set. The mask is computed by left-shifting a 1 by a given number of
    places, and decrementing the result.  The shift is performed on a ULL to avoid
    problems in case the number of places to shift is higher than 31.  On a 32-bit
    machine, this is more costly than working on an UL. This patch replaces such a
    costly operation with two cheaper branches.
    
    The trick is based on the following fact: in case of a shift of at least 32
    places, the resulting mask has at least the 32 less significant bits set,
    whereas the total number of groups is lower than 32.  As a consequence, in this
    case it is enough to just set the 32 less significant bits of the mask with a
    cheaper ~0UL. In the other case, the shift can be safely performed on a UL.
    Reported-by: default avatarDavid S. Miller <davem@davemloft.net>
    Reported-by: default avatarDavid Laight <David.Laight@ACULAB.COM>
    Signed-off-by: default avatarPaolo Valente <paolo.valente@unimore.it>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    87f1369d
sch_qfq.c 41.4 KB