forked from Minki/linux
net: dsa: move dsa_switch_tree :: ports and lags to first cache line
dst->ports is accessed most notably by dsa_master_find_slave(), which is invoked in the RX path. dst->lags is accessed by dsa_lag_dev(), which is invoked in the RX path of tag_dsa.c. dst->tag_ops, dst->default_proto and dst->pd don't need to be in the first cache line, so they are moved out by this change. Before: pahole -C dsa_switch_tree net/dsa/slave.o struct dsa_switch_tree { struct list_head list; /* 0 16 */ struct raw_notifier_head nh; /* 16 8 */ unsigned int index; /* 24 4 */ struct kref refcount; /* 28 4 */ bool setup; /* 32 1 */ /* XXX 7 bytes hole, try to pack */ const struct dsa_device_ops * tag_ops; /* 40 8 */ enum dsa_tag_protocol default_proto; /* 48 4 */ /* XXX 4 bytes hole, try to pack */ struct dsa_platform_data * pd; /* 56 8 */ /* --- cacheline 1 boundary (64 bytes) --- */ struct list_head ports; /* 64 16 */ struct list_head rtable; /* 80 16 */ struct net_device * * lags; /* 96 8 */ unsigned int lags_len; /* 104 4 */ unsigned int last_switch; /* 108 4 */ /* size: 112, cachelines: 2, members: 13 */ /* sum members: 101, holes: 2, sum holes: 11 */ /* last cacheline: 48 bytes */ }; After: pahole -C dsa_switch_tree net/dsa/slave.o struct dsa_switch_tree { struct list_head list; /* 0 16 */ struct list_head ports; /* 16 16 */ struct raw_notifier_head nh; /* 32 8 */ unsigned int index; /* 40 4 */ struct kref refcount; /* 44 4 */ struct net_device * * lags; /* 48 8 */ bool setup; /* 56 1 */ /* XXX 7 bytes hole, try to pack */ /* --- cacheline 1 boundary (64 bytes) --- */ const struct dsa_device_ops * tag_ops; /* 64 8 */ enum dsa_tag_protocol default_proto; /* 72 4 */ /* XXX 4 bytes hole, try to pack */ struct dsa_platform_data * pd; /* 80 8 */ struct list_head rtable; /* 88 16 */ unsigned int lags_len; /* 104 4 */ unsigned int last_switch; /* 108 4 */ /* size: 112, cachelines: 2, members: 13 */ /* sum members: 101, holes: 2, sum holes: 11 */ /* last cacheline: 48 bytes */ }; Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
258030acc9
commit
b035c88c6a
@ -119,6 +119,9 @@ struct dsa_netdevice_ops {
|
||||
struct dsa_switch_tree {
|
||||
struct list_head list;
|
||||
|
||||
/* List of switch ports */
|
||||
struct list_head ports;
|
||||
|
||||
/* Notifier chain for switch-wide events */
|
||||
struct raw_notifier_head nh;
|
||||
|
||||
@ -128,6 +131,11 @@ struct dsa_switch_tree {
|
||||
/* Number of switches attached to this tree */
|
||||
struct kref refcount;
|
||||
|
||||
/* Maps offloaded LAG netdevs to a zero-based linear ID for
|
||||
* drivers that need it.
|
||||
*/
|
||||
struct net_device **lags;
|
||||
|
||||
/* Has this tree been applied to the hardware? */
|
||||
bool setup;
|
||||
|
||||
@ -145,16 +153,10 @@ struct dsa_switch_tree {
|
||||
*/
|
||||
struct dsa_platform_data *pd;
|
||||
|
||||
/* List of switch ports */
|
||||
struct list_head ports;
|
||||
|
||||
/* List of DSA links composing the routing table */
|
||||
struct list_head rtable;
|
||||
|
||||
/* Maps offloaded LAG netdevs to a zero-based linear ID for
|
||||
* drivers that need it.
|
||||
*/
|
||||
struct net_device **lags;
|
||||
/* Length of "lags" array */
|
||||
unsigned int lags_len;
|
||||
|
||||
/* Track the largest switch index within a tree */
|
||||
|
Loading…
Reference in New Issue
Block a user