Commit 4247e161 authored by Herbert Xu's avatar Herbert Xu Committed by David S. Miller

netpoll: Add ndo_netpoll_setup

This patch adds ndo_netpoll_setup as the initialisation primitive
to complement ndo_netpoll_cleanup.
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent dbaa1541
...@@ -744,6 +744,8 @@ struct net_device_ops { ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment