X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=net%2Fcore%2Fnetpoll.c;h=7de6dcad5d79dba90997c7b4ca8c601a7329418f;hb=4247e161b12f8dffb7ee3ee07bc5e61f714ebe2d;hp=d10c249bcc8f80b77b7f193bfa7eaf78c4f4b930;hpb=dbaa154178341689faaa08fbf40b94ae5ca1d6c0;p=deliverable%2Flinux.git diff --git a/net/core/netpoll.c b/net/core/netpoll.c index d10c249bcc8f..7de6dcad5d79 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -698,6 +698,7 @@ int netpoll_setup(struct netpoll *np) struct net_device *ndev = NULL; struct in_device *in_dev; struct netpoll_info *npinfo; + const struct net_device_ops *ops; unsigned long flags; int err; @@ -797,6 +798,13 @@ int netpoll_setup(struct netpoll *np) INIT_DELAYED_WORK(&npinfo->tx_work, queue_process); 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 { npinfo = ndev->npinfo; atomic_inc(&npinfo->refcnt); @@ -817,6 +825,8 @@ int netpoll_setup(struct netpoll *np) return 0; +free_npinfo: + kfree(npinfo); unlock: rtnl_unlock(); put: