net/ice/base: optimize data structures
authorLeyi Rong <leyi.rong@intel.com>
Wed, 19 Jun 2019 15:18:17 +0000 (23:18 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 28 Jun 2019 18:31:48 +0000 (20:31 +0200)
Move a bunch of members around to make more efficient use of
memory, eliminating holes where possible. None of these members
are hot path so cache line alignment is not very important here.

Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
Signed-off-by: Leyi Rong <leyi.rong@intel.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
drivers/net/ice/base/ice_controlq.h
drivers/net/ice/base/ice_flex_type.h
drivers/net/ice/base/ice_flow.c
drivers/net/ice/base/ice_flow.h

index 182db67..21c8722 100644 (file)
@@ -81,6 +81,7 @@ struct ice_rq_event_info {
 /* Control Queue information */
 struct ice_ctl_q_info {
        enum ice_ctl_q qtype;
+       enum ice_aq_err rq_last_status; /* last status on receive queue */
        struct ice_ctl_q_ring rq;       /* receive queue */
        struct ice_ctl_q_ring sq;       /* send queue */
        u32 sq_cmd_timeout;             /* send queue cmd write back timeout */
@@ -88,10 +89,9 @@ struct ice_ctl_q_info {
        u16 num_sq_entries;             /* send queue depth */
        u16 rq_buf_size;                /* receive queue buffer size */
        u16 sq_buf_size;                /* send queue buffer size */
+       enum ice_aq_err sq_last_status; /* last status on send queue */
        struct ice_lock sq_lock;                /* Send queue lock */
        struct ice_lock rq_lock;                /* Receive queue lock */
-       enum ice_aq_err sq_last_status; /* last status on send queue */
-       enum ice_aq_err rq_last_status; /* last status on receive queue */
 };
 
 #endif /* _ICE_CONTROLQ_H_ */
index d23b2ae..dca5cf2 100644 (file)
@@ -5,7 +5,7 @@
 #ifndef _ICE_FLEX_TYPE_H_
 #define _ICE_FLEX_TYPE_H_
 
-#define ICE_FV_OFFSET_INVAL    0x1FF
+#define ICE_FV_OFFSET_INVAL    0x1FF
 
 #pragma pack(1)
 /* Extraction Sequence (Field Vector) Table */
@@ -14,7 +14,6 @@ struct ice_fv_word {
        u16 off;                /* Offset within the protocol header */
        u8 resvrd;
 };
-
 #pragma pack()
 
 #define ICE_MAX_FV_WORDS 48
@@ -367,7 +366,6 @@ struct ice_boost_key_value {
        __le16 hv_src_port_key;
        u8 tcam_search_key;
 };
-
 #pragma pack()
 
 struct ice_boost_key {
@@ -406,7 +404,6 @@ struct ice_xlt1_section {
        __le16 offset;
        u8 value[1];
 };
-
 #pragma pack()
 
 #define ICE_XLT1_SIZE(n)       (sizeof(struct ice_xlt1_section) + \
@@ -467,19 +464,19 @@ struct ice_tunnel_type_scan {
 
 struct ice_tunnel_entry {
        enum ice_tunnel_type type;
-       u8 valid;
-       u8 in_use;
-       u8 marked;
        u16 boost_addr;
        u16 port;
        struct ice_boost_tcam_entry *boost_entry;
+       u8 valid;
+       u8 in_use;
+       u8 marked;
 };
 
 #define ICE_TUNNEL_MAX_ENTRIES 16
 
 struct ice_tunnel_table {
-       u16 count;
        struct ice_tunnel_entry tbl[ICE_TUNNEL_MAX_ENTRIES];
+       u16 count;
 };
 
 struct ice_pkg_es {
@@ -511,13 +508,13 @@ struct ice_es {
 #define ICE_DEFAULT_PTG        0
 
 struct ice_ptg_entry {
-       u8 in_use;
        struct ice_ptg_ptype *first_ptype;
+       u8 in_use;
 };
 
 struct ice_ptg_ptype {
-       u8 ptg;
        struct ice_ptg_ptype *next_ptype;
+       u8 ptg;
 };
 
 #define ICE_MAX_TCAM_PER_PROFILE       8
@@ -535,9 +532,9 @@ struct ice_prof_map {
 #define ICE_INVALID_TCAM       0xFFFF
 
 struct ice_tcam_inf {
+       u16 tcam_idx;
        u8 ptg;
        u8 prof_id;
-       u16 tcam_idx;
        u8 in_use;
 };
 
@@ -550,16 +547,16 @@ struct ice_vsig_prof {
 };
 
 struct ice_vsig_entry {
-       u8 in_use;
        struct LIST_HEAD_TYPE prop_lst;
        struct ice_vsig_vsi *first_vsi;
+       u8 in_use;
 };
 
 struct ice_vsig_vsi {
+       struct ice_vsig_vsi *next_vsi;
+       u32 prop_mask;
        u16 changed;
        u16 vsig;
-       u32 prop_mask;
-       struct ice_vsig_vsi *next_vsi;
 };
 
 #define ICE_XLT1_CNT   1024
@@ -567,11 +564,11 @@ struct ice_vsig_vsi {
 
 /* XLT1 Table */
 struct ice_xlt1 {
-       u32 sid;
-       u16 count;
        struct ice_ptg_entry *ptg_tbl;
        struct ice_ptg_ptype *ptypes;
        u8 *t;
+       u32 sid;
+       u16 count;
 };
 
 #define ICE_XLT2_CNT   768
@@ -591,11 +588,11 @@ struct ice_xlt1 {
 
 /* XLT2 Table */
 struct ice_xlt2 {
-       u32 sid;
-       u16 count;
        struct ice_vsig_entry *vsig_tbl;
        struct ice_vsig_vsi *vsis;
        u16 *t;
+       u32 sid;
+       u16 count;
 };
 
 /* Extraction sequence - list of match fields:
@@ -641,21 +638,20 @@ struct ice_prof_id_section {
        __le16 count;
        struct ice_prof_tcam_entry entry[1];
 };
-
 #pragma pack()
 
 struct ice_prof_tcam {
        u32 sid;
        u16 count;
        u16 max_prof_id;
-       u8 cdid_bits; /* # cdid bits to use in key, 0, 2, 4, or 8 */
        struct ice_prof_tcam_entry *t;
+       u8 cdid_bits; /* # cdid bits to use in key, 0, 2, 4, or 8 */
 };
 
 struct ice_prof_redir {
+       u8 *t;
        u32 sid;
        u16 count;
-       u8 *t;
 };
 
 /* Tables per block */
index 825c53b..9f3f33c 100644 (file)
@@ -284,10 +284,10 @@ static const u32 ice_ptypes_mac_il[] = {
 /* Manage parameters and info. used during the creation of a flow profile */
 struct ice_flow_prof_params {
        enum ice_block blk;
-       struct ice_flow_prof *prof;
-
        u16 entry_length; /* # of bytes formatted entry will require */
        u8 es_cnt;
+       struct ice_flow_prof *prof;
+
        /* For ACL, the es[0] will have the data of ICE_RX_MDID_PKT_FLAGS_15_0
         * This will give us the direction flags.
         */
index 4fa1306..c6442dc 100644 (file)
@@ -225,17 +225,15 @@ struct ice_flow_entry {
        struct LIST_ENTRY_TYPE l_entry;
 
        u64 id;
-       u16 vsi_handle;
-       enum ice_flow_priority priority;
        struct ice_flow_prof *prof;
-
+       /* Action list */
+       struct ice_flow_action *acts;
        /* Flow entry's content */
-       u16 entry_sz;
        void *entry;
-
-       /* Action list */
+       enum ice_flow_priority priority;
+       u16 vsi_handle;
+       u16 entry_sz;
        u8 acts_cnt;
-       struct ice_flow_action *acts;
 };
 
 #define ICE_FLOW_ENTRY_HNDL(e) ((unsigned long)e)
@@ -246,12 +244,13 @@ struct ice_flow_prof {
 
        u64 id;
        enum ice_flow_dir dir;
+       u8 segs_cnt;
+       u8 acts_cnt;
 
        /* Keep track of flow entries associated with this flow profile */
        struct ice_lock entries_lock;
        struct LIST_HEAD_TYPE entries;
 
-       u8 segs_cnt;
        struct ice_flow_seg_info segs[ICE_FLOW_SEG_MAX];
 
        /* software VSI handles referenced by this flow profile */
@@ -264,7 +263,6 @@ struct ice_flow_prof {
        } cfg;
 
        /* Default actions */
-       u8 acts_cnt;
        struct ice_flow_action *acts;
 };