Skip to content

Commit

Permalink
net/mlx5e: Add HW cacheline start padding
Browse files Browse the repository at this point in the history
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 <saeedm@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Saeed Mahameed authored and David S. Miller committed Jun 11, 2015
1 parent facc969 commit fc11fbf
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 6 deletions.
5 changes: 4 additions & 1 deletion drivers/net/ethernet/mellanox/mlx5/core/en_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -309,12 +309,15 @@ static int mlx5e_create_rq(struct mlx5e_channel *c,

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

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

wqe->data.lkey = c->mkey_be;
wqe->data.byte_count = cpu_to_be32(rq->wqe_sz);
wqe->data.byte_count =
cpu_to_be32(byte_count | MLX5_HW_START_PADDING);
}

rq->pdev = c->pdev;
Expand Down
10 changes: 5 additions & 5 deletions drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,18 +45,18 @@ static inline int mlx5e_alloc_rx_wqe(struct mlx5e_rq *rq,
if (unlikely(!skb))
return -ENOMEM;

skb_reserve(skb, MLX5E_NET_IP_ALIGN);

dma_addr = dma_map_single(rq->pdev,
/* hw start padding */
skb->data - MLX5E_NET_IP_ALIGN,
/* hw end padding */
skb->data,
/* hw end padding */
rq->wqe_sz,
DMA_FROM_DEVICE);

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

skb_reserve(skb, MLX5E_NET_IP_ALIGN);

*((dma_addr_t *)skb->cb) = dma_addr;
wqe->data.addr = cpu_to_be64(dma_addr + MLX5E_NET_IP_ALIGN);

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

dma_unmap_single(rq->pdev,
*((dma_addr_t *)skb->cb),
skb_end_offset(skb),
rq->wqe_sz,
DMA_FROM_DEVICE);

if (unlikely((cqe->op_own >> 4) != MLX5_CQE_RESP_SEND)) {
Expand Down
4 changes: 4 additions & 0 deletions include/linux/mlx5/device.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,10 @@ enum {
MLX5_INLINE_SEG = 0x80000000,
};

enum {
MLX5_HW_START_PADDING = MLX5_INLINE_SEG,
};

enum {
MLX5_MIN_PKEY_TABLE_SIZE = 128,
MLX5_MAX_LOG_PKEY_TABLE = 5,
Expand Down

0 comments on commit fc11fbf

Please sign in to comment.