Commit 9bbdd41b authored by Jakub Kicinski's avatar Jakub Kicinski Committed by Daniel Borkmann

nfp: allow apps to request larger MTU on control vNIC

Some apps may want to have higher MTU on the control vNIC/queue.
Allow them to set the requested MTU at init time.
Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent 28264eb2
...@@ -40,6 +40,8 @@ ...@@ -40,6 +40,8 @@
#include "nfp_net_repr.h" #include "nfp_net_repr.h"
#define NFP_APP_CTRL_MTU_MAX U32_MAX
struct bpf_prog; struct bpf_prog;
struct net_device; struct net_device;
struct netdev_bpf; struct netdev_bpf;
...@@ -178,6 +180,7 @@ struct nfp_app_type { ...@@ -178,6 +180,7 @@ struct nfp_app_type {
* @ctrl: pointer to ctrl vNIC struct * @ctrl: pointer to ctrl vNIC struct
* @reprs: array of pointers to representors * @reprs: array of pointers to representors
* @type: pointer to const application ops and info * @type: pointer to const application ops and info
* @ctrl_mtu: MTU to set on the control vNIC (set in .init())
* @priv: app-specific priv data * @priv: app-specific priv data
*/ */
struct nfp_app { struct nfp_app {
...@@ -189,6 +192,7 @@ struct nfp_app { ...@@ -189,6 +192,7 @@ struct nfp_app {
struct nfp_reprs __rcu *reprs[NFP_REPR_TYPE_MAX + 1]; struct nfp_reprs __rcu *reprs[NFP_REPR_TYPE_MAX + 1];
const struct nfp_app_type *type; const struct nfp_app_type *type;
unsigned int ctrl_mtu;
void *priv; void *priv;
}; };
......
...@@ -3877,10 +3877,20 @@ int nfp_net_init(struct nfp_net *nn) ...@@ -3877,10 +3877,20 @@ int nfp_net_init(struct nfp_net *nn)
return err; return err;
/* Set default MTU and Freelist buffer size */ /* Set default MTU and Freelist buffer size */
if (nn->max_mtu < NFP_NET_DEFAULT_MTU) if (!nfp_net_is_data_vnic(nn) && nn->app->ctrl_mtu) {
if (nn->app->ctrl_mtu <= nn->max_mtu) {
nn->dp.mtu = nn->app->ctrl_mtu;
} else {
if (nn->app->ctrl_mtu != NFP_APP_CTRL_MTU_MAX)
nn_warn(nn, "app requested MTU above max supported %u > %u\n",
nn->app->ctrl_mtu, nn->max_mtu);
nn->dp.mtu = nn->max_mtu;
}
} else if (nn->max_mtu < NFP_NET_DEFAULT_MTU) {
nn->dp.mtu = nn->max_mtu; nn->dp.mtu = nn->max_mtu;
else } else {
nn->dp.mtu = NFP_NET_DEFAULT_MTU; nn->dp.mtu = NFP_NET_DEFAULT_MTU;
}
nn->dp.fl_bufsz = nfp_net_calc_fl_bufsz(&nn->dp); nn->dp.fl_bufsz = nfp_net_calc_fl_bufsz(&nn->dp);
if (nfp_app_ctrl_uses_data_vnics(nn->app)) if (nfp_app_ctrl_uses_data_vnics(nn->app))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment