Skip to content

Commit 1a24d4f

Browse files
jahurleydavem330
authored andcommitted
nfp: register flower reprs for egress dev offload
Register a callback for offloading flows that have a repr as their egress device. The new egdev_register function is added to net-next for the 4.15 release. Signed-off-by: John Hurley <[email protected]> Reviewed-by: Jakub Kicinski <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 743ba5b commit 1a24d4f

File tree

5 files changed

+54
-1
lines changed

5 files changed

+54
-1
lines changed

drivers/net/ethernet/netronome/nfp/flower/main.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,21 @@ nfp_flower_repr_netdev_stop(struct nfp_app *app, struct nfp_repr *repr)
125125
return nfp_flower_cmsg_portmod(repr, false);
126126
}
127127

128+
static int
129+
nfp_flower_repr_netdev_init(struct nfp_app *app, struct net_device *netdev)
130+
{
131+
return tc_setup_cb_egdev_register(netdev,
132+
nfp_flower_setup_tc_egress_cb,
133+
netdev_priv(netdev));
134+
}
135+
136+
static void
137+
nfp_flower_repr_netdev_clean(struct nfp_app *app, struct net_device *netdev)
138+
{
139+
tc_setup_cb_egdev_unregister(netdev, nfp_flower_setup_tc_egress_cb,
140+
netdev_priv(netdev));
141+
}
142+
128143
static void nfp_flower_sriov_disable(struct nfp_app *app)
129144
{
130145
struct nfp_flower_priv *priv = app->priv;
@@ -452,6 +467,9 @@ const struct nfp_app_type app_flower = {
452467
.vnic_init = nfp_flower_vnic_init,
453468
.vnic_clean = nfp_flower_vnic_clean,
454469

470+
.repr_init = nfp_flower_repr_netdev_init,
471+
.repr_clean = nfp_flower_repr_netdev_clean,
472+
455473
.repr_open = nfp_flower_repr_netdev_open,
456474
.repr_stop = nfp_flower_repr_netdev_stop,
457475

drivers/net/ethernet/netronome/nfp/flower/main.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,5 +196,7 @@ void nfp_tunnel_del_ipv4_off(struct nfp_app *app, __be32 ipv4);
196196
void nfp_tunnel_add_ipv4_off(struct nfp_app *app, __be32 ipv4);
197197
void nfp_tunnel_request_route(struct nfp_app *app, struct sk_buff *skb);
198198
void nfp_tunnel_keep_alive(struct nfp_app *app, struct sk_buff *skb);
199+
int nfp_flower_setup_tc_egress_cb(enum tc_setup_type type, void *type_data,
200+
void *cb_priv);
199201

200202
#endif

drivers/net/ethernet/netronome/nfp/flower/offload.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,12 @@ nfp_flower_repr_offload(struct nfp_app *app, struct net_device *netdev,
465465
return -EOPNOTSUPP;
466466
}
467467

468+
int nfp_flower_setup_tc_egress_cb(enum tc_setup_type type, void *type_data,
469+
void *cb_priv)
470+
{
471+
return -EINVAL;
472+
}
473+
468474
static int nfp_flower_setup_tc_block_cb(enum tc_setup_type type,
469475
void *type_data, void *cb_priv)
470476
{

drivers/net/ethernet/netronome/nfp/nfp_app.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ extern const struct nfp_app_type app_flower;
7676
* @vnic_free: free up app's vNIC state
7777
* @vnic_init: vNIC netdev was registered
7878
* @vnic_clean: vNIC netdev about to be unregistered
79+
* @repr_init: representor about to be registered
80+
* @repr_clean: representor about to be unregistered
7981
* @repr_open: representor netdev open callback
8082
* @repr_stop: representor netdev stop callback
8183
* @start: start application logic
@@ -109,6 +111,9 @@ struct nfp_app_type {
109111
int (*vnic_init)(struct nfp_app *app, struct nfp_net *nn);
110112
void (*vnic_clean)(struct nfp_app *app, struct nfp_net *nn);
111113

114+
int (*repr_init)(struct nfp_app *app, struct net_device *netdev);
115+
void (*repr_clean)(struct nfp_app *app, struct net_device *netdev);
116+
112117
int (*repr_open)(struct nfp_app *app, struct nfp_repr *repr);
113118
int (*repr_stop)(struct nfp_app *app, struct nfp_repr *repr);
114119

@@ -212,6 +217,21 @@ static inline int nfp_app_repr_stop(struct nfp_app *app, struct nfp_repr *repr)
212217
return app->type->repr_stop(app, repr);
213218
}
214219

220+
static inline int
221+
nfp_app_repr_init(struct nfp_app *app, struct net_device *netdev)
222+
{
223+
if (!app->type->repr_init)
224+
return 0;
225+
return app->type->repr_init(app, netdev);
226+
}
227+
228+
static inline void
229+
nfp_app_repr_clean(struct nfp_app *app, struct net_device *netdev)
230+
{
231+
if (app->type->repr_clean)
232+
app->type->repr_clean(app, netdev);
233+
}
234+
215235
static inline int nfp_app_start(struct nfp_app *app, struct nfp_net *ctrl)
216236
{
217237
app->ctrl = ctrl;

drivers/net/ethernet/netronome/nfp/nfp_net_repr.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@ const struct net_device_ops nfp_repr_netdev_ops = {
258258
static void nfp_repr_clean(struct nfp_repr *repr)
259259
{
260260
unregister_netdev(repr->netdev);
261+
nfp_app_repr_clean(repr->app, repr->netdev);
261262
dst_release((struct dst_entry *)repr->dst);
262263
nfp_port_free(repr->port);
263264
}
@@ -306,12 +307,18 @@ int nfp_repr_init(struct nfp_app *app, struct net_device *netdev,
306307
netdev->hw_features |= NETIF_F_HW_TC;
307308
}
308309

309-
err = register_netdev(netdev);
310+
err = nfp_app_repr_init(app, netdev);
310311
if (err)
311312
goto err_clean;
312313

314+
err = register_netdev(netdev);
315+
if (err)
316+
goto err_repr_clean;
317+
313318
return 0;
314319

320+
err_repr_clean:
321+
nfp_app_repr_clean(app, netdev);
315322
err_clean:
316323
dst_release((struct dst_entry *)repr->dst);
317324
return err;

0 commit comments

Comments
 (0)