mirror of https://gitee.com/openkylin/linux.git
net/mlx5e: Tx, Unconstify SQ stop room
Use an SQ field for stop_room, and use the larger value only if TLS is supported. Signed-off-by: Tariq Toukan <tariqt@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9ab0233728
commit
01614d4f60
|
@ -390,6 +390,7 @@ struct mlx5e_txqsq {
|
|||
void __iomem *uar_map;
|
||||
struct netdev_queue *txq;
|
||||
u32 sqn;
|
||||
u16 stop_room;
|
||||
u8 min_inline_mode;
|
||||
struct device *pdev;
|
||||
__be32 mkey_be;
|
||||
|
|
|
@ -6,6 +6,20 @@
|
|||
|
||||
#include "en.h"
|
||||
|
||||
#define MLX5E_SQ_NOPS_ROOM MLX5_SEND_WQE_MAX_WQEBBS
|
||||
#define MLX5E_SQ_STOP_ROOM (MLX5_SEND_WQE_MAX_WQEBBS +\
|
||||
MLX5E_SQ_NOPS_ROOM)
|
||||
|
||||
#ifndef CONFIG_MLX5_EN_TLS
|
||||
#define MLX5E_SQ_TLS_ROOM (0)
|
||||
#else
|
||||
/* TLS offload requires additional stop_room for:
|
||||
* - a resync SKB.
|
||||
*/
|
||||
#define MLX5E_SQ_TLS_ROOM \
|
||||
(MLX5_SEND_WQE_MAX_WQEBBS)
|
||||
#endif
|
||||
|
||||
#define INL_HDR_START_SZ (sizeof(((struct mlx5_wqe_eth_seg *)NULL)->inline_hdr.start))
|
||||
|
||||
static inline bool
|
||||
|
|
|
@ -1126,11 +1126,14 @@ static int mlx5e_alloc_txqsq(struct mlx5e_channel *c,
|
|||
sq->uar_map = mdev->mlx5e_res.bfreg.map;
|
||||
sq->min_inline_mode = params->tx_min_inline_mode;
|
||||
sq->stats = &c->priv->channel_stats[c->ix].sq[tc];
|
||||
sq->stop_room = MLX5E_SQ_STOP_ROOM;
|
||||
INIT_WORK(&sq->recover_work, mlx5e_tx_err_cqe_work);
|
||||
if (MLX5_IPSEC_DEV(c->priv->mdev))
|
||||
set_bit(MLX5E_SQ_STATE_IPSEC, &sq->state);
|
||||
if (mlx5_accel_is_tls_device(c->priv->mdev))
|
||||
if (mlx5_accel_is_tls_device(c->priv->mdev)) {
|
||||
set_bit(MLX5E_SQ_STATE_TLS, &sq->state);
|
||||
sq->stop_room += MLX5E_SQ_TLS_ROOM;
|
||||
}
|
||||
|
||||
param->wq.db_numa_node = cpu_to_node(c->cpu);
|
||||
err = mlx5_wq_cyc_create(mdev, ¶m->wq, sqc_wq, wq, &sq->wq_ctrl);
|
||||
|
|
|
@ -40,19 +40,6 @@
|
|||
#include "en_accel/en_accel.h"
|
||||
#include "lib/clock.h"
|
||||
|
||||
#define MLX5E_SQ_NOPS_ROOM MLX5_SEND_WQE_MAX_WQEBBS
|
||||
|
||||
#ifndef CONFIG_MLX5_EN_TLS
|
||||
#define MLX5E_SQ_STOP_ROOM (MLX5_SEND_WQE_MAX_WQEBBS +\
|
||||
MLX5E_SQ_NOPS_ROOM)
|
||||
#else
|
||||
/* TLS offload requires MLX5E_SQ_STOP_ROOM to have
|
||||
* enough room for a resync SKB, a normal SKB and a NOP
|
||||
*/
|
||||
#define MLX5E_SQ_STOP_ROOM (2 * MLX5_SEND_WQE_MAX_WQEBBS +\
|
||||
MLX5E_SQ_NOPS_ROOM)
|
||||
#endif
|
||||
|
||||
static void mlx5e_dma_unmap_wqe_err(struct mlx5e_txqsq *sq, u8 num_dma)
|
||||
{
|
||||
int i;
|
||||
|
@ -267,7 +254,7 @@ mlx5e_txwqe_complete(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
|||
skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
|
||||
|
||||
sq->pc += wi->num_wqebbs;
|
||||
if (unlikely(!mlx5e_wqc_has_room_for(wq, sq->cc, sq->pc, MLX5E_SQ_STOP_ROOM))) {
|
||||
if (unlikely(!mlx5e_wqc_has_room_for(wq, sq->cc, sq->pc, sq->stop_room))) {
|
||||
netif_tx_stop_queue(sq->txq);
|
||||
sq->stats->stopped++;
|
||||
}
|
||||
|
@ -528,8 +515,7 @@ bool mlx5e_poll_tx_cq(struct mlx5e_cq *cq, int napi_budget)
|
|||
netdev_tx_completed_queue(sq->txq, npkts, nbytes);
|
||||
|
||||
if (netif_tx_queue_stopped(sq->txq) &&
|
||||
mlx5e_wqc_has_room_for(&sq->wq, sq->cc, sq->pc,
|
||||
MLX5E_SQ_STOP_ROOM) &&
|
||||
mlx5e_wqc_has_room_for(&sq->wq, sq->cc, sq->pc, sq->stop_room) &&
|
||||
!test_bit(MLX5E_SQ_STATE_RECOVERING, &sq->state)) {
|
||||
netif_tx_wake_queue(sq->txq);
|
||||
stats->wake++;
|
||||
|
|
Loading…
Reference in New Issue