nfp: bpf: add map data structure
authorJakub Kicinski <jakub.kicinski@netronome.com>
Fri, 12 Jan 2018 04:29:10 +0000 (20:29 -0800)
committerDaniel Borkmann <daniel@iogearbox.net>
Sun, 14 Jan 2018 22:36:30 +0000 (23:36 +0100)
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>
drivers/net/ethernet/netronome/nfp/bpf/main.c
drivers/net/ethernet/netronome/nfp/bpf/main.h

index e8cfe300c8c4fbb878b592bfd81a4f06f418936a..c9fd7d417d1aaff9b6124e0cc261ed673d5dfcf5 100644 (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 = {
index 66381afee2a933daaf457b8d49a7fe0319e47130..23763b22f8fcf79998e9f926f8199b01551f1c80 100644 (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 *);