|
@@ -1158,11 +1158,22 @@ netvsc_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_NET_POLL_CONTROLLER
|
|
|
-static void netvsc_poll_controller(struct net_device *net)
|
|
|
+static void netvsc_poll_controller(struct net_device *dev)
|
|
|
{
|
|
|
- /* As netvsc_start_xmit() works synchronous we don't have to
|
|
|
- * trigger anything here.
|
|
|
- */
|
|
|
+ struct net_device_context *ndc = netdev_priv(dev);
|
|
|
+ struct netvsc_device *ndev;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ rcu_read_lock();
|
|
|
+ ndev = rcu_dereference(ndc->nvdev);
|
|
|
+ if (ndev) {
|
|
|
+ for (i = 0; i < ndev->num_chn; i++) {
|
|
|
+ struct netvsc_channel *nvchan = &ndev->chan_table[i];
|
|
|
+
|
|
|
+ napi_schedule(&nvchan->napi);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ rcu_read_unlock();
|
|
|
}
|
|
|
#endif
|
|
|
|