|
@@ -185,6 +185,10 @@ nfp_flower_repr_netdev_init(struct nfp_app *app, struct net_device *netdev)
|
|
|
static void
|
|
|
nfp_flower_repr_netdev_clean(struct nfp_app *app, struct net_device *netdev)
|
|
|
{
|
|
|
+ struct nfp_repr *repr = netdev_priv(netdev);
|
|
|
+
|
|
|
+ kfree(repr->app_priv);
|
|
|
+
|
|
|
tc_setup_cb_egdev_unregister(netdev, nfp_flower_setup_tc_egress_cb,
|
|
|
netdev_priv(netdev));
|
|
|
}
|
|
@@ -225,7 +229,9 @@ nfp_flower_spawn_vnic_reprs(struct nfp_app *app,
|
|
|
u8 nfp_pcie = nfp_cppcore_pcie_unit(app->pf->cpp);
|
|
|
struct nfp_flower_priv *priv = app->priv;
|
|
|
atomic_t *replies = &priv->reify_replies;
|
|
|
+ struct nfp_flower_repr_priv *repr_priv;
|
|
|
enum nfp_port_type port_type;
|
|
|
+ struct nfp_repr *nfp_repr;
|
|
|
struct nfp_reprs *reprs;
|
|
|
int i, err, reify_cnt;
|
|
|
const u8 queue = 0;
|
|
@@ -248,6 +254,15 @@ nfp_flower_spawn_vnic_reprs(struct nfp_app *app,
|
|
|
goto err_reprs_clean;
|
|
|
}
|
|
|
|
|
|
+ repr_priv = kzalloc(sizeof(*repr_priv), GFP_KERNEL);
|
|
|
+ if (!repr_priv) {
|
|
|
+ err = -ENOMEM;
|
|
|
+ goto err_reprs_clean;
|
|
|
+ }
|
|
|
+
|
|
|
+ nfp_repr = netdev_priv(repr);
|
|
|
+ nfp_repr->app_priv = repr_priv;
|
|
|
+
|
|
|
/* For now we only support 1 PF */
|
|
|
WARN_ON(repr_type == NFP_REPR_TYPE_PF && i);
|
|
|
|
|
@@ -324,6 +339,8 @@ nfp_flower_spawn_phy_reprs(struct nfp_app *app, struct nfp_flower_priv *priv)
|
|
|
{
|
|
|
struct nfp_eth_table *eth_tbl = app->pf->eth_tbl;
|
|
|
atomic_t *replies = &priv->reify_replies;
|
|
|
+ struct nfp_flower_repr_priv *repr_priv;
|
|
|
+ struct nfp_repr *nfp_repr;
|
|
|
struct sk_buff *ctrl_skb;
|
|
|
struct nfp_reprs *reprs;
|
|
|
int err, reify_cnt;
|
|
@@ -351,6 +368,15 @@ nfp_flower_spawn_phy_reprs(struct nfp_app *app, struct nfp_flower_priv *priv)
|
|
|
goto err_reprs_clean;
|
|
|
}
|
|
|
|
|
|
+ repr_priv = kzalloc(sizeof(*repr_priv), GFP_KERNEL);
|
|
|
+ if (!repr_priv) {
|
|
|
+ err = -ENOMEM;
|
|
|
+ goto err_reprs_clean;
|
|
|
+ }
|
|
|
+
|
|
|
+ nfp_repr = netdev_priv(repr);
|
|
|
+ nfp_repr->app_priv = repr_priv;
|
|
|
+
|
|
|
port = nfp_port_alloc(app, NFP_PORT_PHYS_PORT, repr);
|
|
|
if (IS_ERR(port)) {
|
|
|
err = PTR_ERR(port);
|