net: thunderx: Adjust nicvf structure to reduce cache misses
authorSunil Goutham <sgoutham@cavium.com>
Mon, 14 Mar 2016 11:06:15 +0000 (16:36 +0530)
committerDavid S. Miller <davem@davemloft.net>
Mon, 14 Mar 2016 16:33:36 +0000 (12:33 -0400)
Adjusted nicvf structure such that all elements used in hot
path like napi, xmit e.t.c fall into same cache line. This reduced
no of cache misses and resulted in ~2% increase in no of packets
handled on a core.

Also modified elements with :1 notation to boolean, to be
consistent with other element definitions.

Signed-off-by: Sunil Goutham <sgoutham@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/cavium/thunder/nic.h

index 872b22d831ee69f3b91ad62c5c7be83b6ed8eb26..83025bb4737c47c44b2056190b68c0acc5461ed9 100644 (file)
@@ -272,46 +272,54 @@ struct nicvf {
        struct nicvf            *pnicvf;
        struct net_device       *netdev;
        struct pci_dev          *pdev;
+       void __iomem            *reg_base;
+       struct queue_set        *qs;
+       struct nicvf_cq_poll    *napi[8];
        u8                      vf_id;
-       u8                      node;
-       u8                      tns_mode:1;
-       u8                      sqs_mode:1;
-       u8                      loopback_supported:1;
+       u8                      sqs_id;
+       bool                    sqs_mode;
        bool                    hw_tso;
-       u16                     mtu;
-       struct queue_set        *qs;
+
+       /* Receive buffer alloc */
+       u32                     rb_page_offset;
+       u16                     rb_pageref;
+       bool                    rb_alloc_fail;
+       bool                    rb_work_scheduled;
+       struct page             *rb_page;
+       struct delayed_work     rbdr_work;
+       struct tasklet_struct   rbdr_task;
+
+       /* Secondary Qset */
+       u8                      sqs_count;
 #define        MAX_SQS_PER_VF_SINGLE_NODE              5
 #define        MAX_SQS_PER_VF                          11
-       u8                      sqs_id;
-       u8                      sqs_count; /* Secondary Qset count */
        struct nicvf            *snicvf[MAX_SQS_PER_VF];
+
+       /* Queue count */
        u8                      rx_queues;
        u8                      tx_queues;
        u8                      max_queues;
-       void __iomem            *reg_base;
+
+       u8                      node;
+       u8                      cpi_alg;
+       u16                     mtu;
        bool                    link_up;
        u8                      duplex;
        u32                     speed;
-       struct page             *rb_page;
-       u32                     rb_page_offset;
-       u16                     rb_pageref;
-       bool                    rb_alloc_fail;
-       bool                    rb_work_scheduled;
-       struct delayed_work     rbdr_work;
-       struct tasklet_struct   rbdr_task;
-       struct tasklet_struct   qs_err_task;
-       struct tasklet_struct   cq_task;
-       struct nicvf_cq_poll    *napi[8];
+       bool                    tns_mode;
+       bool                    loopback_supported;
        struct nicvf_rss_info   rss_info;
-       u8                      cpi_alg;
+       struct tasklet_struct   qs_err_task;
+       struct work_struct      reset_task;
+
        /* Interrupt coalescing settings */
        u32                     cq_coalesce_usecs;
-
        u32                     msg_enable;
+
+       /* Stats */
        struct nicvf_hw_stats   hw_stats;
        struct nicvf_drv_stats  drv_stats;
        struct bgx_stats        bgx_stats;
-       struct work_struct      reset_task;
 
        /* MSI-X  */
        bool                    msix_enabled;