[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20160601215624.GB24671@ast-mbp.thefacebook.com>
Date: Wed, 1 Jun 2016 14:56:26 -0700
From: Alexei Starovoitov <alexei.starovoitov@...il.com>
To: Jakub Kicinski <jakub.kicinski@...ronome.com>
Cc: netdev@...r.kernel.org, ast@...nel.org, daniel@...earbox.net,
dinan.gunawardena@...ronome.com
Subject: Re: [RFC 07/12] nfp: add skb mark support to the bpf offload
On Wed, Jun 01, 2016 at 05:50:09PM +0100, Jakub Kicinski wrote:
> Skb marking should be set in designated register, FW will
> prepend it to the packet for us.
>
> Signed-off-by: Jakub Kicinski <jakub.kicinski@...ronome.com>
> Reviewed-by: Dinan Gunawardena <dgunawardena@...ronome.com>
> Reviewed-by: Simon Horman <simon.horman@...ronome.com>
> ---
> drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c | 20 ++++++++++++++++++++
> drivers/net/ethernet/netronome/nfp/nfp_net.h | 2 +-
> drivers/net/ethernet/netronome/nfp/nfp_net_common.c | 8 +++++++-
> 3 files changed, 28 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c b/drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c
> index d7eecfceba5c..b31e673a6fe8 100644
> --- a/drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c
> +++ b/drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c
> @@ -46,6 +46,8 @@
>
> #define REG_IMM0_N 30 /* Bank AB */
> #define REG_QNUM 29 /* Bank AB */
> +#define REG_MARK 28 /* Bank A */
> +#define REG_MARK_STS 28 /* Bank B */
>
> /* --- NFP prog --- */
> /* Foreach "multiple" entries macros provide pos and next<n> pointers.
> @@ -416,6 +418,15 @@ static int construct_data_ld(struct nfp_prog *nfp_prog, u16 offset, u8 size)
> return construct_data_ind_ld(nfp_prog, offset, 0, false, size);
> }
>
> +static int wrp_skb_mark(struct nfp_prog *nfp_prog, u16 src)
> +{
> + __emit_alu(nfp_prog, REG_MARK, ALU_DST_A, REG_NONE, ALU_OP_NONE, src,
> + false, false);
> + __emit_immed(nfp_prog, REG_MARK_STS, ALU_DST_B, 1, false);
> +
> + return 0;
> +}
> +
> static int
> construct_br_imm(struct nfp_prog *nfp_prog, u32 imm, u16 dst, u8 br, u16 off,
> enum alu_op alu_op, bool sw)
> @@ -538,6 +549,14 @@ static int imm_ld8(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
> return 0;
> }
>
> +static int mem_stx4(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
> +{
> + if (meta->insn.off == offsetof(struct sk_buff, mark))
> + return wrp_skb_mark(nfp_prog, meta->insn.src_reg * 2);
couldn't figure out from the diff or commit log...
what is the meaning of 'skb->mark' for nfp?
Looks like it's writing into magic register and fw will do something
with that register?
'mark' is packet metadata. Could you explain how it's passing
this metadata? Is it on the wire as well or somehow in the wire
only between two nfps?
Looks like interesting feature.
Powered by blists - more mailing lists