nfp: bpf: add map data structure

To be able to split code into reasonable chunks we need to add
the map data structures already.  Later patches will add code
piece by piece.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:
Jakub Kicinski 2018-01-11 20:29:10 -08:00 committed by Daniel Borkmann
parent a38845729e
commit 4da98eea79
2 changed files with 24 additions and 1 deletions

View File

@ -313,6 +313,8 @@ static int nfp_bpf_init(struct nfp_app *app)
bpf->app = app;
app->priv = bpf;
INIT_LIST_HEAD(&bpf->map_list);
err = nfp_bpf_parse_capabilities(app);
if (err)
goto err_free_bpf;
@ -326,7 +328,10 @@ err_free_bpf:
static void nfp_bpf_clean(struct nfp_app *app)
{
kfree(app->priv);
struct nfp_app_bpf *bpf = app->priv;
WARN_ON(!list_empty(&bpf->map_list));
kfree(bpf);
}
const struct nfp_app_type app_bpf = {

View File

@ -93,6 +93,8 @@ enum pkt_vec {
* struct nfp_app_bpf - bpf app priv structure
* @app: backpointer to the app
*
* @map_list: list of offloaded maps
*
* @adjust_head: adjust head capability
* @flags: extra flags for adjust head
* @off_min: minimal packet offset within buffer required
@ -103,6 +105,8 @@ enum pkt_vec {
struct nfp_app_bpf {
struct nfp_app *app;
struct list_head map_list;
struct nfp_bpf_cap_adjust_head {
u32 flags;
int off_min;
@ -112,6 +116,20 @@ struct nfp_app_bpf {
} adjust_head;
};
/**
* struct nfp_bpf_map - private per-map data attached to BPF maps for offload
* @offmap: pointer to the offloaded BPF map
* @bpf: back pointer to bpf app private structure
* @tid: table id identifying map on datapath
* @l: link on the nfp_app_bpf->map_list list
*/
struct nfp_bpf_map {
struct bpf_offloaded_map *offmap;
struct nfp_app_bpf *bpf;
u32 tid;
struct list_head l;
};
struct nfp_prog;
struct nfp_insn_meta;
typedef int (*instr_cb_t)(struct nfp_prog *, struct nfp_insn_meta *);