Skip to content

Commit eca1e8a

Browse files
Binary-Eaterkuba-moo
authored andcommitted
net/mlx5e: Use DIM constants for CQ period mode parameter
Use core DIM CQ period mode enum values for the CQ parameter for the period mode. Translate the value to the specific mlx5 device constant for the selected period mode when creating a CQ. Avoid needing to translate mlx5 device constants to DIM constants for core DIM functionality. Co-developed-by: Nabil S. Alramli <dev@nalramli.com> Signed-off-by: Nabil S. Alramli <dev@nalramli.com> Co-developed-by: Joe Damato <jdamato@fastly.com> Signed-off-by: Joe Damato <jdamato@fastly.com> Signed-off-by: Rahul Rameshbabu <rrameshbabu@nvidia.com> Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Link: https://lore.kernel.org/r/20240419080445.417574-3-tariqt@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 7ec5691 commit eca1e8a

File tree

6 files changed

+53
-54
lines changed

6 files changed

+53
-54
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en/dim.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,37 @@
44
#ifndef __MLX5_EN_DIM_H__
55
#define __MLX5_EN_DIM_H__
66

7+
#include <linux/dim.h>
78
#include <linux/types.h>
9+
#include <linux/mlx5/mlx5_ifc.h>
810

911
/* Forward declarations */
1012
struct work_struct;
1113

14+
/* convert a boolean value for cqe mode to appropriate dim constant
15+
* true : DIM_CQ_PERIOD_MODE_START_FROM_CQE
16+
* false : DIM_CQ_PERIOD_MODE_START_FROM_EQE
17+
*/
18+
static inline int mlx5e_dim_cq_period_mode(bool start_from_cqe)
19+
{
20+
return start_from_cqe ? DIM_CQ_PERIOD_MODE_START_FROM_CQE :
21+
DIM_CQ_PERIOD_MODE_START_FROM_EQE;
22+
}
23+
24+
static inline enum mlx5_cq_period_mode
25+
mlx5e_cq_period_mode(enum dim_cq_period_mode cq_period_mode)
26+
{
27+
switch (cq_period_mode) {
28+
case DIM_CQ_PERIOD_MODE_START_FROM_EQE:
29+
return MLX5_CQ_PERIOD_MODE_START_FROM_EQE;
30+
case DIM_CQ_PERIOD_MODE_START_FROM_CQE:
31+
return MLX5_CQ_PERIOD_MODE_START_FROM_CQE;
32+
default:
33+
WARN_ON_ONCE(true);
34+
return MLX5_CQ_PERIOD_MODE_START_FROM_EQE;
35+
}
36+
}
37+
1238
void mlx5e_rx_dim_work(struct work_struct *work);
1339
void mlx5e_tx_dim_work(struct work_struct *work);
1440

drivers/net/ethernet/mellanox/mlx5/core/en/params.c

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "en/port.h"
77
#include "en_accel/en_accel.h"
88
#include "en_accel/ipsec.h"
9+
#include <linux/dim.h>
910
#include <net/page_pool/types.h>
1011
#include <net/xdp_sock_drv.h>
1112

@@ -520,7 +521,7 @@ static struct dim_cq_moder mlx5e_get_def_tx_moderation(u8 cq_period_mode)
520521
moder.cq_period_mode = cq_period_mode;
521522
moder.pkts = MLX5E_PARAMS_DEFAULT_TX_CQ_MODERATION_PKTS;
522523
moder.usec = MLX5E_PARAMS_DEFAULT_TX_CQ_MODERATION_USEC;
523-
if (cq_period_mode == MLX5_CQ_PERIOD_MODE_START_FROM_CQE)
524+
if (cq_period_mode == DIM_CQ_PERIOD_MODE_START_FROM_CQE)
524525
moder.usec = MLX5E_PARAMS_DEFAULT_TX_CQ_MODERATION_USEC_FROM_CQE;
525526

526527
return moder;
@@ -533,55 +534,42 @@ static struct dim_cq_moder mlx5e_get_def_rx_moderation(u8 cq_period_mode)
533534
moder.cq_period_mode = cq_period_mode;
534535
moder.pkts = MLX5E_PARAMS_DEFAULT_RX_CQ_MODERATION_PKTS;
535536
moder.usec = MLX5E_PARAMS_DEFAULT_RX_CQ_MODERATION_USEC;
536-
if (cq_period_mode == MLX5_CQ_PERIOD_MODE_START_FROM_CQE)
537+
if (cq_period_mode == DIM_CQ_PERIOD_MODE_START_FROM_CQE)
537538
moder.usec = MLX5E_PARAMS_DEFAULT_RX_CQ_MODERATION_USEC_FROM_CQE;
538539

539540
return moder;
540541
}
541542

542-
static u8 mlx5_to_net_dim_cq_period_mode(u8 cq_period_mode)
543-
{
544-
return cq_period_mode == MLX5_CQ_PERIOD_MODE_START_FROM_CQE ?
545-
DIM_CQ_PERIOD_MODE_START_FROM_CQE :
546-
DIM_CQ_PERIOD_MODE_START_FROM_EQE;
547-
}
548-
549543
void mlx5e_reset_tx_moderation(struct mlx5e_params *params, u8 cq_period_mode)
550544
{
551-
if (params->tx_dim_enabled) {
552-
u8 dim_period_mode = mlx5_to_net_dim_cq_period_mode(cq_period_mode);
553-
554-
params->tx_cq_moderation = net_dim_get_def_tx_moderation(dim_period_mode);
555-
} else {
545+
if (params->tx_dim_enabled)
546+
params->tx_cq_moderation = net_dim_get_def_tx_moderation(cq_period_mode);
547+
else
556548
params->tx_cq_moderation = mlx5e_get_def_tx_moderation(cq_period_mode);
557-
}
558549
}
559550

560551
void mlx5e_reset_rx_moderation(struct mlx5e_params *params, u8 cq_period_mode)
561552
{
562-
if (params->rx_dim_enabled) {
563-
u8 dim_period_mode = mlx5_to_net_dim_cq_period_mode(cq_period_mode);
564-
565-
params->rx_cq_moderation = net_dim_get_def_rx_moderation(dim_period_mode);
566-
} else {
553+
if (params->rx_dim_enabled)
554+
params->rx_cq_moderation = net_dim_get_def_rx_moderation(cq_period_mode);
555+
else
567556
params->rx_cq_moderation = mlx5e_get_def_rx_moderation(cq_period_mode);
568-
}
569557
}
570558

571559
void mlx5e_set_tx_cq_mode_params(struct mlx5e_params *params, u8 cq_period_mode)
572560
{
573561
mlx5e_reset_tx_moderation(params, cq_period_mode);
574562
MLX5E_SET_PFLAG(params, MLX5E_PFLAG_TX_CQE_BASED_MODER,
575563
params->tx_cq_moderation.cq_period_mode ==
576-
MLX5_CQ_PERIOD_MODE_START_FROM_CQE);
564+
DIM_CQ_PERIOD_MODE_START_FROM_CQE);
577565
}
578566

579567
void mlx5e_set_rx_cq_mode_params(struct mlx5e_params *params, u8 cq_period_mode)
580568
{
581569
mlx5e_reset_rx_moderation(params, cq_period_mode);
582570
MLX5E_SET_PFLAG(params, MLX5E_PFLAG_RX_CQE_BASED_MODER,
583571
params->rx_cq_moderation.cq_period_mode ==
584-
MLX5_CQ_PERIOD_MODE_START_FROM_CQE);
572+
DIM_CQ_PERIOD_MODE_START_FROM_CQE);
585573
}
586574

587575
bool slow_pci_heuristic(struct mlx5_core_dev *mdev)

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

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
* SOFTWARE.
3131
*/
3232

33+
#include <linux/dim.h>
3334
#include <linux/ethtool_netlink.h>
3435

3536
#include "en.h"
@@ -627,15 +628,6 @@ mlx5e_set_priv_channels_rx_coalesce(struct mlx5e_priv *priv, struct ethtool_coal
627628
}
628629
}
629630

630-
/* convert a boolean value of cq_mode to mlx5 period mode
631-
* true : MLX5_CQ_PERIOD_MODE_START_FROM_CQE
632-
* false : MLX5_CQ_PERIOD_MODE_START_FROM_EQE
633-
*/
634-
static int cqe_mode_to_period_mode(bool val)
635-
{
636-
return val ? MLX5_CQ_PERIOD_MODE_START_FROM_CQE : MLX5_CQ_PERIOD_MODE_START_FROM_EQE;
637-
}
638-
639631
int mlx5e_ethtool_set_coalesce(struct mlx5e_priv *priv,
640632
struct ethtool_coalesce *coal,
641633
struct kernel_ethtool_coalesce *kernel_coal,
@@ -688,13 +680,13 @@ int mlx5e_ethtool_set_coalesce(struct mlx5e_priv *priv,
688680
reset_rx = !!coal->use_adaptive_rx_coalesce != priv->channels.params.rx_dim_enabled;
689681
reset_tx = !!coal->use_adaptive_tx_coalesce != priv->channels.params.tx_dim_enabled;
690682

691-
cq_period_mode = cqe_mode_to_period_mode(kernel_coal->use_cqe_mode_rx);
683+
cq_period_mode = mlx5e_dim_cq_period_mode(kernel_coal->use_cqe_mode_rx);
692684
if (cq_period_mode != rx_moder->cq_period_mode) {
693685
mlx5e_set_rx_cq_mode_params(&new_params, cq_period_mode);
694686
reset_rx = true;
695687
}
696688

697-
cq_period_mode = cqe_mode_to_period_mode(kernel_coal->use_cqe_mode_tx);
689+
cq_period_mode = mlx5e_dim_cq_period_mode(kernel_coal->use_cqe_mode_tx);
698690
if (cq_period_mode != tx_moder->cq_period_mode) {
699691
mlx5e_set_tx_cq_mode_params(&new_params, cq_period_mode);
700692
reset_tx = true;
@@ -1915,7 +1907,7 @@ static int set_pflag_cqe_based_moder(struct net_device *netdev, bool enable,
19151907
if (enable && !MLX5_CAP_GEN(priv->mdev, cq_period_start_from_cqe))
19161908
return -EOPNOTSUPP;
19171909

1918-
cq_period_mode = cqe_mode_to_period_mode(enable);
1910+
cq_period_mode = mlx5e_dim_cq_period_mode(enable);
19191911

19201912
current_cq_period_mode = is_rx_cq ?
19211913
priv->channels.params.rx_cq_moderation.cq_period_mode :

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

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
* SOFTWARE.
3131
*/
3232

33+
#include <linux/dim.h>
3334
#include <net/tc_act/tc_gact.h>
3435
#include <linux/mlx5/fs.h>
3536
#include <net/vxlan.h>
@@ -962,15 +963,7 @@ static int mlx5e_alloc_rq(struct mlx5e_params *params,
962963
}
963964

964965
INIT_WORK(&rq->dim.work, mlx5e_rx_dim_work);
965-
966-
switch (params->rx_cq_moderation.cq_period_mode) {
967-
case MLX5_CQ_PERIOD_MODE_START_FROM_CQE:
968-
rq->dim.mode = DIM_CQ_PERIOD_MODE_START_FROM_CQE;
969-
break;
970-
case MLX5_CQ_PERIOD_MODE_START_FROM_EQE:
971-
default:
972-
rq->dim.mode = DIM_CQ_PERIOD_MODE_START_FROM_EQE;
973-
}
966+
rq->dim.mode = params->rx_cq_moderation.cq_period_mode;
974967

975968
return 0;
976969

@@ -2090,7 +2083,7 @@ static int mlx5e_create_cq(struct mlx5e_cq *cq, struct mlx5e_cq_param *param)
20902083
mlx5_fill_page_frag_array(&cq->wq_ctrl.buf,
20912084
(__be64 *)MLX5_ADDR_OF(create_cq_in, in, pas));
20922085

2093-
MLX5_SET(cqc, cqc, cq_period_mode, param->cq_period_mode);
2086+
MLX5_SET(cqc, cqc, cq_period_mode, mlx5e_cq_period_mode(param->cq_period_mode));
20942087
MLX5_SET(cqc, cqc, c_eqn_or_apu_element, eqn);
20952088
MLX5_SET(cqc, cqc, uar_page, mdev->priv.uar->index);
20962089
MLX5_SET(cqc, cqc, log_page_size, cq->wq_ctrl.buf.page_shift -
@@ -5059,13 +5052,12 @@ void mlx5e_build_nic_params(struct mlx5e_priv *priv, struct mlx5e_xsk *xsk, u16
50595052
params->packet_merge.timeout = mlx5e_choose_lro_timeout(mdev, MLX5E_DEFAULT_LRO_TIMEOUT);
50605053

50615054
/* CQ moderation params */
5062-
rx_cq_period_mode = MLX5_CAP_GEN(mdev, cq_period_start_from_cqe) ?
5063-
MLX5_CQ_PERIOD_MODE_START_FROM_CQE :
5064-
MLX5_CQ_PERIOD_MODE_START_FROM_EQE;
5055+
rx_cq_period_mode =
5056+
mlx5e_dim_cq_period_mode(MLX5_CAP_GEN(mdev, cq_period_start_from_cqe));
50655057
params->rx_dim_enabled = MLX5_CAP_GEN(mdev, cq_moderation);
50665058
params->tx_dim_enabled = MLX5_CAP_GEN(mdev, cq_moderation);
50675059
mlx5e_set_rx_cq_mode_params(params, rx_cq_period_mode);
5068-
mlx5e_set_tx_cq_mode_params(params, MLX5_CQ_PERIOD_MODE_START_FROM_EQE);
5060+
mlx5e_set_tx_cq_mode_params(params, DIM_CQ_PERIOD_MODE_START_FROM_EQE);
50695061

50705062
/* TX inline */
50715063
mlx5_query_min_inline(mdev, &params->tx_min_inline_mode);

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
* SOFTWARE.
3131
*/
3232

33+
#include <linux/dim.h>
3334
#include <linux/debugfs.h>
3435
#include <linux/mlx5/fs.h>
3536
#include <net/switchdev.h>
@@ -40,6 +41,7 @@
4041

4142
#include "eswitch.h"
4243
#include "en.h"
44+
#include "en/dim.h"
4345
#include "en_rep.h"
4446
#include "en/params.h"
4547
#include "en/txrx.h"
@@ -836,9 +838,8 @@ static void mlx5e_build_rep_params(struct net_device *netdev)
836838
struct mlx5_core_dev *mdev = priv->mdev;
837839
struct mlx5e_params *params;
838840

839-
u8 cq_period_mode = MLX5_CAP_GEN(mdev, cq_period_start_from_cqe) ?
840-
MLX5_CQ_PERIOD_MODE_START_FROM_CQE :
841-
MLX5_CQ_PERIOD_MODE_START_FROM_EQE;
841+
u8 cq_period_mode =
842+
mlx5e_dim_cq_period_mode(MLX5_CAP_GEN(mdev, cq_period_start_from_cqe));
842843

843844
params = &priv->channels.params;
844845

include/linux/mlx5/mlx5_ifc.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4385,10 +4385,10 @@ enum {
43854385
MLX5_CQC_ST_FIRED = 0xa,
43864386
};
43874387

4388-
enum {
4388+
enum mlx5_cq_period_mode {
43894389
MLX5_CQ_PERIOD_MODE_START_FROM_EQE = 0x0,
43904390
MLX5_CQ_PERIOD_MODE_START_FROM_CQE = 0x1,
4391-
MLX5_CQ_PERIOD_NUM_MODES
4391+
MLX5_CQ_PERIOD_NUM_MODES,
43924392
};
43934393

43944394
struct mlx5_ifc_cqc_bits {

0 commit comments

Comments
 (0)