提交 ef0ec676 编写于 作者: J Jakub Kicinski 提交者: David S. Miller

nfp: add pointer to vNIC config memory to nfp_port structure

Simplify the statistics handling code by keeping pointer to vNIC's
config memory in nfp_port.  Note that this is referring to the
representor side of vNICs, vNIC side has the pointer in nfp_net.
Signed-off-by: NJakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: NSimon Horman <simon.horman@netronome.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 098ce840
...@@ -159,12 +159,18 @@ nfp_flower_spawn_vnic_reprs(struct nfp_app *app, ...@@ -159,12 +159,18 @@ nfp_flower_spawn_vnic_reprs(struct nfp_app *app,
goto err_reprs_clean; goto err_reprs_clean;
} }
/* For now we only support 1 PF */
WARN_ON(repr_type == NFP_REPR_TYPE_PF && i);
port = nfp_port_alloc(app, port_type, reprs->reprs[i]); port = nfp_port_alloc(app, port_type, reprs->reprs[i]);
if (repr_type == NFP_REPR_TYPE_PF) { if (repr_type == NFP_REPR_TYPE_PF) {
port->pf_id = i; port->pf_id = i;
port->vnic = priv->nn->dp.ctrl_bar;
} else { } else {
port->pf_id = 0; /* For now we only support 1 PF */ port->pf_id = 0;
port->vf_id = i; port->vf_id = i;
port->vnic =
app->pf->vf_cfg_mem + i * NFP_NET_CFG_BAR_SZ;
} }
eth_hw_addr_random(reprs->reprs[i]); eth_hw_addr_random(reprs->reprs[i]);
......
...@@ -96,50 +96,25 @@ nfp_repr_phy_port_get_stats64(struct nfp_port *port, ...@@ -96,50 +96,25 @@ nfp_repr_phy_port_get_stats64(struct nfp_port *port,
} }
static void static void
nfp_repr_vf_get_stats64(const struct nfp_app *app, u8 vf, nfp_repr_vnic_get_stats64(struct nfp_port *port,
struct rtnl_link_stats64 *stats) struct rtnl_link_stats64 *stats)
{ {
u8 __iomem *mem;
mem = app->pf->vf_cfg_mem + vf * NFP_NET_CFG_BAR_SZ;
/* TX and RX stats are flipped as we are returning the stats as seen /* TX and RX stats are flipped as we are returning the stats as seen
* at the switch port corresponding to the VF. * at the switch port corresponding to the VF.
*/ */
stats->tx_packets = readq(mem + NFP_NET_CFG_STATS_RX_FRAMES); stats->tx_packets = readq(port->vnic + NFP_NET_CFG_STATS_RX_FRAMES);
stats->tx_bytes = readq(mem + NFP_NET_CFG_STATS_RX_OCTETS); stats->tx_bytes = readq(port->vnic + NFP_NET_CFG_STATS_RX_OCTETS);
stats->tx_dropped = readq(mem + NFP_NET_CFG_STATS_RX_DISCARDS); stats->tx_dropped = readq(port->vnic + NFP_NET_CFG_STATS_RX_DISCARDS);
stats->rx_packets = readq(mem + NFP_NET_CFG_STATS_TX_FRAMES); stats->rx_packets = readq(port->vnic + NFP_NET_CFG_STATS_TX_FRAMES);
stats->rx_bytes = readq(mem + NFP_NET_CFG_STATS_TX_OCTETS); stats->rx_bytes = readq(port->vnic + NFP_NET_CFG_STATS_TX_OCTETS);
stats->rx_dropped = readq(mem + NFP_NET_CFG_STATS_TX_DISCARDS); stats->rx_dropped = readq(port->vnic + NFP_NET_CFG_STATS_TX_DISCARDS);
}
static void
nfp_repr_pf_get_stats64(const struct nfp_app *app, u8 pf,
struct rtnl_link_stats64 *stats)
{
u8 __iomem *mem;
if (pf)
return;
mem = nfp_cpp_area_iomem(app->pf->data_vnic_bar);
stats->tx_packets = readq(mem + NFP_NET_CFG_STATS_RX_FRAMES);
stats->tx_bytes = readq(mem + NFP_NET_CFG_STATS_RX_OCTETS);
stats->tx_dropped = readq(mem + NFP_NET_CFG_STATS_RX_DISCARDS);
stats->rx_packets = readq(mem + NFP_NET_CFG_STATS_TX_FRAMES);
stats->rx_bytes = readq(mem + NFP_NET_CFG_STATS_TX_OCTETS);
stats->rx_dropped = readq(mem + NFP_NET_CFG_STATS_TX_DISCARDS);
} }
static void static void
nfp_repr_get_stats64(struct net_device *netdev, struct rtnl_link_stats64 *stats) nfp_repr_get_stats64(struct net_device *netdev, struct rtnl_link_stats64 *stats)
{ {
struct nfp_repr *repr = netdev_priv(netdev); struct nfp_repr *repr = netdev_priv(netdev);
struct nfp_app *app = repr->app;
if (WARN_ON(!repr->port)) if (WARN_ON(!repr->port))
return; return;
...@@ -151,10 +126,8 @@ nfp_repr_get_stats64(struct net_device *netdev, struct rtnl_link_stats64 *stats) ...@@ -151,10 +126,8 @@ nfp_repr_get_stats64(struct net_device *netdev, struct rtnl_link_stats64 *stats)
nfp_repr_phy_port_get_stats64(repr->port, stats); nfp_repr_phy_port_get_stats64(repr->port, stats);
break; break;
case NFP_PORT_PF_PORT: case NFP_PORT_PF_PORT:
nfp_repr_pf_get_stats64(app, repr->port->pf_id, stats);
break;
case NFP_PORT_VF_PORT: case NFP_PORT_VF_PORT:
nfp_repr_vf_get_stats64(app, repr->port->vf_id, stats); nfp_repr_vnic_get_stats64(repr->port, stats);
default: default:
break; break;
} }
......
...@@ -79,6 +79,7 @@ enum nfp_port_flags { ...@@ -79,6 +79,7 @@ enum nfp_port_flags {
* @eth_stats: for %NFP_PORT_PHYS_PORT MAC stats if available * @eth_stats: for %NFP_PORT_PHYS_PORT MAC stats if available
* @pf_id: for %NFP_PORT_PF_PORT, %NFP_PORT_VF_PORT ID of the PCI PF (0-3) * @pf_id: for %NFP_PORT_PF_PORT, %NFP_PORT_VF_PORT ID of the PCI PF (0-3)
* @vf_id: for %NFP_PORT_VF_PORT ID of the PCI VF within @pf_id * @vf_id: for %NFP_PORT_VF_PORT ID of the PCI VF within @pf_id
* @vnic: for %NFP_PORT_PF_PORT, %NFP_PORT_VF_PORT vNIC ctrl memory
* @port_list: entry on pf's list of ports * @port_list: entry on pf's list of ports
*/ */
struct nfp_port { struct nfp_port {
...@@ -102,6 +103,7 @@ struct nfp_port { ...@@ -102,6 +103,7 @@ struct nfp_port {
struct { struct {
unsigned int pf_id; unsigned int pf_id;
unsigned int vf_id; unsigned int vf_id;
u8 __iomem *vnic;
}; };
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册