diff options
author | Eric Dumazet <edumazet@google.com> | 2014-10-05 05:35:10 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-10-06 01:04:15 -0400 |
commit | 98b1634941e3efb0334f794efc79702839993d86 (patch) | |
tree | d5cc5f5e6fd9984c3ec59652de96fe9824157d22 /drivers/net/ethernet/mellanox | |
parent | 7dfa4b414d4eec8da56e44fb2b4aea3e549b092f (diff) |
net/mlx4_en: Align tx path structures to cache lines
Reorganize struct mlx4_en_tx_ring to have:
- One cache line containing last_nr_txbb & cons & wake_queue, used by tx
completion.
- One cache line containing fields dirtied by mlx4_en_xmit()
- Following part is read mostly and shared by cpus.
Align struct mlx4_en_tx_info to a cache line
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Amir Vadai <amirv@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/mellanox')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 86 |
1 files changed, 46 insertions, 40 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h index e54b653de3d4..b7bde95e05fe 100644 --- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | |||
@@ -216,13 +216,13 @@ enum cq_type { | |||
216 | 216 | ||
217 | struct mlx4_en_tx_info { | 217 | struct mlx4_en_tx_info { |
218 | struct sk_buff *skb; | 218 | struct sk_buff *skb; |
219 | u32 nr_txbb; | 219 | u32 nr_txbb; |
220 | u32 nr_bytes; | 220 | u32 nr_bytes; |
221 | u8 linear; | 221 | u8 linear; |
222 | u8 data_offset; | 222 | u8 data_offset; |
223 | u8 inl; | 223 | u8 inl; |
224 | u8 ts_requested; | 224 | u8 ts_requested; |
225 | }; | 225 | } ____cacheline_aligned_in_smp; |
226 | 226 | ||
227 | 227 | ||
228 | #define MLX4_EN_BIT_DESC_OWN 0x80000000 | 228 | #define MLX4_EN_BIT_DESC_OWN 0x80000000 |
@@ -253,40 +253,46 @@ struct mlx4_en_rx_alloc { | |||
253 | }; | 253 | }; |
254 | 254 | ||
255 | struct mlx4_en_tx_ring { | 255 | struct mlx4_en_tx_ring { |
256 | /* cache line used and dirtied in tx completion | ||
257 | * (mlx4_en_free_tx_buf()) | ||
258 | */ | ||
259 | u32 last_nr_txbb; | ||
260 | u32 cons; | ||
261 | unsigned long wake_queue; | ||
262 | |||
263 | /* cache line used and dirtied in mlx4_en_xmit() */ | ||
264 | u32 prod ____cacheline_aligned_in_smp; | ||
265 | unsigned long bytes; | ||
266 | unsigned long packets; | ||
267 | unsigned long tx_csum; | ||
268 | unsigned long tso_packets; | ||
269 | unsigned long xmit_more; | ||
270 | struct mlx4_bf bf; | ||
271 | unsigned long queue_stopped; | ||
272 | |||
273 | /* Following part should be mostly read */ | ||
274 | cpumask_t affinity_mask; | ||
275 | struct mlx4_qp qp; | ||
256 | struct mlx4_hwq_resources wqres; | 276 | struct mlx4_hwq_resources wqres; |
257 | u32 size ; /* number of TXBBs */ | 277 | u32 size; /* number of TXBBs */ |
258 | u32 size_mask; | 278 | u32 size_mask; |
259 | u16 stride; | 279 | u16 stride; |
260 | u16 cqn; /* index of port CQ associated with this ring */ | 280 | u16 cqn; /* index of port CQ associated with this ring */ |
261 | u32 prod; | 281 | u32 buf_size; |
262 | u32 cons; | 282 | u32 doorbell_qpn; |
263 | u32 buf_size; | 283 | void *buf; |
264 | u32 doorbell_qpn; | 284 | struct mlx4_en_tx_info *tx_info; |
265 | void *buf; | 285 | u8 *bounce_buf; |
266 | struct mlx4_en_tx_info *tx_info; | 286 | struct mlx4_qp_context context; |
267 | u8 *bounce_buf; | 287 | int qpn; |
268 | u8 queue_index; | 288 | enum mlx4_qp_state qp_state; |
269 | cpumask_t affinity_mask; | 289 | u8 queue_index; |
270 | u32 last_nr_txbb; | 290 | bool bf_enabled; |
271 | struct mlx4_qp qp; | 291 | bool bf_alloced; |
272 | struct mlx4_qp_context context; | 292 | struct netdev_queue *tx_queue; |
273 | int qpn; | 293 | int hwtstamp_tx_type; |
274 | enum mlx4_qp_state qp_state; | 294 | int inline_thold; |
275 | struct mlx4_srq dummy; | 295 | } ____cacheline_aligned_in_smp; |
276 | unsigned long bytes; | ||
277 | unsigned long packets; | ||
278 | unsigned long tx_csum; | ||
279 | unsigned long queue_stopped; | ||
280 | unsigned long wake_queue; | ||
281 | unsigned long tso_packets; | ||
282 | unsigned long xmit_more; | ||
283 | struct mlx4_bf bf; | ||
284 | bool bf_enabled; | ||
285 | bool bf_alloced; | ||
286 | struct netdev_queue *tx_queue; | ||
287 | int hwtstamp_tx_type; | ||
288 | int inline_thold; | ||
289 | }; | ||
290 | 296 | ||
291 | struct mlx4_en_rx_desc { | 297 | struct mlx4_en_rx_desc { |
292 | /* actual number of entries depends on rx ring stride */ | 298 | /* actual number of entries depends on rx ring stride */ |