gianfar: Optimize struct gfar_priv_tx_q for two cache lines
authorClaudiu Manoil <claudiu.manoil@freescale.com>
Tue, 29 Jan 2013 03:55:10 +0000 (03:55 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 29 Jan 2013 20:22:02 +0000 (15:22 -0500)
Resize and regroup structure members to eliminate memory holes and
to pack the structure into 2 cache lines (from 3).
tx_ring_size was resized from 4 to 2 bytes and few members were re-grouped
in order to eliminate byte holes and achieve compactness.
Where possible, few members were grouped according to their usage and access
order (i.e. start_xmit vs. clean_tx_ring members), less important members
were pushed at the end.

Signed-off-by: Claudiu Manoil <claudiu.manoil@freescale.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/gianfar.h

index 91bb2de..045c0d2 100644 (file)
@@ -935,26 +935,25 @@ struct tx_q_stats {
  *     @txtime: coalescing value if based on time
  */
 struct gfar_priv_tx_q {
+       /* cacheline 1 */
        spinlock_t txlock __attribute__ ((aligned (SMP_CACHE_BYTES)));
-       struct sk_buff ** tx_skbuff;
-       /* Buffer descriptor pointers */
-       dma_addr_t tx_bd_dma_base;
        struct  txbd8 *tx_bd_base;
        struct  txbd8 *cur_tx;
-       struct  txbd8 *dirty_tx;
+       unsigned int num_txbdfree;
+       unsigned short skb_curtx;
+       unsigned short tx_ring_size;
        struct tx_q_stats stats;
-       struct  net_device *dev;
        struct gfar_priv_grp *grp;
-       u16     skb_curtx;
-       u16     skb_dirtytx;
-       u16     qindex;
-       unsigned int tx_ring_size;
-       unsigned int num_txbdfree;
+       /* cacheline 2 */
+       struct net_device *dev;
+       struct sk_buff **tx_skbuff;
+       struct  txbd8 *dirty_tx;
+       unsigned short skb_dirtytx;
+       unsigned short qindex;
        /* Configuration info for the coalescing features */
-       unsigned char txcoalescing;
+       unsigned int txcoalescing;
        unsigned long txic;
-       unsigned short txcount;
-       unsigned short txtime;
+       dma_addr_t tx_bd_dma_base;
 };
 
 /*