netpoll: Add ndo_netpoll_setup
This patch adds ndo_netpoll_setup as the initialisation primitive to complement ndo_netpoll_cleanup. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
dbaa154178
commit
4247e161b1
|
@ -744,6 +744,8 @@ struct net_device_ops {
|
||||||
unsigned short vid);
|
unsigned short vid);
|
||||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||||
void (*ndo_poll_controller)(struct net_device *dev);
|
void (*ndo_poll_controller)(struct net_device *dev);
|
||||||
|
int (*ndo_netpoll_setup)(struct net_device *dev,
|
||||||
|
struct netpoll_info *info);
|
||||||
void (*ndo_netpoll_cleanup)(struct net_device *dev);
|
void (*ndo_netpoll_cleanup)(struct net_device *dev);
|
||||||
#endif
|
#endif
|
||||||
int (*ndo_set_vf_mac)(struct net_device *dev,
|
int (*ndo_set_vf_mac)(struct net_device *dev,
|
||||||
|
|
|
@ -698,6 +698,7 @@ int netpoll_setup(struct netpoll *np)
|
||||||
struct net_device *ndev = NULL;
|
struct net_device *ndev = NULL;
|
||||||
struct in_device *in_dev;
|
struct in_device *in_dev;
|
||||||
struct netpoll_info *npinfo;
|
struct netpoll_info *npinfo;
|
||||||
|
const struct net_device_ops *ops;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -797,6 +798,13 @@ int netpoll_setup(struct netpoll *np)
|
||||||
INIT_DELAYED_WORK(&npinfo->tx_work, queue_process);
|
INIT_DELAYED_WORK(&npinfo->tx_work, queue_process);
|
||||||
|
|
||||||
atomic_set(&npinfo->refcnt, 1);
|
atomic_set(&npinfo->refcnt, 1);
|
||||||
|
|
||||||
|
ops = np->dev->netdev_ops;
|
||||||
|
if (ops->ndo_netpoll_setup) {
|
||||||
|
err = ops->ndo_netpoll_setup(ndev, npinfo);
|
||||||
|
if (err)
|
||||||
|
goto free_npinfo;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
npinfo = ndev->npinfo;
|
npinfo = ndev->npinfo;
|
||||||
atomic_inc(&npinfo->refcnt);
|
atomic_inc(&npinfo->refcnt);
|
||||||
|
@ -817,6 +825,8 @@ int netpoll_setup(struct netpoll *np)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
free_npinfo:
|
||||||
|
kfree(npinfo);
|
||||||
unlock:
|
unlock:
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
put:
|
put:
|
||||||
|
|
Loading…
Reference in New Issue