Index: sys/dev/cxgbe/adapter.h =================================================================== --- sys/dev/cxgbe/adapter.h +++ sys/dev/cxgbe/adapter.h @@ -670,20 +670,27 @@ #define INVALID_NM_RXQ_CNTXT_ID ((uint16_t)(-1)) struct sge_nm_rxq { - volatile int nm_state; /* NM_OFF, NM_ON, or NM_BUSY */ - struct vi_info *vi; + /* Cacheline exclusively used by t4_nm_intr */ + struct vi_info *vi; struct iq_desc *iq_desc; + uint16_t iq_abs_id; uint16_t iq_cntxt_id; uint16_t iq_cidx; uint16_t iq_sidx; uint8_t iq_gen; + /* Cacheline with actual contended fields */ + + uint32_t fl_cidx __aligned(CACHE_LINE_SIZE); + uint32_t fl_pidx; + + /* Cacheline with mostly read fields */ + + volatile int nm_state __aligned(CACHE_LINE_SIZE); /* NM_OFF, NM_ON, or NM_BUSY */ __be64 *fl_desc; uint16_t fl_cntxt_id; - uint32_t fl_cidx; - uint32_t fl_pidx; uint32_t fl_sidx; uint32_t fl_db_val; u_int fl_hwidx:4;