aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@intel.com>2012-02-08 02:51:16 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2012-03-19 04:54:36 -0400
commitd3ee42944393895374e2f321f54e9a701e9f965c (patch)
treea281e0308cd66eddce36d7958f935059ca1358d6 /drivers/net/ethernet
parent244e27ad4d9e561c688c4da3383fec890be832d0 (diff)
ixgbe: Update layout of ixgbe_ring structure to improve cache performance
This change makes it so that only the 2nd cache line in the ring structure should see frequent updates. The advantage to this is that it should reduce the amount of cross CPU cache bouncing since only the 2nd cache line will be changing between most network transactions. Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Tested-by: Stephen Ko <stephen.s.ko@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe.h18
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
index 468cb9048dc8..862041419635 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
@@ -208,15 +208,18 @@ enum ixgbe_ring_state_t {
208 clear_bit(__IXGBE_RX_RSC_ENABLED, &(ring)->state) 208 clear_bit(__IXGBE_RX_RSC_ENABLED, &(ring)->state)
209struct ixgbe_ring { 209struct ixgbe_ring {
210 struct ixgbe_ring *next; /* pointer to next ring in q_vector */ 210 struct ixgbe_ring *next; /* pointer to next ring in q_vector */
211 struct ixgbe_q_vector *q_vector; /* backpointer to host q_vector */
212 struct net_device *netdev; /* netdev ring belongs to */
213 struct device *dev; /* device for DMA mapping */
211 void *desc; /* descriptor ring memory */ 214 void *desc; /* descriptor ring memory */
212 struct device *dev; /* device for DMA mapping */
213 struct net_device *netdev; /* netdev ring belongs to */
214 union { 215 union {
215 struct ixgbe_tx_buffer *tx_buffer_info; 216 struct ixgbe_tx_buffer *tx_buffer_info;
216 struct ixgbe_rx_buffer *rx_buffer_info; 217 struct ixgbe_rx_buffer *rx_buffer_info;
217 }; 218 };
218 unsigned long state; 219 unsigned long state;
219 u8 __iomem *tail; 220 u8 __iomem *tail;
221 dma_addr_t dma; /* phys. address of descriptor ring */
222 unsigned int size; /* length in bytes */
220 223
221 u16 count; /* amount of descriptors */ 224 u16 count; /* amount of descriptors */
222 225
@@ -226,17 +229,17 @@ struct ixgbe_ring {
226 * associated with this ring, which is 229 * associated with this ring, which is
227 * different for DCB and RSS modes 230 * different for DCB and RSS modes
228 */ 231 */
232 u16 next_to_use;
233 u16 next_to_clean;
234
229 union { 235 union {
236 u16 next_to_alloc;
230 struct { 237 struct {
231 u8 atr_sample_rate; 238 u8 atr_sample_rate;
232 u8 atr_count; 239 u8 atr_count;
233 }; 240 };
234 u16 next_to_alloc;
235 }; 241 };
236 242
237 u16 next_to_use;
238 u16 next_to_clean;
239
240 u8 dcb_tc; 243 u8 dcb_tc;
241 struct ixgbe_queue_stats stats; 244 struct ixgbe_queue_stats stats;
242 struct u64_stats_sync syncp; 245 struct u64_stats_sync syncp;
@@ -244,9 +247,6 @@ struct ixgbe_ring {
244 struct ixgbe_tx_queue_stats tx_stats; 247 struct ixgbe_tx_queue_stats tx_stats;
245 struct ixgbe_rx_queue_stats rx_stats; 248 struct ixgbe_rx_queue_stats rx_stats;
246 }; 249 };
247 unsigned int size; /* length in bytes */
248 dma_addr_t dma; /* phys. address of descriptor ring */
249 struct ixgbe_q_vector *q_vector; /* back-pointer to host q_vector */
250} ____cacheline_internodealigned_in_smp; 250} ____cacheline_internodealigned_in_smp;
251 251
252enum ixgbe_ring_f_enum { 252enum ixgbe_ring_f_enum {