mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 08:33:17 +02:00
ice: reduce size of queue context fields
The ice_rlan_ctx and ice_tlan_ctx structures have some fields which are intentionally sized larger than necessary relative to the packed sizes the data must fit into. This was done because the original ice_set_ctx() function and its helpers did not correctly handle packing when the packed bits straddled a byte. This is no longer the case with the use of the <linux/packing.h> implementation. Save some bytes in these structures by sizing the variables to the number of bytes the actual bitpacked fields fit into. There are a couple of gaps left in the structure, which is a result of the fields being in the order they appear in the packed bit layout, but where alignment forces some extra gaps. We could fix this, saving ~8 bytes from each structure. However, these structures are not used heavily, and the resulting savings is minimal: $ bloat-o-meter ice-before-reorder.ko ice-after-reorder.ko add/remove: 0/0 grow/shrink: 1/1 up/down: 26/-70 (-44) Function old new delta ice_vsi_cfg_txq 1873 1899 +26 ice_setup_rx_ctx.constprop 1529 1459 -70 Total: Before=1459555, After=1459511, chg -0.00% Thus, the fields are left in the same order as the packed bit layout, despite the gaps this causes. Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com> Link: https://patch.msgid.link/20241210-packing-pack-fields-and-ice-implementation-v10-8-ee56a47479ac@intel.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
dc4305be46
commit
f72588a426
|
|
@ -375,23 +375,17 @@ enum ice_rx_flex_desc_status_error_1_bits {
|
|||
#define ICE_TX_DRBELL_Q_CTX_SIZE_DWORDS 5
|
||||
#define GLTCLAN_CQ_CNTX(i, CQ) (GLTCLAN_CQ_CNTX0(CQ) + ((i) * 0x0800))
|
||||
|
||||
/* RLAN Rx queue context data
|
||||
*
|
||||
* The sizes of the variables may be larger than needed due to crossing byte
|
||||
* boundaries. If we do not have the width of the variable set to the correct
|
||||
* size then we could end up shifting bits off the top of the variable when the
|
||||
* variable is at the top of a byte and crosses over into the next byte.
|
||||
*/
|
||||
/* RLAN Rx queue context data */
|
||||
struct ice_rlan_ctx {
|
||||
u16 head;
|
||||
u16 cpuid; /* bigger than needed, see above for reason */
|
||||
u8 cpuid;
|
||||
#define ICE_RLAN_BASE_S 7
|
||||
u64 base;
|
||||
u16 qlen;
|
||||
#define ICE_RLAN_CTX_DBUF_S 7
|
||||
u16 dbuf; /* bigger than needed, see above for reason */
|
||||
u8 dbuf;
|
||||
#define ICE_RLAN_CTX_HBUF_S 6
|
||||
u16 hbuf; /* bigger than needed, see above for reason */
|
||||
u8 hbuf;
|
||||
u8 dtype;
|
||||
u8 dsize;
|
||||
u8 crcstrip;
|
||||
|
|
@ -399,12 +393,12 @@ struct ice_rlan_ctx {
|
|||
u8 hsplit_0;
|
||||
u8 hsplit_1;
|
||||
u8 showiv;
|
||||
u32 rxmax; /* bigger than needed, see above for reason */
|
||||
u16 rxmax;
|
||||
u8 tphrdesc_ena;
|
||||
u8 tphwdesc_ena;
|
||||
u8 tphdata_ena;
|
||||
u8 tphhead_ena;
|
||||
u16 lrxqthresh; /* bigger than needed, see above for reason */
|
||||
u8 lrxqthresh;
|
||||
u8 prefena; /* NOTE: normally must be set to 1 at init */
|
||||
};
|
||||
|
||||
|
|
@ -535,18 +529,12 @@ enum ice_tx_ctx_desc_eipt_offload {
|
|||
#define ICE_LAN_TXQ_MAX_QGRPS 127
|
||||
#define ICE_LAN_TXQ_MAX_QDIS 1023
|
||||
|
||||
/* Tx queue context data
|
||||
*
|
||||
* The sizes of the variables may be larger than needed due to crossing byte
|
||||
* boundaries. If we do not have the width of the variable set to the correct
|
||||
* size then we could end up shifting bits off the top of the variable when the
|
||||
* variable is at the top of a byte and crosses over into the next byte.
|
||||
*/
|
||||
/* Tx queue context data */
|
||||
struct ice_tlan_ctx {
|
||||
#define ICE_TLAN_CTX_BASE_S 7
|
||||
u64 base; /* base is defined in 128-byte units */
|
||||
u8 port_num;
|
||||
u16 cgd_num; /* bigger than needed, see above for reason */
|
||||
u8 cgd_num;
|
||||
u8 pf_num;
|
||||
u16 vmvf_num;
|
||||
u8 vmvf_type;
|
||||
|
|
@ -557,7 +545,7 @@ struct ice_tlan_ctx {
|
|||
u8 tsyn_ena;
|
||||
u8 internal_usage_flag;
|
||||
u8 alt_vlan;
|
||||
u16 cpuid; /* bigger than needed, see above for reason */
|
||||
u8 cpuid;
|
||||
u8 wb_mode;
|
||||
u8 tphrd_desc;
|
||||
u8 tphrd;
|
||||
|
|
@ -566,7 +554,7 @@ struct ice_tlan_ctx {
|
|||
u16 qnum_in_func;
|
||||
u8 itr_notification_mode;
|
||||
u8 adjust_prof_id;
|
||||
u32 qlen; /* bigger than needed, see above for reason */
|
||||
u16 qlen;
|
||||
u8 quanta_prof_idx;
|
||||
u8 tso_ena;
|
||||
u16 tso_qnum;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user