mirror of https://gitee.com/openkylin/linux.git
linux/dim: Rename externally used net_dim members
Removed 'net' prefix from functions and structs used by external drivers. Signed-off-by: Tal Gilboa <talgi@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
e5b6ab02d7
commit
8960b38932
|
@ -612,7 +612,7 @@ static int bcm_sysport_set_coalesce(struct net_device *dev,
|
||||||
struct ethtool_coalesce *ec)
|
struct ethtool_coalesce *ec)
|
||||||
{
|
{
|
||||||
struct bcm_sysport_priv *priv = netdev_priv(dev);
|
struct bcm_sysport_priv *priv = netdev_priv(dev);
|
||||||
struct net_dim_cq_moder moder;
|
struct dim_cq_moder moder;
|
||||||
u32 usecs, pkts;
|
u32 usecs, pkts;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
@ -995,7 +995,7 @@ static int bcm_sysport_poll(struct napi_struct *napi, int budget)
|
||||||
{
|
{
|
||||||
struct bcm_sysport_priv *priv =
|
struct bcm_sysport_priv *priv =
|
||||||
container_of(napi, struct bcm_sysport_priv, napi);
|
container_of(napi, struct bcm_sysport_priv, napi);
|
||||||
struct net_dim_sample dim_sample;
|
struct dim_sample dim_sample;
|
||||||
unsigned int work_done = 0;
|
unsigned int work_done = 0;
|
||||||
|
|
||||||
work_done = bcm_sysport_desc_rx(priv, budget);
|
work_done = bcm_sysport_desc_rx(priv, budget);
|
||||||
|
@ -1019,8 +1019,8 @@ static int bcm_sysport_poll(struct napi_struct *napi, int budget)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->dim.use_dim) {
|
if (priv->dim.use_dim) {
|
||||||
net_dim_update_sample(priv->dim.event_ctr, priv->dim.packets,
|
dim_update_sample(priv->dim.event_ctr, priv->dim.packets,
|
||||||
priv->dim.bytes, &dim_sample);
|
priv->dim.bytes, &dim_sample);
|
||||||
net_dim(&priv->dim.dim, dim_sample);
|
net_dim(&priv->dim.dim, dim_sample);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1090,13 +1090,13 @@ static void bcm_sysport_resume_from_wol(struct bcm_sysport_priv *priv)
|
||||||
|
|
||||||
static void bcm_sysport_dim_work(struct work_struct *work)
|
static void bcm_sysport_dim_work(struct work_struct *work)
|
||||||
{
|
{
|
||||||
struct net_dim *dim = container_of(work, struct net_dim, work);
|
struct dim *dim = container_of(work, struct dim, work);
|
||||||
struct bcm_sysport_net_dim *ndim =
|
struct bcm_sysport_net_dim *ndim =
|
||||||
container_of(dim, struct bcm_sysport_net_dim, dim);
|
container_of(dim, struct bcm_sysport_net_dim, dim);
|
||||||
struct bcm_sysport_priv *priv =
|
struct bcm_sysport_priv *priv =
|
||||||
container_of(ndim, struct bcm_sysport_priv, dim);
|
container_of(ndim, struct bcm_sysport_priv, dim);
|
||||||
struct net_dim_cq_moder cur_profile =
|
struct dim_cq_moder cur_profile = net_dim_get_rx_moderation(dim->mode,
|
||||||
net_dim_get_rx_moderation(dim->mode, dim->profile_ix);
|
dim->profile_ix);
|
||||||
|
|
||||||
bcm_sysport_set_rx_coalesce(priv, cur_profile.usec, cur_profile.pkts);
|
bcm_sysport_set_rx_coalesce(priv, cur_profile.usec, cur_profile.pkts);
|
||||||
dim->state = DIM_START_MEASURE;
|
dim->state = DIM_START_MEASURE;
|
||||||
|
@ -1449,7 +1449,7 @@ static void bcm_sysport_init_dim(struct bcm_sysport_priv *priv,
|
||||||
static void bcm_sysport_init_rx_coalesce(struct bcm_sysport_priv *priv)
|
static void bcm_sysport_init_rx_coalesce(struct bcm_sysport_priv *priv)
|
||||||
{
|
{
|
||||||
struct bcm_sysport_net_dim *dim = &priv->dim;
|
struct bcm_sysport_net_dim *dim = &priv->dim;
|
||||||
struct net_dim_cq_moder moder;
|
struct dim_cq_moder moder;
|
||||||
u32 usecs, pkts;
|
u32 usecs, pkts;
|
||||||
|
|
||||||
usecs = priv->rx_coalesce_usecs;
|
usecs = priv->rx_coalesce_usecs;
|
||||||
|
|
|
@ -705,7 +705,7 @@ struct bcm_sysport_net_dim {
|
||||||
u16 event_ctr;
|
u16 event_ctr;
|
||||||
unsigned long packets;
|
unsigned long packets;
|
||||||
unsigned long bytes;
|
unsigned long bytes;
|
||||||
struct net_dim dim;
|
struct dim dim;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Software view of the TX ring */
|
/* Software view of the TX ring */
|
||||||
|
|
|
@ -2128,12 +2128,12 @@ static int bnxt_poll(struct napi_struct *napi, int budget)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (bp->flags & BNXT_FLAG_DIM) {
|
if (bp->flags & BNXT_FLAG_DIM) {
|
||||||
struct net_dim_sample dim_sample;
|
struct dim_sample dim_sample;
|
||||||
|
|
||||||
net_dim_update_sample(cpr->event_ctr,
|
dim_update_sample(cpr->event_ctr,
|
||||||
cpr->rx_packets,
|
cpr->rx_packets,
|
||||||
cpr->rx_bytes,
|
cpr->rx_bytes,
|
||||||
&dim_sample);
|
&dim_sample);
|
||||||
net_dim(&cpr->dim, dim_sample);
|
net_dim(&cpr->dim, dim_sample);
|
||||||
}
|
}
|
||||||
return work_done;
|
return work_done;
|
||||||
|
|
|
@ -809,7 +809,7 @@ struct bnxt_cp_ring_info {
|
||||||
u64 rx_bytes;
|
u64 rx_bytes;
|
||||||
u64 event_ctr;
|
u64 event_ctr;
|
||||||
|
|
||||||
struct net_dim dim;
|
struct dim dim;
|
||||||
|
|
||||||
union {
|
union {
|
||||||
struct tx_cmp *cp_desc_ring[MAX_CP_PAGES];
|
struct tx_cmp *cp_desc_ring[MAX_CP_PAGES];
|
||||||
|
|
|
@ -21,7 +21,7 @@ static ssize_t debugfs_dim_read(struct file *filep,
|
||||||
char __user *buffer,
|
char __user *buffer,
|
||||||
size_t count, loff_t *ppos)
|
size_t count, loff_t *ppos)
|
||||||
{
|
{
|
||||||
struct net_dim *dim = filep->private_data;
|
struct dim *dim = filep->private_data;
|
||||||
int len;
|
int len;
|
||||||
char *buf;
|
char *buf;
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ static const struct file_operations debugfs_dim_fops = {
|
||||||
.read = debugfs_dim_read,
|
.read = debugfs_dim_read,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct dentry *debugfs_dim_ring_init(struct net_dim *dim, int ring_idx,
|
static struct dentry *debugfs_dim_ring_init(struct dim *dim, int ring_idx,
|
||||||
struct dentry *dd)
|
struct dentry *dd)
|
||||||
{
|
{
|
||||||
static char qname[16];
|
static char qname[16];
|
||||||
|
|
|
@ -13,15 +13,14 @@
|
||||||
|
|
||||||
void bnxt_dim_work(struct work_struct *work)
|
void bnxt_dim_work(struct work_struct *work)
|
||||||
{
|
{
|
||||||
struct net_dim *dim = container_of(work, struct net_dim,
|
struct dim *dim = container_of(work, struct dim, work);
|
||||||
work);
|
|
||||||
struct bnxt_cp_ring_info *cpr = container_of(dim,
|
struct bnxt_cp_ring_info *cpr = container_of(dim,
|
||||||
struct bnxt_cp_ring_info,
|
struct bnxt_cp_ring_info,
|
||||||
dim);
|
dim);
|
||||||
struct bnxt_napi *bnapi = container_of(cpr,
|
struct bnxt_napi *bnapi = container_of(cpr,
|
||||||
struct bnxt_napi,
|
struct bnxt_napi,
|
||||||
cp_ring);
|
cp_ring);
|
||||||
struct net_dim_cq_moder cur_moder =
|
struct dim_cq_moder cur_moder =
|
||||||
net_dim_get_rx_moderation(dim->mode, dim->profile_ix);
|
net_dim_get_rx_moderation(dim->mode, dim->profile_ix);
|
||||||
|
|
||||||
cpr->rx_ring_coal.coal_ticks = cur_moder.usec;
|
cpr->rx_ring_coal.coal_ticks = cur_moder.usec;
|
||||||
|
|
|
@ -643,7 +643,7 @@ static void bcmgenet_set_rx_coalesce(struct bcmgenet_rx_ring *ring,
|
||||||
static void bcmgenet_set_ring_rx_coalesce(struct bcmgenet_rx_ring *ring,
|
static void bcmgenet_set_ring_rx_coalesce(struct bcmgenet_rx_ring *ring,
|
||||||
struct ethtool_coalesce *ec)
|
struct ethtool_coalesce *ec)
|
||||||
{
|
{
|
||||||
struct net_dim_cq_moder moder;
|
struct dim_cq_moder moder;
|
||||||
u32 usecs, pkts;
|
u32 usecs, pkts;
|
||||||
|
|
||||||
ring->rx_coalesce_usecs = ec->rx_coalesce_usecs;
|
ring->rx_coalesce_usecs = ec->rx_coalesce_usecs;
|
||||||
|
@ -1898,7 +1898,7 @@ static int bcmgenet_rx_poll(struct napi_struct *napi, int budget)
|
||||||
{
|
{
|
||||||
struct bcmgenet_rx_ring *ring = container_of(napi,
|
struct bcmgenet_rx_ring *ring = container_of(napi,
|
||||||
struct bcmgenet_rx_ring, napi);
|
struct bcmgenet_rx_ring, napi);
|
||||||
struct net_dim_sample dim_sample;
|
struct dim_sample dim_sample;
|
||||||
unsigned int work_done;
|
unsigned int work_done;
|
||||||
|
|
||||||
work_done = bcmgenet_desc_rx(ring, budget);
|
work_done = bcmgenet_desc_rx(ring, budget);
|
||||||
|
@ -1909,8 +1909,8 @@ static int bcmgenet_rx_poll(struct napi_struct *napi, int budget)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ring->dim.use_dim) {
|
if (ring->dim.use_dim) {
|
||||||
net_dim_update_sample(ring->dim.event_ctr, ring->dim.packets,
|
dim_update_sample(ring->dim.event_ctr, ring->dim.packets,
|
||||||
ring->dim.bytes, &dim_sample);
|
ring->dim.bytes, &dim_sample);
|
||||||
net_dim(&ring->dim.dim, dim_sample);
|
net_dim(&ring->dim.dim, dim_sample);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1919,12 +1919,12 @@ static int bcmgenet_rx_poll(struct napi_struct *napi, int budget)
|
||||||
|
|
||||||
static void bcmgenet_dim_work(struct work_struct *work)
|
static void bcmgenet_dim_work(struct work_struct *work)
|
||||||
{
|
{
|
||||||
struct net_dim *dim = container_of(work, struct net_dim, work);
|
struct dim *dim = container_of(work, struct dim, work);
|
||||||
struct bcmgenet_net_dim *ndim =
|
struct bcmgenet_net_dim *ndim =
|
||||||
container_of(dim, struct bcmgenet_net_dim, dim);
|
container_of(dim, struct bcmgenet_net_dim, dim);
|
||||||
struct bcmgenet_rx_ring *ring =
|
struct bcmgenet_rx_ring *ring =
|
||||||
container_of(ndim, struct bcmgenet_rx_ring, dim);
|
container_of(ndim, struct bcmgenet_rx_ring, dim);
|
||||||
struct net_dim_cq_moder cur_profile =
|
struct dim_cq_moder cur_profile =
|
||||||
net_dim_get_rx_moderation(dim->mode, dim->profile_ix);
|
net_dim_get_rx_moderation(dim->mode, dim->profile_ix);
|
||||||
|
|
||||||
bcmgenet_set_rx_coalesce(ring, cur_profile.usec, cur_profile.pkts);
|
bcmgenet_set_rx_coalesce(ring, cur_profile.usec, cur_profile.pkts);
|
||||||
|
@ -2094,7 +2094,7 @@ static void bcmgenet_init_dim(struct bcmgenet_rx_ring *ring,
|
||||||
static void bcmgenet_init_rx_coalesce(struct bcmgenet_rx_ring *ring)
|
static void bcmgenet_init_rx_coalesce(struct bcmgenet_rx_ring *ring)
|
||||||
{
|
{
|
||||||
struct bcmgenet_net_dim *dim = &ring->dim;
|
struct bcmgenet_net_dim *dim = &ring->dim;
|
||||||
struct net_dim_cq_moder moder;
|
struct dim_cq_moder moder;
|
||||||
u32 usecs, pkts;
|
u32 usecs, pkts;
|
||||||
|
|
||||||
usecs = ring->rx_coalesce_usecs;
|
usecs = ring->rx_coalesce_usecs;
|
||||||
|
|
|
@ -581,7 +581,7 @@ struct bcmgenet_net_dim {
|
||||||
u16 event_ctr;
|
u16 event_ctr;
|
||||||
unsigned long packets;
|
unsigned long packets;
|
||||||
unsigned long bytes;
|
unsigned long bytes;
|
||||||
struct net_dim dim;
|
struct dim dim;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bcmgenet_rx_ring {
|
struct bcmgenet_rx_ring {
|
||||||
|
|
|
@ -238,9 +238,9 @@ struct mlx5e_params {
|
||||||
u16 num_channels;
|
u16 num_channels;
|
||||||
u8 num_tc;
|
u8 num_tc;
|
||||||
bool rx_cqe_compress_def;
|
bool rx_cqe_compress_def;
|
||||||
struct net_dim_cq_moder rx_cq_moderation;
|
|
||||||
struct net_dim_cq_moder tx_cq_moderation;
|
|
||||||
bool tunneled_offload_en;
|
bool tunneled_offload_en;
|
||||||
|
struct dim_cq_moder rx_cq_moderation;
|
||||||
|
struct dim_cq_moder tx_cq_moderation;
|
||||||
bool lro_en;
|
bool lro_en;
|
||||||
u8 tx_min_inline_mode;
|
u8 tx_min_inline_mode;
|
||||||
bool vlan_strip_disable;
|
bool vlan_strip_disable;
|
||||||
|
@ -356,7 +356,7 @@ struct mlx5e_txqsq {
|
||||||
/* dirtied @completion */
|
/* dirtied @completion */
|
||||||
u16 cc;
|
u16 cc;
|
||||||
u32 dma_fifo_cc;
|
u32 dma_fifo_cc;
|
||||||
struct net_dim dim; /* Adaptive Moderation */
|
struct dim dim; /* Adaptive Moderation */
|
||||||
|
|
||||||
/* dirtied @xmit */
|
/* dirtied @xmit */
|
||||||
u16 pc ____cacheline_aligned_in_smp;
|
u16 pc ____cacheline_aligned_in_smp;
|
||||||
|
@ -595,7 +595,7 @@ struct mlx5e_rq {
|
||||||
int ix;
|
int ix;
|
||||||
unsigned int hw_mtu;
|
unsigned int hw_mtu;
|
||||||
|
|
||||||
struct net_dim dim; /* Dynamic Interrupt Moderation */
|
struct dim dim; /* Dynamic Interrupt Moderation */
|
||||||
|
|
||||||
/* XDP */
|
/* XDP */
|
||||||
struct bpf_prog *xdp_prog;
|
struct bpf_prog *xdp_prog;
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
#include "en.h"
|
#include "en.h"
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mlx5e_complete_dim_work(struct net_dim *dim, struct net_dim_cq_moder moder,
|
mlx5e_complete_dim_work(struct dim *dim, struct dim_cq_moder moder,
|
||||||
struct mlx5_core_dev *mdev, struct mlx5_core_cq *mcq)
|
struct mlx5_core_dev *mdev, struct mlx5_core_cq *mcq)
|
||||||
{
|
{
|
||||||
mlx5_core_modify_cq_moderation(mdev, mcq, moder.usec, moder.pkts);
|
mlx5_core_modify_cq_moderation(mdev, mcq, moder.usec, moder.pkts);
|
||||||
|
@ -43,9 +43,9 @@ mlx5e_complete_dim_work(struct net_dim *dim, struct net_dim_cq_moder moder,
|
||||||
|
|
||||||
void mlx5e_rx_dim_work(struct work_struct *work)
|
void mlx5e_rx_dim_work(struct work_struct *work)
|
||||||
{
|
{
|
||||||
struct net_dim *dim = container_of(work, struct net_dim, work);
|
struct dim *dim = container_of(work, struct dim, work);
|
||||||
struct mlx5e_rq *rq = container_of(dim, struct mlx5e_rq, dim);
|
struct mlx5e_rq *rq = container_of(dim, struct mlx5e_rq, dim);
|
||||||
struct net_dim_cq_moder cur_moder =
|
struct dim_cq_moder cur_moder =
|
||||||
net_dim_get_rx_moderation(dim->mode, dim->profile_ix);
|
net_dim_get_rx_moderation(dim->mode, dim->profile_ix);
|
||||||
|
|
||||||
mlx5e_complete_dim_work(dim, cur_moder, rq->mdev, &rq->cq.mcq);
|
mlx5e_complete_dim_work(dim, cur_moder, rq->mdev, &rq->cq.mcq);
|
||||||
|
@ -53,9 +53,9 @@ void mlx5e_rx_dim_work(struct work_struct *work)
|
||||||
|
|
||||||
void mlx5e_tx_dim_work(struct work_struct *work)
|
void mlx5e_tx_dim_work(struct work_struct *work)
|
||||||
{
|
{
|
||||||
struct net_dim *dim = container_of(work, struct net_dim, work);
|
struct dim *dim = container_of(work, struct dim, work);
|
||||||
struct mlx5e_txqsq *sq = container_of(dim, struct mlx5e_txqsq, dim);
|
struct mlx5e_txqsq *sq = container_of(dim, struct mlx5e_txqsq, dim);
|
||||||
struct net_dim_cq_moder cur_moder =
|
struct dim_cq_moder cur_moder =
|
||||||
net_dim_get_tx_moderation(dim->mode, dim->profile_ix);
|
net_dim_get_tx_moderation(dim->mode, dim->profile_ix);
|
||||||
|
|
||||||
mlx5e_complete_dim_work(dim, cur_moder, sq->cq.mdev, &sq->cq.mcq);
|
mlx5e_complete_dim_work(dim, cur_moder, sq->cq.mdev, &sq->cq.mcq);
|
||||||
|
|
|
@ -466,7 +466,7 @@ static int mlx5e_set_channels(struct net_device *dev,
|
||||||
int mlx5e_ethtool_get_coalesce(struct mlx5e_priv *priv,
|
int mlx5e_ethtool_get_coalesce(struct mlx5e_priv *priv,
|
||||||
struct ethtool_coalesce *coal)
|
struct ethtool_coalesce *coal)
|
||||||
{
|
{
|
||||||
struct net_dim_cq_moder *rx_moder, *tx_moder;
|
struct dim_cq_moder *rx_moder, *tx_moder;
|
||||||
|
|
||||||
if (!MLX5_CAP_GEN(priv->mdev, cq_moderation))
|
if (!MLX5_CAP_GEN(priv->mdev, cq_moderation))
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
@ -521,7 +521,7 @@ mlx5e_set_priv_channels_coalesce(struct mlx5e_priv *priv, struct ethtool_coalesc
|
||||||
int mlx5e_ethtool_set_coalesce(struct mlx5e_priv *priv,
|
int mlx5e_ethtool_set_coalesce(struct mlx5e_priv *priv,
|
||||||
struct ethtool_coalesce *coal)
|
struct ethtool_coalesce *coal)
|
||||||
{
|
{
|
||||||
struct net_dim_cq_moder *rx_moder, *tx_moder;
|
struct dim_cq_moder *rx_moder, *tx_moder;
|
||||||
struct mlx5_core_dev *mdev = priv->mdev;
|
struct mlx5_core_dev *mdev = priv->mdev;
|
||||||
struct mlx5e_channels new_channels = {};
|
struct mlx5e_channels new_channels = {};
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
|
@ -1569,7 +1569,7 @@ static void mlx5e_destroy_cq(struct mlx5e_cq *cq)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mlx5e_open_cq(struct mlx5e_channel *c,
|
static int mlx5e_open_cq(struct mlx5e_channel *c,
|
||||||
struct net_dim_cq_moder moder,
|
struct dim_cq_moder moder,
|
||||||
struct mlx5e_cq_param *param,
|
struct mlx5e_cq_param *param,
|
||||||
struct mlx5e_cq *cq)
|
struct mlx5e_cq *cq)
|
||||||
{
|
{
|
||||||
|
@ -1774,7 +1774,7 @@ static int mlx5e_open_channel(struct mlx5e_priv *priv, int ix,
|
||||||
struct mlx5e_channel **cp)
|
struct mlx5e_channel **cp)
|
||||||
{
|
{
|
||||||
int cpu = cpumask_first(mlx5_comp_irq_get_affinity_mask(priv->mdev, ix));
|
int cpu = cpumask_first(mlx5_comp_irq_get_affinity_mask(priv->mdev, ix));
|
||||||
struct net_dim_cq_moder icocq_moder = {0, 0};
|
struct dim_cq_moder icocq_moder = {0, 0};
|
||||||
struct net_device *netdev = priv->netdev;
|
struct net_device *netdev = priv->netdev;
|
||||||
struct mlx5e_channel *c;
|
struct mlx5e_channel *c;
|
||||||
unsigned int irq;
|
unsigned int irq;
|
||||||
|
@ -4411,9 +4411,9 @@ static bool slow_pci_heuristic(struct mlx5_core_dev *mdev)
|
||||||
link_speed > MLX5E_SLOW_PCI_RATIO * pci_bw;
|
link_speed > MLX5E_SLOW_PCI_RATIO * pci_bw;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct net_dim_cq_moder mlx5e_get_def_tx_moderation(u8 cq_period_mode)
|
static struct dim_cq_moder mlx5e_get_def_tx_moderation(u8 cq_period_mode)
|
||||||
{
|
{
|
||||||
struct net_dim_cq_moder moder;
|
struct dim_cq_moder moder;
|
||||||
|
|
||||||
moder.cq_period_mode = cq_period_mode;
|
moder.cq_period_mode = cq_period_mode;
|
||||||
moder.pkts = MLX5E_PARAMS_DEFAULT_TX_CQ_MODERATION_PKTS;
|
moder.pkts = MLX5E_PARAMS_DEFAULT_TX_CQ_MODERATION_PKTS;
|
||||||
|
@ -4424,9 +4424,9 @@ static struct net_dim_cq_moder mlx5e_get_def_tx_moderation(u8 cq_period_mode)
|
||||||
return moder;
|
return moder;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct net_dim_cq_moder mlx5e_get_def_rx_moderation(u8 cq_period_mode)
|
static struct dim_cq_moder mlx5e_get_def_rx_moderation(u8 cq_period_mode)
|
||||||
{
|
{
|
||||||
struct net_dim_cq_moder moder;
|
struct dim_cq_moder moder;
|
||||||
|
|
||||||
moder.cq_period_mode = cq_period_mode;
|
moder.cq_period_mode = cq_period_mode;
|
||||||
moder.pkts = MLX5E_PARAMS_DEFAULT_RX_CQ_MODERATION_PKTS;
|
moder.pkts = MLX5E_PARAMS_DEFAULT_RX_CQ_MODERATION_PKTS;
|
||||||
|
|
|
@ -48,24 +48,24 @@ static inline bool mlx5e_channel_no_affinity_change(struct mlx5e_channel *c)
|
||||||
static void mlx5e_handle_tx_dim(struct mlx5e_txqsq *sq)
|
static void mlx5e_handle_tx_dim(struct mlx5e_txqsq *sq)
|
||||||
{
|
{
|
||||||
struct mlx5e_sq_stats *stats = sq->stats;
|
struct mlx5e_sq_stats *stats = sq->stats;
|
||||||
struct net_dim_sample dim_sample;
|
struct dim_sample dim_sample;
|
||||||
|
|
||||||
if (unlikely(!test_bit(MLX5E_SQ_STATE_AM, &sq->state)))
|
if (unlikely(!test_bit(MLX5E_SQ_STATE_AM, &sq->state)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
net_dim_update_sample(sq->cq.event_ctr, stats->packets, stats->bytes, &dim_sample);
|
dim_update_sample(sq->cq.event_ctr, stats->packets, stats->bytes, &dim_sample);
|
||||||
net_dim(&sq->dim, dim_sample);
|
net_dim(&sq->dim, dim_sample);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mlx5e_handle_rx_dim(struct mlx5e_rq *rq)
|
static void mlx5e_handle_rx_dim(struct mlx5e_rq *rq)
|
||||||
{
|
{
|
||||||
struct mlx5e_rq_stats *stats = rq->stats;
|
struct mlx5e_rq_stats *stats = rq->stats;
|
||||||
struct net_dim_sample dim_sample;
|
struct dim_sample dim_sample;
|
||||||
|
|
||||||
if (unlikely(!test_bit(MLX5E_RQ_STATE_AM, &rq->state)))
|
if (unlikely(!test_bit(MLX5E_RQ_STATE_AM, &rq->state)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
net_dim_update_sample(rq->cq.event_ctr, stats->packets, stats->bytes, &dim_sample);
|
dim_update_sample(rq->cq.event_ctr, stats->packets, stats->bytes, &dim_sample);
|
||||||
net_dim(&rq->dim, dim_sample);
|
net_dim(&rq->dim, dim_sample);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,13 +14,13 @@
|
||||||
#define BIT_GAP(bits, end, start) ((((end) - (start)) + BIT_ULL(bits)) \
|
#define BIT_GAP(bits, end, start) ((((end) - (start)) + BIT_ULL(bits)) \
|
||||||
& (BIT_ULL(bits) - 1))
|
& (BIT_ULL(bits) - 1))
|
||||||
|
|
||||||
struct net_dim_cq_moder {
|
struct dim_cq_moder {
|
||||||
u16 usec;
|
u16 usec;
|
||||||
u16 pkts;
|
u16 pkts;
|
||||||
u8 cq_period_mode;
|
u8 cq_period_mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct net_dim_sample {
|
struct dim_sample {
|
||||||
ktime_t time;
|
ktime_t time;
|
||||||
u32 pkt_ctr;
|
u32 pkt_ctr;
|
||||||
u32 byte_ctr;
|
u32 byte_ctr;
|
||||||
|
@ -33,10 +33,10 @@ struct dim_stats {
|
||||||
int epms; /* events per msec */
|
int epms; /* events per msec */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct net_dim { /* Dynamic Interrupt Moderation */
|
struct dim { /* Dynamic Interrupt Moderation */
|
||||||
u8 state;
|
u8 state;
|
||||||
struct dim_stats prev_stats;
|
struct dim_stats prev_stats;
|
||||||
struct net_dim_sample start_sample;
|
struct dim_sample start_sample;
|
||||||
struct work_struct work;
|
struct work_struct work;
|
||||||
u8 profile_ix;
|
u8 profile_ix;
|
||||||
u8 mode;
|
u8 mode;
|
||||||
|
@ -77,7 +77,7 @@ enum {
|
||||||
DIM_ON_EDGE,
|
DIM_ON_EDGE,
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline bool dim_on_top(struct net_dim *dim)
|
static inline bool dim_on_top(struct dim *dim)
|
||||||
{
|
{
|
||||||
switch (dim->tune_state) {
|
switch (dim->tune_state) {
|
||||||
case DIM_PARKING_ON_TOP:
|
case DIM_PARKING_ON_TOP:
|
||||||
|
@ -90,7 +90,7 @@ static inline bool dim_on_top(struct net_dim *dim)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void dim_turn(struct net_dim *dim)
|
static inline void dim_turn(struct dim *dim)
|
||||||
{
|
{
|
||||||
switch (dim->tune_state) {
|
switch (dim->tune_state) {
|
||||||
case DIM_PARKING_ON_TOP:
|
case DIM_PARKING_ON_TOP:
|
||||||
|
@ -107,7 +107,7 @@ static inline void dim_turn(struct net_dim *dim)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void dim_park_on_top(struct net_dim *dim)
|
static inline void dim_park_on_top(struct dim *dim)
|
||||||
{
|
{
|
||||||
dim->steps_right = 0;
|
dim->steps_right = 0;
|
||||||
dim->steps_left = 0;
|
dim->steps_left = 0;
|
||||||
|
@ -115,7 +115,7 @@ static inline void dim_park_on_top(struct net_dim *dim)
|
||||||
dim->tune_state = DIM_PARKING_ON_TOP;
|
dim->tune_state = DIM_PARKING_ON_TOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void dim_park_tired(struct net_dim *dim)
|
static inline void dim_park_tired(struct dim *dim)
|
||||||
{
|
{
|
||||||
dim->steps_right = 0;
|
dim->steps_right = 0;
|
||||||
dim->steps_left = 0;
|
dim->steps_left = 0;
|
||||||
|
@ -123,8 +123,7 @@ static inline void dim_park_tired(struct net_dim *dim)
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
net_dim_update_sample(u16 event_ctr, u64 packets, u64 bytes,
|
dim_update_sample(u16 event_ctr, u64 packets, u64 bytes, struct dim_sample *s)
|
||||||
struct net_dim_sample *s)
|
|
||||||
{
|
{
|
||||||
s->time = ktime_get();
|
s->time = ktime_get();
|
||||||
s->pkt_ctr = packets;
|
s->pkt_ctr = packets;
|
||||||
|
@ -133,7 +132,7 @@ net_dim_update_sample(u16 event_ctr, u64 packets, u64 bytes,
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
dim_calc_stats(struct net_dim_sample *start, struct net_dim_sample *end,
|
dim_calc_stats(struct dim_sample *start, struct dim_sample *end,
|
||||||
struct dim_stats *curr_stats)
|
struct dim_stats *curr_stats)
|
||||||
{
|
{
|
||||||
/* u32 holds up to 71 minutes, should be enough */
|
/* u32 holds up to 71 minutes, should be enough */
|
||||||
|
|
|
@ -77,28 +77,28 @@
|
||||||
{64, 32} \
|
{64, 32} \
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct net_dim_cq_moder
|
static const struct dim_cq_moder
|
||||||
rx_profile[DIM_CQ_PERIOD_NUM_MODES][NET_DIM_PARAMS_NUM_PROFILES] = {
|
rx_profile[DIM_CQ_PERIOD_NUM_MODES][NET_DIM_PARAMS_NUM_PROFILES] = {
|
||||||
NET_DIM_RX_EQE_PROFILES,
|
NET_DIM_RX_EQE_PROFILES,
|
||||||
NET_DIM_RX_CQE_PROFILES,
|
NET_DIM_RX_CQE_PROFILES,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct net_dim_cq_moder
|
static const struct dim_cq_moder
|
||||||
tx_profile[DIM_CQ_PERIOD_NUM_MODES][NET_DIM_PARAMS_NUM_PROFILES] = {
|
tx_profile[DIM_CQ_PERIOD_NUM_MODES][NET_DIM_PARAMS_NUM_PROFILES] = {
|
||||||
NET_DIM_TX_EQE_PROFILES,
|
NET_DIM_TX_EQE_PROFILES,
|
||||||
NET_DIM_TX_CQE_PROFILES,
|
NET_DIM_TX_CQE_PROFILES,
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline struct net_dim_cq_moder
|
static inline struct dim_cq_moder
|
||||||
net_dim_get_rx_moderation(u8 cq_period_mode, int ix)
|
net_dim_get_rx_moderation(u8 cq_period_mode, int ix)
|
||||||
{
|
{
|
||||||
struct net_dim_cq_moder cq_moder = rx_profile[cq_period_mode][ix];
|
struct dim_cq_moder cq_moder = rx_profile[cq_period_mode][ix];
|
||||||
|
|
||||||
cq_moder.cq_period_mode = cq_period_mode;
|
cq_moder.cq_period_mode = cq_period_mode;
|
||||||
return cq_moder;
|
return cq_moder;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct net_dim_cq_moder
|
static inline struct dim_cq_moder
|
||||||
net_dim_get_def_rx_moderation(u8 cq_period_mode)
|
net_dim_get_def_rx_moderation(u8 cq_period_mode)
|
||||||
{
|
{
|
||||||
u8 profile_ix = cq_period_mode == DIM_CQ_PERIOD_MODE_START_FROM_CQE ?
|
u8 profile_ix = cq_period_mode == DIM_CQ_PERIOD_MODE_START_FROM_CQE ?
|
||||||
|
@ -107,16 +107,16 @@ net_dim_get_def_rx_moderation(u8 cq_period_mode)
|
||||||
return net_dim_get_rx_moderation(cq_period_mode, profile_ix);
|
return net_dim_get_rx_moderation(cq_period_mode, profile_ix);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct net_dim_cq_moder
|
static inline struct dim_cq_moder
|
||||||
net_dim_get_tx_moderation(u8 cq_period_mode, int ix)
|
net_dim_get_tx_moderation(u8 cq_period_mode, int ix)
|
||||||
{
|
{
|
||||||
struct net_dim_cq_moder cq_moder = tx_profile[cq_period_mode][ix];
|
struct dim_cq_moder cq_moder = tx_profile[cq_period_mode][ix];
|
||||||
|
|
||||||
cq_moder.cq_period_mode = cq_period_mode;
|
cq_moder.cq_period_mode = cq_period_mode;
|
||||||
return cq_moder;
|
return cq_moder;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct net_dim_cq_moder
|
static inline struct dim_cq_moder
|
||||||
net_dim_get_def_tx_moderation(u8 cq_period_mode)
|
net_dim_get_def_tx_moderation(u8 cq_period_mode)
|
||||||
{
|
{
|
||||||
u8 profile_ix = cq_period_mode == DIM_CQ_PERIOD_MODE_START_FROM_CQE ?
|
u8 profile_ix = cq_period_mode == DIM_CQ_PERIOD_MODE_START_FROM_CQE ?
|
||||||
|
@ -125,7 +125,7 @@ net_dim_get_def_tx_moderation(u8 cq_period_mode)
|
||||||
return net_dim_get_tx_moderation(cq_period_mode, profile_ix);
|
return net_dim_get_tx_moderation(cq_period_mode, profile_ix);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int net_dim_step(struct net_dim *dim)
|
static inline int net_dim_step(struct dim *dim)
|
||||||
{
|
{
|
||||||
if (dim->tired == (NET_DIM_PARAMS_NUM_PROFILES * 2))
|
if (dim->tired == (NET_DIM_PARAMS_NUM_PROFILES * 2))
|
||||||
return DIM_TOO_TIRED;
|
return DIM_TOO_TIRED;
|
||||||
|
@ -152,7 +152,7 @@ static inline int net_dim_step(struct net_dim *dim)
|
||||||
return DIM_STEPPED;
|
return DIM_STEPPED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void net_dim_exit_parking(struct net_dim *dim)
|
static inline void net_dim_exit_parking(struct dim *dim)
|
||||||
{
|
{
|
||||||
dim->tune_state = dim->profile_ix ? DIM_GOING_LEFT :
|
dim->tune_state = dim->profile_ix ? DIM_GOING_LEFT :
|
||||||
DIM_GOING_RIGHT;
|
DIM_GOING_RIGHT;
|
||||||
|
@ -189,7 +189,7 @@ static inline int net_dim_stats_compare(struct dim_stats *curr,
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool net_dim_decision(struct dim_stats *curr_stats,
|
static inline bool net_dim_decision(struct dim_stats *curr_stats,
|
||||||
struct net_dim *dim)
|
struct dim *dim)
|
||||||
{
|
{
|
||||||
int prev_state = dim->tune_state;
|
int prev_state = dim->tune_state;
|
||||||
int prev_ix = dim->profile_ix;
|
int prev_ix = dim->profile_ix;
|
||||||
|
@ -240,8 +240,8 @@ static inline bool net_dim_decision(struct dim_stats *curr_stats,
|
||||||
return dim->profile_ix != prev_ix;
|
return dim->profile_ix != prev_ix;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void net_dim(struct net_dim *dim,
|
static inline void net_dim(struct dim *dim,
|
||||||
struct net_dim_sample end_sample)
|
struct dim_sample end_sample)
|
||||||
{
|
{
|
||||||
struct dim_stats curr_stats;
|
struct dim_stats curr_stats;
|
||||||
u16 nevents;
|
u16 nevents;
|
||||||
|
@ -261,8 +261,8 @@ static inline void net_dim(struct net_dim *dim,
|
||||||
}
|
}
|
||||||
/* fall through */
|
/* fall through */
|
||||||
case DIM_START_MEASURE:
|
case DIM_START_MEASURE:
|
||||||
net_dim_update_sample(end_sample.event_ctr, end_sample.pkt_ctr,
|
dim_update_sample(end_sample.event_ctr, end_sample.pkt_ctr,
|
||||||
end_sample.byte_ctr, &dim->start_sample);
|
end_sample.byte_ctr, &dim->start_sample);
|
||||||
dim->state = DIM_MEASURE_IN_PROGRESS;
|
dim->state = DIM_MEASURE_IN_PROGRESS;
|
||||||
break;
|
break;
|
||||||
case DIM_APPLY_NEW_PROFILE:
|
case DIM_APPLY_NEW_PROFILE:
|
||||||
|
|
Loading…
Reference in New Issue