mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-25 23:26:03 +08:00
nfp: add .ndo_init() and .ndo_uninit() callbacks
BPF code should unregister the offload capabilities from .ndo_uninit(), to make sure the operation is atomic with unlist_netdevice(). Plumb the init/uninit NDOs for vNICs and representors. 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:
parent
d6d6071388
commit
4612bebfa3
@ -86,6 +86,23 @@ const char *nfp_app_mip_name(struct nfp_app *app)
|
||||
return nfp_mip_name(app->pf->mip);
|
||||
}
|
||||
|
||||
int nfp_app_ndo_init(struct net_device *netdev)
|
||||
{
|
||||
struct nfp_app *app = nfp_app_from_netdev(netdev);
|
||||
|
||||
if (!app || !app->type->ndo_init)
|
||||
return 0;
|
||||
return app->type->ndo_init(app, netdev);
|
||||
}
|
||||
|
||||
void nfp_app_ndo_uninit(struct net_device *netdev)
|
||||
{
|
||||
struct nfp_app *app = nfp_app_from_netdev(netdev);
|
||||
|
||||
if (app && app->type->ndo_uninit)
|
||||
app->type->ndo_uninit(app, netdev);
|
||||
}
|
||||
|
||||
u64 *nfp_app_port_get_stats(struct nfp_port *port, u64 *data)
|
||||
{
|
||||
if (!port || !port->app || !port->app->type->port_get_stats)
|
||||
|
@ -78,6 +78,8 @@ extern const struct nfp_app_type app_abm;
|
||||
* @init: perform basic app checks and init
|
||||
* @clean: clean app state
|
||||
* @extra_cap: extra capabilities string
|
||||
* @ndo_init: vNIC and repr netdev .ndo_init
|
||||
* @ndo_uninit: vNIC and repr netdev .ndo_unint
|
||||
* @vnic_alloc: allocate vNICs (assign port types, etc.)
|
||||
* @vnic_free: free up app's vNIC state
|
||||
* @vnic_init: vNIC netdev was registered
|
||||
@ -117,6 +119,9 @@ struct nfp_app_type {
|
||||
|
||||
const char *(*extra_cap)(struct nfp_app *app, struct nfp_net *nn);
|
||||
|
||||
int (*ndo_init)(struct nfp_app *app, struct net_device *netdev);
|
||||
void (*ndo_uninit)(struct nfp_app *app, struct net_device *netdev);
|
||||
|
||||
int (*vnic_alloc)(struct nfp_app *app, struct nfp_net *nn,
|
||||
unsigned int id);
|
||||
void (*vnic_free)(struct nfp_app *app, struct nfp_net *nn);
|
||||
@ -200,6 +205,9 @@ static inline void nfp_app_clean(struct nfp_app *app)
|
||||
app->type->clean(app);
|
||||
}
|
||||
|
||||
int nfp_app_ndo_init(struct net_device *netdev);
|
||||
void nfp_app_ndo_uninit(struct net_device *netdev);
|
||||
|
||||
static inline int nfp_app_vnic_alloc(struct nfp_app *app, struct nfp_net *nn,
|
||||
unsigned int id)
|
||||
{
|
||||
|
@ -3480,6 +3480,8 @@ static int nfp_net_set_mac_address(struct net_device *netdev, void *addr)
|
||||
}
|
||||
|
||||
const struct net_device_ops nfp_net_netdev_ops = {
|
||||
.ndo_init = nfp_app_ndo_init,
|
||||
.ndo_uninit = nfp_app_ndo_uninit,
|
||||
.ndo_open = nfp_net_netdev_open,
|
||||
.ndo_stop = nfp_net_netdev_close,
|
||||
.ndo_start_xmit = nfp_net_tx,
|
||||
|
@ -262,6 +262,8 @@ err_port_disable:
|
||||
}
|
||||
|
||||
const struct net_device_ops nfp_repr_netdev_ops = {
|
||||
.ndo_init = nfp_app_ndo_init,
|
||||
.ndo_uninit = nfp_app_ndo_uninit,
|
||||
.ndo_open = nfp_repr_open,
|
||||
.ndo_stop = nfp_repr_stop,
|
||||
.ndo_start_xmit = nfp_repr_xmit,
|
||||
|
Loading…
Reference in New Issue
Block a user