nfp: reorganize the app table

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>
This commit is contained in:
Jakub Kicinski 2017-11-02 01:31:32 -07:00 committed by David S. Miller
parent f449657f83
commit 2c4197a041
1 changed files with 6 additions and 10 deletions

View File

@ -43,10 +43,10 @@
#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;
}