net/mlx5: Move devlink port from mlx5e priv to mlx5e resources
We re-use the native NIC port net device instance for the Uplink representor, and the devlink port. When changing profiles we reset the mlx5e priv but we should still use the devlink port so move it to mlx5e resources. Signed-off-by: Roi Dayan <roid@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
parent
c276aae8c1
commit
c27971d08a
|
@ -880,7 +880,6 @@ struct mlx5e_priv {
|
||||||
#endif
|
#endif
|
||||||
struct devlink_health_reporter *tx_reporter;
|
struct devlink_health_reporter *tx_reporter;
|
||||||
struct devlink_health_reporter *rx_reporter;
|
struct devlink_health_reporter *rx_reporter;
|
||||||
struct devlink_port dl_port;
|
|
||||||
struct mlx5e_xsk xsk;
|
struct mlx5e_xsk xsk;
|
||||||
#if IS_ENABLED(CONFIG_PCI_HYPERV_INTERFACE)
|
#if IS_ENABLED(CONFIG_PCI_HYPERV_INTERFACE)
|
||||||
struct mlx5e_hv_vhca_stats_agent stats_agent;
|
struct mlx5e_hv_vhca_stats_agent stats_agent;
|
||||||
|
|
|
@ -19,6 +19,7 @@ int mlx5e_devlink_port_register(struct mlx5e_priv *priv)
|
||||||
struct devlink *devlink = priv_to_devlink(priv->mdev);
|
struct devlink *devlink = priv_to_devlink(priv->mdev);
|
||||||
struct devlink_port_attrs attrs = {};
|
struct devlink_port_attrs attrs = {};
|
||||||
struct netdev_phys_item_id ppid = {};
|
struct netdev_phys_item_id ppid = {};
|
||||||
|
struct devlink_port *dl_port;
|
||||||
unsigned int dl_port_index;
|
unsigned int dl_port_index;
|
||||||
|
|
||||||
if (mlx5_core_is_pf(priv->mdev)) {
|
if (mlx5_core_is_pf(priv->mdev)) {
|
||||||
|
@ -36,24 +37,30 @@ int mlx5e_devlink_port_register(struct mlx5e_priv *priv)
|
||||||
dl_port_index = mlx5_esw_vport_to_devlink_port_index(priv->mdev, 0);
|
dl_port_index = mlx5_esw_vport_to_devlink_port_index(priv->mdev, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
devlink_port_attrs_set(&priv->dl_port, &attrs);
|
dl_port = mlx5e_devlink_get_dl_port(priv);
|
||||||
|
memset(dl_port, 0, sizeof(*dl_port));
|
||||||
|
devlink_port_attrs_set(dl_port, &attrs);
|
||||||
|
|
||||||
return devlink_port_register(devlink, &priv->dl_port, dl_port_index);
|
return devlink_port_register(devlink, dl_port, dl_port_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mlx5e_devlink_port_type_eth_set(struct mlx5e_priv *priv)
|
void mlx5e_devlink_port_type_eth_set(struct mlx5e_priv *priv)
|
||||||
{
|
{
|
||||||
devlink_port_type_eth_set(&priv->dl_port, priv->netdev);
|
struct devlink_port *dl_port = mlx5e_devlink_get_dl_port(priv);
|
||||||
|
|
||||||
|
devlink_port_type_eth_set(dl_port, priv->netdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mlx5e_devlink_port_unregister(struct mlx5e_priv *priv)
|
void mlx5e_devlink_port_unregister(struct mlx5e_priv *priv)
|
||||||
{
|
{
|
||||||
devlink_port_unregister(&priv->dl_port);
|
struct devlink_port *dl_port = mlx5e_devlink_get_dl_port(priv);
|
||||||
|
|
||||||
|
devlink_port_unregister(dl_port);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct devlink_port *mlx5e_get_devlink_port(struct net_device *dev)
|
struct devlink_port *mlx5e_get_devlink_port(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct mlx5e_priv *priv = netdev_priv(dev);
|
struct mlx5e_priv *priv = netdev_priv(dev);
|
||||||
|
|
||||||
return &priv->dl_port;
|
return mlx5e_devlink_get_dl_port(priv);
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,4 +12,10 @@ void mlx5e_devlink_port_unregister(struct mlx5e_priv *priv);
|
||||||
void mlx5e_devlink_port_type_eth_set(struct mlx5e_priv *priv);
|
void mlx5e_devlink_port_type_eth_set(struct mlx5e_priv *priv);
|
||||||
struct devlink_port *mlx5e_get_devlink_port(struct net_device *dev);
|
struct devlink_port *mlx5e_get_devlink_port(struct net_device *dev);
|
||||||
|
|
||||||
|
static inline struct devlink_port *
|
||||||
|
mlx5e_devlink_get_dl_port(struct mlx5e_priv *priv)
|
||||||
|
{
|
||||||
|
return &priv->mdev->mlx5e_res.dl_port;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include "health.h"
|
#include "health.h"
|
||||||
#include "params.h"
|
#include "params.h"
|
||||||
#include "txrx.h"
|
#include "txrx.h"
|
||||||
|
#include "devlink.h"
|
||||||
|
|
||||||
static int mlx5e_query_rq_state(struct mlx5_core_dev *dev, u32 rqn, u8 *state)
|
static int mlx5e_query_rq_state(struct mlx5_core_dev *dev, u32 rqn, u8 *state)
|
||||||
{
|
{
|
||||||
|
@ -615,9 +616,10 @@ static const struct devlink_health_reporter_ops mlx5_rx_reporter_ops = {
|
||||||
|
|
||||||
void mlx5e_reporter_rx_create(struct mlx5e_priv *priv)
|
void mlx5e_reporter_rx_create(struct mlx5e_priv *priv)
|
||||||
{
|
{
|
||||||
|
struct devlink_port *dl_port = mlx5e_devlink_get_dl_port(priv);
|
||||||
struct devlink_health_reporter *reporter;
|
struct devlink_health_reporter *reporter;
|
||||||
|
|
||||||
reporter = devlink_port_health_reporter_create(&priv->dl_port, &mlx5_rx_reporter_ops,
|
reporter = devlink_port_health_reporter_create(dl_port, &mlx5_rx_reporter_ops,
|
||||||
MLX5E_REPORTER_RX_GRACEFUL_PERIOD, priv);
|
MLX5E_REPORTER_RX_GRACEFUL_PERIOD, priv);
|
||||||
if (IS_ERR(reporter)) {
|
if (IS_ERR(reporter)) {
|
||||||
netdev_warn(priv->netdev, "Failed to create rx reporter, err = %ld\n",
|
netdev_warn(priv->netdev, "Failed to create rx reporter, err = %ld\n",
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include "health.h"
|
#include "health.h"
|
||||||
#include "en/ptp.h"
|
#include "en/ptp.h"
|
||||||
|
#include "en/devlink.h"
|
||||||
|
|
||||||
static int mlx5e_wait_for_sq_flush(struct mlx5e_txqsq *sq)
|
static int mlx5e_wait_for_sq_flush(struct mlx5e_txqsq *sq)
|
||||||
{
|
{
|
||||||
|
@ -572,9 +573,10 @@ static const struct devlink_health_reporter_ops mlx5_tx_reporter_ops = {
|
||||||
|
|
||||||
void mlx5e_reporter_tx_create(struct mlx5e_priv *priv)
|
void mlx5e_reporter_tx_create(struct mlx5e_priv *priv)
|
||||||
{
|
{
|
||||||
|
struct devlink_port *dl_port = mlx5e_devlink_get_dl_port(priv);
|
||||||
struct devlink_health_reporter *reporter;
|
struct devlink_health_reporter *reporter;
|
||||||
|
|
||||||
reporter = devlink_port_health_reporter_create(&priv->dl_port, &mlx5_tx_reporter_ops,
|
reporter = devlink_port_health_reporter_create(dl_port, &mlx5_tx_reporter_ops,
|
||||||
MLX5_REPORTER_TX_GRACEFUL_PERIOD, priv);
|
MLX5_REPORTER_TX_GRACEFUL_PERIOD, priv);
|
||||||
if (IS_ERR(reporter)) {
|
if (IS_ERR(reporter)) {
|
||||||
netdev_warn(priv->netdev,
|
netdev_warn(priv->netdev,
|
||||||
|
|
|
@ -52,6 +52,7 @@
|
||||||
#include "en/health.h"
|
#include "en/health.h"
|
||||||
#include "en/params.h"
|
#include "en/params.h"
|
||||||
#include "devlink.h"
|
#include "devlink.h"
|
||||||
|
#include "en/devlink.h"
|
||||||
|
|
||||||
static struct sk_buff *
|
static struct sk_buff *
|
||||||
mlx5e_skb_from_cqe_mpwrq_linear(struct mlx5e_rq *rq, struct mlx5e_mpw_info *wi,
|
mlx5e_skb_from_cqe_mpwrq_linear(struct mlx5e_rq *rq, struct mlx5e_mpw_info *wi,
|
||||||
|
@ -1823,6 +1824,7 @@ static void mlx5e_trap_handle_rx_cqe(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe
|
||||||
struct mlx5e_priv *priv = netdev_priv(rq->netdev);
|
struct mlx5e_priv *priv = netdev_priv(rq->netdev);
|
||||||
struct mlx5_wq_cyc *wq = &rq->wqe.wq;
|
struct mlx5_wq_cyc *wq = &rq->wqe.wq;
|
||||||
struct mlx5e_wqe_frag_info *wi;
|
struct mlx5e_wqe_frag_info *wi;
|
||||||
|
struct devlink_port *dl_port;
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
u32 cqe_bcnt;
|
u32 cqe_bcnt;
|
||||||
u16 trap_id;
|
u16 trap_id;
|
||||||
|
@ -1845,7 +1847,8 @@ static void mlx5e_trap_handle_rx_cqe(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe
|
||||||
mlx5e_complete_rx_cqe(rq, cqe, cqe_bcnt, skb);
|
mlx5e_complete_rx_cqe(rq, cqe, cqe_bcnt, skb);
|
||||||
skb_push(skb, ETH_HLEN);
|
skb_push(skb, ETH_HLEN);
|
||||||
|
|
||||||
mlx5_devlink_trap_report(rq->mdev, trap_id, skb, &priv->dl_port);
|
dl_port = mlx5e_devlink_get_dl_port(priv);
|
||||||
|
mlx5_devlink_trap_report(rq->mdev, trap_id, skb, dl_port);
|
||||||
dev_kfree_skb_any(skb);
|
dev_kfree_skb_any(skb);
|
||||||
|
|
||||||
free_wqe:
|
free_wqe:
|
||||||
|
|
|
@ -650,6 +650,7 @@ struct mlx5e_resources {
|
||||||
struct mlx5_core_mkey mkey;
|
struct mlx5_core_mkey mkey;
|
||||||
struct mlx5_sq_bfreg bfreg;
|
struct mlx5_sq_bfreg bfreg;
|
||||||
} hw_objs;
|
} hw_objs;
|
||||||
|
struct devlink_port dl_port;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum mlx5_sw_icm_type {
|
enum mlx5_sw_icm_type {
|
||||||
|
|
Loading…
Reference in New Issue