nfp: reorganize the app table
authorJakub Kicinski <jakub.kicinski@netronome.com>
Thu, 2 Nov 2017 08:31:32 +0000 (01:31 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 2 Nov 2017 11:27:11 +0000 (20:27 +0900)
The app table is an unordered array right now.  We have to search
apps by ID.  It also makes it harder to fall back to core NIC if
advanced functions are not compiled into the kernel (e.g. eBPF).
Make the table keyed by app id.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Simon Horman <simon.horman@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/netronome/nfp/nfp_app.c

index 5d9e2eba5b49e60a7e97306c7b736d5ca2b872c6..085c5151c6010752528f038e4f742f6e617b459b 100644 (file)
 #include "nfp_net_repr.h"
 
 static const struct nfp_app_type *apps[] = {
-       &app_nic,
-       &app_bpf,
+       [NFP_APP_CORE_NIC]      = &app_nic,
+       [NFP_APP_BPF_NIC]       = &app_bpf,
 #ifdef CONFIG_NFP_APP_FLOWER
-       &app_flower,
+       [NFP_APP_FLOWER_NIC]    = &app_flower,
 #endif
 };
 
@@ -116,17 +116,13 @@ exit_unlock:
 struct nfp_app *nfp_app_alloc(struct nfp_pf *pf, enum nfp_app_id id)
 {
        struct nfp_app *app;
-       unsigned int i;
 
-       for (i = 0; i < ARRAY_SIZE(apps); i++)
-               if (apps[i]->id == id)
-                       break;
-       if (i == ARRAY_SIZE(apps)) {
+       if (id >= ARRAY_SIZE(apps) || !apps[id]) {
                nfp_err(pf->cpp, "failed to find app with ID 0x%02hhx\n", id);
                return ERR_PTR(-EINVAL);
        }
 
-       if (WARN_ON(!apps[i]->name || !apps[i]->vnic_alloc))
+       if (WARN_ON(!apps[id]->name || !apps[id]->vnic_alloc))
                return ERR_PTR(-EINVAL);
 
        app = kzalloc(sizeof(*app), GFP_KERNEL);
@@ -136,7 +132,7 @@ struct nfp_app *nfp_app_alloc(struct nfp_pf *pf, enum nfp_app_id id)
        app->pf = pf;
        app->cpp = pf->cpp;
        app->pdev = pf->pdev;
-       app->type = apps[i];
+       app->type = apps[id];
 
        return app;
 }