• Patrick McHardy's avatar
    net 01/05: fib_rules: rearrange struct fib_rule · d2858340
    Patrick McHardy authored
    commit b8952893d5d86f69c4e499d191b98c6658f64b0f
    Author: Patrick McHardy <kaber@trash.net>
    Date:   Thu Dec 3 12:05:22 2009 +0100
    
        net: fib_rules: rearrange struct fib_rule
    
        The ifname member is only used to resolve interface names and is not needed
        during rule lookups. The target and ctarget members however are used during
        rule lookups and are currently located in a second cacheline.
    
        Move ifname further to the end to make sure both target and ctarget are
        located in the same cacheline as other members used during rule lookups.
    
        The layout on 64 bit changes from:
    
        struct fib_rule {
        	...
                u32                        table;                /*    56     4 */
                u8                         action;               /*    60     1 */
    
                /* XXX 3 bytes hole, try to pack */
    
                /* --- cacheline 1 boundary (64 bytes) --- */
                u32                        target;               /*    64     4 */
    
                /* XXX 4 bytes hole, try to pack */
    
                struct fib_rule *          ctarget;              /*    72     8 */
                struct rcu_head            rcu;                  /*    80    16 */
                struct net *               fr_net;               /*    96     8 */
        };
    
        to:
    
        struct fib_rule {
        	...
                u32                        table;                /*    40     4 */
                u8                         action;               /*    44     1 */
    
                /* XXX 3 bytes hole, try to pack */
    
                u32                        target;               /*    48     4 */
    
                /* XXX 4 bytes hole, try to pack */
    
                struct fib_rule *          ctarget;              /*    56     8 */
                /* --- cacheline 1 boundary (64 bytes) --- */
                char                       ifname[16];           /*    64    16 */
                struct rcu_head            rcu;                  /*    80    16 */
                struct net *               fr_net;               /*    96     8 */
    
        };
    Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d2858340
fib_rules.h 2.77 KB