]> Pileus Git - ~andy/linux/blobdiff - drivers/net/vmxnet3/vmxnet3_drv.c
vmxnet3: fix netpoll race condition
[~andy/linux] / drivers / net / vmxnet3 / vmxnet3_drv.c
index 3be786faaaec222f0226b8285dde01e88b147e59..b7daa02ff0263ac3ec46106732954726c45d6952 100644 (file)
@@ -1761,12 +1761,18 @@ static void
 vmxnet3_netpoll(struct net_device *netdev)
 {
        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
+       int i;
 
-       if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE)
-               vmxnet3_disable_all_intrs(adapter);
-
-       vmxnet3_do_poll(adapter, adapter->rx_queue[0].rx_ring[0].size);
-       vmxnet3_enable_all_intrs(adapter);
+       switch (adapter->intr.type) {
+       case VMXNET3_IT_MSIX:
+               for (i = 0; i < adapter->num_rx_queues; i++)
+                       vmxnet3_msix_rx(0, &adapter->rx_queue[i]);
+               break;
+       case VMXNET3_IT_MSI:
+       default:
+               vmxnet3_intr(0, adapter->netdev);
+               break;
+       }
 
 }
 #endif /* CONFIG_NET_POLL_CONTROLLER */