diff options
author | John Hurley <john.hurley@netronome.com> | 2018-03-28 21:50:06 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-03-30 10:18:54 -0400 |
commit | 167cebeffadd45ce1e786889ab9346c15d64389b (patch) | |
tree | 23c2a23679e34361ddb03a2c694302c0af638c7a | |
parent | 44465c47a4a3adba98588b081e6880e9b2071fa8 (diff) |
nfp: modify app MTU setting callbacks
Rename the 'change_mtu' app callback to 'check_mtu'. This is called
whenever an MTU change is requested on a netdev. It can reject the
change but is not responsible for implementing it.
Introduce a new 'repr_change_mtu' app callback that is hit when the MTU
of a repr is to be changed. This is responsible for performing the MTU
change and verifying it.
Signed-off-by: John Hurley <john.hurley@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/netronome/nfp/bpf/main.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/netronome/nfp/nfp_app.h | 25 | ||||
-rw-r--r-- | drivers/net/ethernet/netronome/nfp/nfp_net_common.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/netronome/nfp/nfp_net_repr.c | 13 |
4 files changed, 33 insertions, 11 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/bpf/main.c b/drivers/net/ethernet/netronome/nfp/bpf/main.c index 34e98aa6b956..752c45763ed9 100644 --- a/drivers/net/ethernet/netronome/nfp/bpf/main.c +++ b/drivers/net/ethernet/netronome/nfp/bpf/main.c | |||
@@ -221,7 +221,7 @@ static int nfp_bpf_setup_tc(struct nfp_app *app, struct net_device *netdev, | |||
221 | } | 221 | } |
222 | 222 | ||
223 | static int | 223 | static int |
224 | nfp_bpf_change_mtu(struct nfp_app *app, struct net_device *netdev, int new_mtu) | 224 | nfp_bpf_check_mtu(struct nfp_app *app, struct net_device *netdev, int new_mtu) |
225 | { | 225 | { |
226 | struct nfp_net *nn = netdev_priv(netdev); | 226 | struct nfp_net *nn = netdev_priv(netdev); |
227 | unsigned int max_mtu; | 227 | unsigned int max_mtu; |
@@ -413,7 +413,7 @@ const struct nfp_app_type app_bpf = { | |||
413 | .init = nfp_bpf_init, | 413 | .init = nfp_bpf_init, |
414 | .clean = nfp_bpf_clean, | 414 | .clean = nfp_bpf_clean, |
415 | 415 | ||
416 | .change_mtu = nfp_bpf_change_mtu, | 416 | .check_mtu = nfp_bpf_check_mtu, |
417 | 417 | ||
418 | .extra_cap = nfp_bpf_extra_cap, | 418 | .extra_cap = nfp_bpf_extra_cap, |
419 | 419 | ||
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_app.h b/drivers/net/ethernet/netronome/nfp/nfp_app.h index 20546ae67909..2d9cb2528fc7 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_app.h +++ b/drivers/net/ethernet/netronome/nfp/nfp_app.h | |||
@@ -86,8 +86,8 @@ extern const struct nfp_app_type app_flower; | |||
86 | * @repr_clean: representor about to be unregistered | 86 | * @repr_clean: representor about to be unregistered |
87 | * @repr_open: representor netdev open callback | 87 | * @repr_open: representor netdev open callback |
88 | * @repr_stop: representor netdev stop callback | 88 | * @repr_stop: representor netdev stop callback |
89 | * @change_mtu: MTU change on a netdev has been requested (veto-only, change | 89 | * @check_mtu: MTU change request on a netdev (verify it is valid) |
90 | * is not guaranteed to be committed) | 90 | * @repr_change_mtu: MTU change request on repr (make and verify change) |
91 | * @start: start application logic | 91 | * @start: start application logic |
92 | * @stop: stop application logic | 92 | * @stop: stop application logic |
93 | * @ctrl_msg_rx: control message handler | 93 | * @ctrl_msg_rx: control message handler |
@@ -124,8 +124,10 @@ struct nfp_app_type { | |||
124 | int (*repr_open)(struct nfp_app *app, struct nfp_repr *repr); | 124 | int (*repr_open)(struct nfp_app *app, struct nfp_repr *repr); |
125 | int (*repr_stop)(struct nfp_app *app, struct nfp_repr *repr); | 125 | int (*repr_stop)(struct nfp_app *app, struct nfp_repr *repr); |
126 | 126 | ||
127 | int (*change_mtu)(struct nfp_app *app, struct net_device *netdev, | 127 | int (*check_mtu)(struct nfp_app *app, struct net_device *netdev, |
128 | int new_mtu); | 128 | int new_mtu); |
129 | int (*repr_change_mtu)(struct nfp_app *app, struct net_device *netdev, | ||
130 | int new_mtu); | ||
129 | 131 | ||
130 | int (*start)(struct nfp_app *app); | 132 | int (*start)(struct nfp_app *app); |
131 | void (*stop)(struct nfp_app *app); | 133 | void (*stop)(struct nfp_app *app); |
@@ -247,11 +249,20 @@ nfp_app_repr_clean(struct nfp_app *app, struct net_device *netdev) | |||
247 | } | 249 | } |
248 | 250 | ||
249 | static inline int | 251 | static inline int |
250 | nfp_app_change_mtu(struct nfp_app *app, struct net_device *netdev, int new_mtu) | 252 | nfp_app_check_mtu(struct nfp_app *app, struct net_device *netdev, int new_mtu) |
251 | { | 253 | { |
252 | if (!app || !app->type->change_mtu) | 254 | if (!app || !app->type->check_mtu) |
253 | return 0; | 255 | return 0; |
254 | return app->type->change_mtu(app, netdev, new_mtu); | 256 | return app->type->check_mtu(app, netdev, new_mtu); |
257 | } | ||
258 | |||
259 | static inline int | ||
260 | nfp_app_repr_change_mtu(struct nfp_app *app, struct net_device *netdev, | ||
261 | int new_mtu) | ||
262 | { | ||
263 | if (!app || !app->type->repr_change_mtu) | ||
264 | return 0; | ||
265 | return app->type->repr_change_mtu(app, netdev, new_mtu); | ||
255 | } | 266 | } |
256 | 267 | ||
257 | static inline int nfp_app_start(struct nfp_app *app, struct nfp_net *ctrl) | 268 | static inline int nfp_app_start(struct nfp_app *app, struct nfp_net *ctrl) |
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c index a05be0ab2713..43a9c207a049 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c | |||
@@ -3066,7 +3066,7 @@ static int nfp_net_change_mtu(struct net_device *netdev, int new_mtu) | |||
3066 | struct nfp_net_dp *dp; | 3066 | struct nfp_net_dp *dp; |
3067 | int err; | 3067 | int err; |
3068 | 3068 | ||
3069 | err = nfp_app_change_mtu(nn->app, netdev, new_mtu); | 3069 | err = nfp_app_check_mtu(nn->app, netdev, new_mtu); |
3070 | if (err) | 3070 | if (err) |
3071 | return err; | 3071 | return err; |
3072 | 3072 | ||
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c index 619570524d2a..0cd077addb26 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c | |||
@@ -196,8 +196,19 @@ nfp_repr_get_offload_stats(int attr_id, const struct net_device *dev, | |||
196 | static int nfp_repr_change_mtu(struct net_device *netdev, int new_mtu) | 196 | static int nfp_repr_change_mtu(struct net_device *netdev, int new_mtu) |
197 | { | 197 | { |
198 | struct nfp_repr *repr = netdev_priv(netdev); | 198 | struct nfp_repr *repr = netdev_priv(netdev); |
199 | int err; | ||
199 | 200 | ||
200 | return nfp_app_change_mtu(repr->app, netdev, new_mtu); | 201 | err = nfp_app_check_mtu(repr->app, netdev, new_mtu); |
202 | if (err) | ||
203 | return err; | ||
204 | |||
205 | err = nfp_app_repr_change_mtu(repr->app, netdev, new_mtu); | ||
206 | if (err) | ||
207 | return err; | ||
208 | |||
209 | netdev->mtu = new_mtu; | ||
210 | |||
211 | return 0; | ||
201 | } | 212 | } |
202 | 213 | ||
203 | static netdev_tx_t nfp_repr_xmit(struct sk_buff *skb, struct net_device *netdev) | 214 | static netdev_tx_t nfp_repr_xmit(struct sk_buff *skb, struct net_device *netdev) |