Commit 3f5a6830 authored by David S. Miller's avatar David S. Miller

Merge branch 'mlx4-misc'

Tariq Toukan says:

====================
mlx4_en misc for 4.17

This patchset contains misc enhancements from the team
to the mlx4 Eth driver.

Patch 1 by Eran adds physical layer counters.
Patch 2 by Eran cleans-up a redundant warn print.
Patch 3 combines the checks of two end cases into a single if statement.
Patch 4 takes common code structures out of the #ifdef, following your
comment on a previous patch.

Series generated against net-next commit:
f74290fd Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 431c7ec3 a970d8db
...@@ -199,6 +199,10 @@ static const char main_strings[][ETH_GSTRING_LEN] = { ...@@ -199,6 +199,10 @@ static const char main_strings[][ETH_GSTRING_LEN] = {
"rx_xdp_drop", "rx_xdp_drop",
"rx_xdp_tx", "rx_xdp_tx",
"rx_xdp_tx_full", "rx_xdp_tx_full",
/* phy statistics */
"rx_packets_phy", "rx_bytes_phy",
"tx_packets_phy", "tx_bytes_phy",
}; };
static const char mlx4_en_test_names[][ETH_GSTRING_LEN]= { static const char mlx4_en_test_names[][ETH_GSTRING_LEN]= {
...@@ -411,6 +415,10 @@ static void mlx4_en_get_ethtool_stats(struct net_device *dev, ...@@ -411,6 +415,10 @@ static void mlx4_en_get_ethtool_stats(struct net_device *dev,
if (bitmap_iterator_test(&it)) if (bitmap_iterator_test(&it))
data[index++] = ((unsigned long *)&priv->xdp_stats)[i]; data[index++] = ((unsigned long *)&priv->xdp_stats)[i];
for (i = 0; i < NUM_PHY_STATS; i++, bitmap_iterator_inc(&it))
if (bitmap_iterator_test(&it))
data[index++] = ((unsigned long *)&priv->phy_stats)[i];
for (i = 0; i < priv->tx_ring_num[TX]; i++) { for (i = 0; i < priv->tx_ring_num[TX]; i++) {
data[index++] = priv->tx_ring[TX][i]->packets; data[index++] = priv->tx_ring[TX][i]->packets;
data[index++] = priv->tx_ring[TX][i]->bytes; data[index++] = priv->tx_ring[TX][i]->bytes;
...@@ -490,6 +498,12 @@ static void mlx4_en_get_strings(struct net_device *dev, ...@@ -490,6 +498,12 @@ static void mlx4_en_get_strings(struct net_device *dev,
strcpy(data + (index++) * ETH_GSTRING_LEN, strcpy(data + (index++) * ETH_GSTRING_LEN,
main_strings[strings]); main_strings[strings]);
for (i = 0; i < NUM_PHY_STATS; i++, strings++,
bitmap_iterator_inc(&it))
if (bitmap_iterator_test(&it))
strcpy(data + (index++) * ETH_GSTRING_LEN,
main_strings[strings]);
for (i = 0; i < priv->tx_ring_num[TX]; i++) { for (i = 0; i < priv->tx_ring_num[TX]; i++) {
sprintf(data + (index++) * ETH_GSTRING_LEN, sprintf(data + (index++) * ETH_GSTRING_LEN,
"tx%d_packets", i); "tx%d_packets", i);
......
...@@ -3256,6 +3256,10 @@ void mlx4_en_set_stats_bitmap(struct mlx4_dev *dev, ...@@ -3256,6 +3256,10 @@ void mlx4_en_set_stats_bitmap(struct mlx4_dev *dev,
bitmap_set(stats_bitmap->bitmap, last_i, NUM_XDP_STATS); bitmap_set(stats_bitmap->bitmap, last_i, NUM_XDP_STATS);
last_i += NUM_XDP_STATS; last_i += NUM_XDP_STATS;
if (!mlx4_is_slave(dev))
bitmap_set(stats_bitmap->bitmap, last_i, NUM_PHY_STATS);
last_i += NUM_PHY_STATS;
} }
int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
...@@ -3630,10 +3634,6 @@ int mlx4_en_reset_config(struct net_device *dev, ...@@ -3630,10 +3634,6 @@ int mlx4_en_reset_config(struct net_device *dev,
mlx4_en_stop_port(dev, 1); mlx4_en_stop_port(dev, 1);
} }
en_warn(priv, "Changing device configuration rx filter(%x) rx vlan(%x)\n",
ts_config.rx_filter,
!!(features & NETIF_F_HW_VLAN_CTAG_RX));
mlx4_en_safe_replace_resources(priv, tmp); mlx4_en_safe_replace_resources(priv, tmp);
if (DEV_FEATURE_CHANGED(dev, features, NETIF_F_HW_VLAN_CTAG_RX)) { if (DEV_FEATURE_CHANGED(dev, features, NETIF_F_HW_VLAN_CTAG_RX)) {
......
...@@ -275,19 +275,31 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset) ...@@ -275,19 +275,31 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset)
priv->port_stats.xmit_more += READ_ONCE(ring->xmit_more); priv->port_stats.xmit_more += READ_ONCE(ring->xmit_more);
} }
if (mlx4_is_master(mdev->dev)) { if (!mlx4_is_slave(mdev->dev)) {
stats->rx_packets = en_stats_adder(&mlx4_en_stats->RTOT_prio_0, struct mlx4_en_phy_stats *p_stats = &priv->phy_stats;
&mlx4_en_stats->RTOT_prio_1,
NUM_PRIORITIES); p_stats->rx_packets_phy =
stats->tx_packets = en_stats_adder(&mlx4_en_stats->TTOT_prio_0, en_stats_adder(&mlx4_en_stats->RTOT_prio_0,
&mlx4_en_stats->TTOT_prio_1, &mlx4_en_stats->RTOT_prio_1,
NUM_PRIORITIES); NUM_PRIORITIES);
stats->rx_bytes = en_stats_adder(&mlx4_en_stats->ROCT_prio_0, p_stats->tx_packets_phy =
&mlx4_en_stats->ROCT_prio_1, en_stats_adder(&mlx4_en_stats->TTOT_prio_0,
NUM_PRIORITIES); &mlx4_en_stats->TTOT_prio_1,
stats->tx_bytes = en_stats_adder(&mlx4_en_stats->TOCT_prio_0, NUM_PRIORITIES);
&mlx4_en_stats->TOCT_prio_1, p_stats->rx_bytes_phy =
NUM_PRIORITIES); en_stats_adder(&mlx4_en_stats->ROCT_prio_0,
&mlx4_en_stats->ROCT_prio_1,
NUM_PRIORITIES);
p_stats->tx_bytes_phy =
en_stats_adder(&mlx4_en_stats->TOCT_prio_0,
&mlx4_en_stats->TOCT_prio_1,
NUM_PRIORITIES);
if (mlx4_is_master(mdev->dev)) {
stats->rx_packets = p_stats->rx_packets_phy;
stats->tx_packets = p_stats->tx_packets_phy;
stats->rx_bytes = p_stats->rx_bytes_phy;
stats->tx_bytes = p_stats->tx_bytes_phy;
}
} }
/* net device stats */ /* net device stats */
......
...@@ -649,6 +649,12 @@ static int check_csum(struct mlx4_cqe *cqe, struct sk_buff *skb, void *va, ...@@ -649,6 +649,12 @@ static int check_csum(struct mlx4_cqe *cqe, struct sk_buff *skb, void *va,
return get_fixed_ipv4_csum(hw_checksum, skb, hdr); return get_fixed_ipv4_csum(hw_checksum, skb, hdr);
} }
#if IS_ENABLED(CONFIG_IPV6)
#define MLX4_CQE_STATUS_IP_ANY (MLX4_CQE_STATUS_IPV4 | MLX4_CQE_STATUS_IPV6)
#else
#define MLX4_CQE_STATUS_IP_ANY (MLX4_CQE_STATUS_IPV4)
#endif
int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int budget) int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int budget)
{ {
struct mlx4_en_priv *priv = netdev_priv(dev); struct mlx4_en_priv *priv = netdev_priv(dev);
...@@ -662,12 +668,9 @@ int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int bud ...@@ -662,12 +668,9 @@ int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int bud
int polled = 0; int polled = 0;
int index; int index;
if (unlikely(!priv->port_up)) if (unlikely(!priv->port_up || budget <= 0))
return 0; return 0;
if (unlikely(budget <= 0))
return polled;
ring = priv->rx_ring[cq_ring]; ring = priv->rx_ring[cq_ring];
/* Protect accesses to: ring->xdp_prog, priv->mac_hash list */ /* Protect accesses to: ring->xdp_prog, priv->mac_hash list */
...@@ -838,12 +841,7 @@ int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int bud ...@@ -838,12 +841,7 @@ int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int bud
ring->csum_ok++; ring->csum_ok++;
} else { } else {
if (!(priv->flags & MLX4_EN_FLAG_RX_CSUM_NON_TCP_UDP && if (!(priv->flags & MLX4_EN_FLAG_RX_CSUM_NON_TCP_UDP &&
(cqe->status & cpu_to_be16(MLX4_CQE_STATUS_IPV4 | (cqe->status & cpu_to_be16(MLX4_CQE_STATUS_IP_ANY))))
#if IS_ENABLED(CONFIG_IPV6)
MLX4_CQE_STATUS_IPV6))))
#else
0))))
#endif
goto csum_none; goto csum_none;
if (check_csum(cqe, skb, va, dev->features)) if (check_csum(cqe, skb, va, dev->features))
goto csum_none; goto csum_none;
......
...@@ -608,6 +608,7 @@ struct mlx4_en_priv { ...@@ -608,6 +608,7 @@ struct mlx4_en_priv {
struct mlx4_en_flow_stats_tx tx_flowstats; struct mlx4_en_flow_stats_tx tx_flowstats;
struct mlx4_en_port_stats port_stats; struct mlx4_en_port_stats port_stats;
struct mlx4_en_xdp_stats xdp_stats; struct mlx4_en_xdp_stats xdp_stats;
struct mlx4_en_phy_stats phy_stats;
struct mlx4_en_stats_bitmap stats_bitmap; struct mlx4_en_stats_bitmap stats_bitmap;
struct list_head mc_list; struct list_head mc_list;
struct list_head curr_list; struct list_head curr_list;
......
...@@ -63,6 +63,14 @@ struct mlx4_en_xdp_stats { ...@@ -63,6 +63,14 @@ struct mlx4_en_xdp_stats {
#define NUM_XDP_STATS 3 #define NUM_XDP_STATS 3
}; };
struct mlx4_en_phy_stats {
unsigned long rx_packets_phy;
unsigned long rx_bytes_phy;
unsigned long tx_packets_phy;
unsigned long tx_bytes_phy;
#define NUM_PHY_STATS 4
};
#define NUM_MAIN_STATS 21 #define NUM_MAIN_STATS 21
#define MLX4_NUM_PRIORITIES 8 #define MLX4_NUM_PRIORITIES 8
...@@ -116,7 +124,7 @@ enum { ...@@ -116,7 +124,7 @@ enum {
#define NUM_ALL_STATS (NUM_MAIN_STATS + NUM_PORT_STATS + NUM_PKT_STATS + \ #define NUM_ALL_STATS (NUM_MAIN_STATS + NUM_PORT_STATS + NUM_PKT_STATS + \
NUM_FLOW_STATS + NUM_PERF_STATS + NUM_PF_STATS + \ NUM_FLOW_STATS + NUM_PERF_STATS + NUM_PF_STATS + \
NUM_XDP_STATS) NUM_XDP_STATS + NUM_PHY_STATS)
#define MLX4_FIND_NETDEV_STAT(n) (offsetof(struct net_device_stats, n) / \ #define MLX4_FIND_NETDEV_STAT(n) (offsetof(struct net_device_stats, n) / \
sizeof(((struct net_device_stats *)0)->n)) sizeof(((struct net_device_stats *)0)->n))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment