• Alexander Duyck's avatar
    fib_trie: Update meaning of pos to represent unchecked bits · e9b44019
    Alexander Duyck authored
    This change moves the pos value to the other side of the "bits" field.  By
    doing this it actually simplifies a significant amount of code in the trie.
    
    For example when halving a tree we know that the bit lost exists at
    oldnode->pos, and if we inflate the tree the new bit being add is at
    tn->pos.  Previously to find those bits you would have to subtract pos and
    bits from the keylength or start with a value of (1 << 31) and then shift
    that.
    
    There are a number of spots throughout the code that benefit from this.  In
    the case of the hot-path searches the main advantage is that we can drop 2
    or more operations from the search path as we no longer need to compute the
    value for the index to be shifted by and can instead just use the raw pos
    value.
    
    In addition the tkey_extract_bits is now defunct and can be replaced by
    get_index since the two operations were doing the same thing, but now
    get_index does it much more quickly as it is only an xor and shift versus a
    pair of shifts and a subtraction.
    Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    e9b44019
fib_trie.c 56.5 KB