mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-02 06:16:41 +07:00
Merge branch 'mlx4-misc-fixes'
Tariq Toukan says:
====================
mlx4 misc fixes
This patchset contains misc bug fixes from the team
to the mlx4 Core and Eth drivers.
Patch 1 by Eugenia fixes an MTU issue in selftest.
Patch 2 by Eran fixes an accounting issue in the resource tracker.
Patch 3 by Eran fixes a race condition that causes counter inconsistency.
Series generated against net commit:
200809716a
fou: fix some member types in guehdr
v2:
Patch 2: Add reviewer credit, rephrase commit message.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
f6e168b4a1
@ -188,7 +188,7 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset)
|
||||
struct net_device *dev = mdev->pndev[port];
|
||||
struct mlx4_en_priv *priv = netdev_priv(dev);
|
||||
struct net_device_stats *stats = &dev->stats;
|
||||
struct mlx4_cmd_mailbox *mailbox;
|
||||
struct mlx4_cmd_mailbox *mailbox, *mailbox_priority;
|
||||
u64 in_mod = reset << 8 | port;
|
||||
int err;
|
||||
int i, counter_index;
|
||||
@ -198,6 +198,13 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset)
|
||||
mailbox = mlx4_alloc_cmd_mailbox(mdev->dev);
|
||||
if (IS_ERR(mailbox))
|
||||
return PTR_ERR(mailbox);
|
||||
|
||||
mailbox_priority = mlx4_alloc_cmd_mailbox(mdev->dev);
|
||||
if (IS_ERR(mailbox_priority)) {
|
||||
mlx4_free_cmd_mailbox(mdev->dev, mailbox);
|
||||
return PTR_ERR(mailbox_priority);
|
||||
}
|
||||
|
||||
err = mlx4_cmd_box(mdev->dev, 0, mailbox->dma, in_mod, 0,
|
||||
MLX4_CMD_DUMP_ETH_STATS, MLX4_CMD_TIME_CLASS_B,
|
||||
MLX4_CMD_NATIVE);
|
||||
@ -206,6 +213,28 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset)
|
||||
|
||||
mlx4_en_stats = mailbox->buf;
|
||||
|
||||
memset(&tmp_counter_stats, 0, sizeof(tmp_counter_stats));
|
||||
counter_index = mlx4_get_default_counter_index(mdev->dev, port);
|
||||
err = mlx4_get_counter_stats(mdev->dev, counter_index,
|
||||
&tmp_counter_stats, reset);
|
||||
|
||||
/* 0xffs indicates invalid value */
|
||||
memset(mailbox_priority->buf, 0xff,
|
||||
sizeof(*flowstats) * MLX4_NUM_PRIORITIES);
|
||||
|
||||
if (mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_FLOWSTATS_EN) {
|
||||
memset(mailbox_priority->buf, 0,
|
||||
sizeof(*flowstats) * MLX4_NUM_PRIORITIES);
|
||||
err = mlx4_cmd_box(mdev->dev, 0, mailbox_priority->dma,
|
||||
in_mod | MLX4_DUMP_ETH_STATS_FLOW_CONTROL,
|
||||
0, MLX4_CMD_DUMP_ETH_STATS,
|
||||
MLX4_CMD_TIME_CLASS_B, MLX4_CMD_NATIVE);
|
||||
if (err)
|
||||
goto out;
|
||||
}
|
||||
|
||||
flowstats = mailbox_priority->buf;
|
||||
|
||||
spin_lock_bh(&priv->stats_lock);
|
||||
|
||||
mlx4_en_fold_software_stats(dev);
|
||||
@ -345,31 +374,6 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset)
|
||||
priv->pkstats.tx_prio[8][0] = be64_to_cpu(mlx4_en_stats->TTOT_novlan);
|
||||
priv->pkstats.tx_prio[8][1] = be64_to_cpu(mlx4_en_stats->TOCT_novlan);
|
||||
|
||||
spin_unlock_bh(&priv->stats_lock);
|
||||
|
||||
memset(&tmp_counter_stats, 0, sizeof(tmp_counter_stats));
|
||||
counter_index = mlx4_get_default_counter_index(mdev->dev, port);
|
||||
err = mlx4_get_counter_stats(mdev->dev, counter_index,
|
||||
&tmp_counter_stats, reset);
|
||||
|
||||
/* 0xffs indicates invalid value */
|
||||
memset(mailbox->buf, 0xff, sizeof(*flowstats) * MLX4_NUM_PRIORITIES);
|
||||
|
||||
if (mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_FLOWSTATS_EN) {
|
||||
memset(mailbox->buf, 0,
|
||||
sizeof(*flowstats) * MLX4_NUM_PRIORITIES);
|
||||
err = mlx4_cmd_box(mdev->dev, 0, mailbox->dma,
|
||||
in_mod | MLX4_DUMP_ETH_STATS_FLOW_CONTROL,
|
||||
0, MLX4_CMD_DUMP_ETH_STATS,
|
||||
MLX4_CMD_TIME_CLASS_B, MLX4_CMD_NATIVE);
|
||||
if (err)
|
||||
goto out;
|
||||
}
|
||||
|
||||
flowstats = mailbox->buf;
|
||||
|
||||
spin_lock_bh(&priv->stats_lock);
|
||||
|
||||
if (tmp_counter_stats.counter_mode == 0) {
|
||||
priv->pf_stats.rx_bytes = be64_to_cpu(tmp_counter_stats.rx_bytes);
|
||||
priv->pf_stats.tx_bytes = be64_to_cpu(tmp_counter_stats.tx_bytes);
|
||||
@ -410,6 +414,7 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset)
|
||||
|
||||
out:
|
||||
mlx4_free_cmd_mailbox(mdev->dev, mailbox);
|
||||
mlx4_free_cmd_mailbox(mdev->dev, mailbox_priority);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -185,7 +185,7 @@ void mlx4_en_ex_selftest(struct net_device *dev, u32 *flags, u64 *buf)
|
||||
if (priv->mdev->dev->caps.flags &
|
||||
MLX4_DEV_CAP_FLAG_UC_LOOPBACK) {
|
||||
buf[3] = mlx4_en_test_registers(priv);
|
||||
if (priv->port_up)
|
||||
if (priv->port_up && dev->mtu >= MLX4_SELFTEST_LB_MIN_MTU)
|
||||
buf[4] = mlx4_en_test_loopback(priv);
|
||||
}
|
||||
|
||||
|
@ -153,6 +153,9 @@
|
||||
#define SMALL_PACKET_SIZE (256 - NET_IP_ALIGN)
|
||||
#define HEADER_COPY_SIZE (128 - NET_IP_ALIGN)
|
||||
#define MLX4_LOOPBACK_TEST_PAYLOAD (HEADER_COPY_SIZE - ETH_HLEN)
|
||||
#define PREAMBLE_LEN 8
|
||||
#define MLX4_SELFTEST_LB_MIN_MTU (MLX4_LOOPBACK_TEST_PAYLOAD + NET_IP_ALIGN + \
|
||||
ETH_HLEN + PREAMBLE_LEN)
|
||||
|
||||
#define MLX4_EN_MIN_MTU 46
|
||||
/* VLAN_HLEN is added twice,to support skb vlan tagged with multiple
|
||||
|
@ -611,7 +611,6 @@ int mlx4_init_resource_tracker(struct mlx4_dev *dev)
|
||||
MLX4_MAX_PORTS;
|
||||
else
|
||||
res_alloc->guaranteed[t] = 0;
|
||||
res_alloc->res_free -= res_alloc->guaranteed[t];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user