Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 78a0a65f authored by Jakub Kicinski's avatar Jakub Kicinski Committed by David S. Miller
Browse files

nfp: allow apps to disable ctrl vNIC capabilities



Most vNIC capabilities are netdev related.  It makes no sense
to initialize them and waste FW resources.  Some are even
counter-productive, like IRQ moderation, which will slow
down exchange of control messages.

Add to nfp_app a mask of enabled control vNIC capabilities
for apps to use.  Make flower and BPF enable all capabilities
for now.  No functional changes.

Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: default avatarDirk van der Merwe <dirk.vandermerwe@netronome.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 545bfa7a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -389,6 +389,8 @@ const struct nfp_app_type app_bpf = {
	.id		= NFP_APP_BPF_NIC,
	.name		= "ebpf",

	.ctrl_cap_mask	= ~0U,

	.init		= nfp_bpf_init,
	.clean		= nfp_bpf_clean,

+2 −0
Original line number Diff line number Diff line
@@ -565,6 +565,8 @@ static void nfp_flower_stop(struct nfp_app *app)
const struct nfp_app_type app_flower = {
	.id		= NFP_APP_FLOWER_NIC,
	.name		= "flower",

	.ctrl_cap_mask	= ~0U,
	.ctrl_has_meta	= true,

	.extra_cap	= nfp_flower_extra_cap,
+4 −0
Original line number Diff line number Diff line
@@ -66,6 +66,9 @@ extern const struct nfp_app_type app_flower;
 * struct nfp_app_type - application definition
 * @id:		application ID
 * @name:	application name
 * @ctrl_cap_mask:  ctrl vNIC capability mask, allows disabling features like
 *		    IRQMOD which are on by default but counter-productive for
 *		    control messages which are often latency-sensitive
 * @ctrl_has_meta:  control messages have prepend of type:5/port:CTRL
 *
 * Callbacks
@@ -100,6 +103,7 @@ struct nfp_app_type {
	enum nfp_app_id id;
	const char *name;

	u32 ctrl_cap_mask;
	bool ctrl_has_meta;

	int (*init)(struct nfp_app *app);
+4 −0
Original line number Diff line number Diff line
@@ -3790,6 +3790,10 @@ static int nfp_net_read_caps(struct nfp_net *nn)
		nn->dp.rx_offset = NFP_NET_RX_OFFSET;
	}

	/* For control vNICs mask out the capabilities app doesn't want. */
	if (!nn->dp.netdev)
		nn->cap &= nn->app->type->ctrl_cap_mask;

	return 0;
}