Skip to content

Commit fc11fbf

Browse files
Saeed Mahameeddavem330
authored andcommitted
net/mlx5e: Add HW cacheline start padding
Enable HW cacheline start padding and align RX WQE size to cacheline while considering HW start padding. Also, fix dma_unmap call to use the correct SKB data buffer size. Signed-off-by: Saeed Mahameed <[email protected]> Signed-off-by: Or Gerlitz <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent facc969 commit fc11fbf

File tree

3 files changed

+13
-6
lines changed

3 files changed

+13
-6
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en_main.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,12 +309,15 @@ static int mlx5e_create_rq(struct mlx5e_channel *c,
309309

310310
rq->wqe_sz = (priv->params.lro_en) ? priv->params.lro_wqe_sz :
311311
MLX5E_SW2HW_MTU(priv->netdev->mtu);
312+
rq->wqe_sz = SKB_DATA_ALIGN(rq->wqe_sz + MLX5E_NET_IP_ALIGN);
312313

313314
for (i = 0; i < wq_sz; i++) {
314315
struct mlx5e_rx_wqe *wqe = mlx5_wq_ll_get_wqe(&rq->wq, i);
316+
u32 byte_count = rq->wqe_sz - MLX5E_NET_IP_ALIGN;
315317

316318
wqe->data.lkey = c->mkey_be;
317-
wqe->data.byte_count = cpu_to_be32(rq->wqe_sz);
319+
wqe->data.byte_count =
320+
cpu_to_be32(byte_count | MLX5_HW_START_PADDING);
318321
}
319322

320323
rq->pdev = c->pdev;

drivers/net/ethernet/mellanox/mlx5/core/en_rx.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,18 @@ static inline int mlx5e_alloc_rx_wqe(struct mlx5e_rq *rq,
4545
if (unlikely(!skb))
4646
return -ENOMEM;
4747

48-
skb_reserve(skb, MLX5E_NET_IP_ALIGN);
49-
5048
dma_addr = dma_map_single(rq->pdev,
5149
/* hw start padding */
52-
skb->data - MLX5E_NET_IP_ALIGN,
53-
/* hw end padding */
50+
skb->data,
51+
/* hw end padding */
5452
rq->wqe_sz,
5553
DMA_FROM_DEVICE);
5654

5755
if (unlikely(dma_mapping_error(rq->pdev, dma_addr)))
5856
goto err_free_skb;
5957

58+
skb_reserve(skb, MLX5E_NET_IP_ALIGN);
59+
6060
*((dma_addr_t *)skb->cb) = dma_addr;
6161
wqe->data.addr = cpu_to_be64(dma_addr + MLX5E_NET_IP_ALIGN);
6262

@@ -217,7 +217,7 @@ bool mlx5e_poll_rx_cq(struct mlx5e_cq *cq, int budget)
217217

218218
dma_unmap_single(rq->pdev,
219219
*((dma_addr_t *)skb->cb),
220-
skb_end_offset(skb),
220+
rq->wqe_sz,
221221
DMA_FROM_DEVICE);
222222

223223
if (unlikely((cqe->op_own >> 4) != MLX5_CQE_RESP_SEND)) {

include/linux/mlx5/device.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,10 @@ enum {
131131
MLX5_INLINE_SEG = 0x80000000,
132132
};
133133

134+
enum {
135+
MLX5_HW_START_PADDING = MLX5_INLINE_SEG,
136+
};
137+
134138
enum {
135139
MLX5_MIN_PKEY_TABLE_SIZE = 128,
136140
MLX5_MAX_LOG_PKEY_TABLE = 5,

0 commit comments

Comments
 (0)