ixgbe: only register DCA requester once
authorAlexander Duyck <alexander.h.duyck@intel.com>
Thu, 21 May 2009 13:07:12 +0000 (13:07 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 22 May 2009 00:19:10 +0000 (17:19 -0700)
The current driver tries to re-register the DCA requester after reset and
this is not correct.  This change makes it so all we are doing is resetting
the DCA registers after reset and not re-adding the requester.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ixgbe/ixgbe_main.c

index 3d5f7f575ae37aad47077a8a0799674e52b307d7..e52798c4816b0837bd1729c59a88d418865c9466 100644 (file)
@@ -411,6 +411,9 @@ static void ixgbe_setup_dca(struct ixgbe_adapter *adapter)
        if (!(adapter->flags & IXGBE_FLAG_DCA_ENABLED))
                return;
 
+       /* always use CB2 mode, difference is masked in the CB driver */
+       IXGBE_WRITE_REG(&adapter->hw, IXGBE_DCA_CTRL, 2);
+
        for (i = 0; i < adapter->num_tx_queues; i++) {
                adapter->tx_ring[i].cpu = -1;
                ixgbe_update_tx_dca(adapter, &adapter->tx_ring[i]);
@@ -432,9 +435,6 @@ static int __ixgbe_notify_dca(struct device *dev, void *data)
                /* if we're already enabled, don't do it again */
                if (adapter->flags & IXGBE_FLAG_DCA_ENABLED)
                        break;
-               /* Always use CB2 mode, difference is masked
-                * in the CB driver. */
-               IXGBE_WRITE_REG(&adapter->hw, IXGBE_DCA_CTRL, 2);
                if (dca_add_requester(dev) == 0) {
                        adapter->flags |= IXGBE_FLAG_DCA_ENABLED;
                        ixgbe_setup_dca(adapter);
@@ -2767,13 +2767,6 @@ void ixgbe_down(struct ixgbe_adapter *adapter)
 
        netif_carrier_off(netdev);
 
-#ifdef CONFIG_IXGBE_DCA
-       if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) {
-               adapter->flags &= ~IXGBE_FLAG_DCA_ENABLED;
-               dca_remove_requester(&adapter->pdev->dev);
-       }
-
-#endif
        if (!pci_channel_offline(adapter->pdev))
                ixgbe_reset(adapter);
        ixgbe_clean_all_tx_rings(adapter);
@@ -2781,13 +2774,7 @@ void ixgbe_down(struct ixgbe_adapter *adapter)
 
 #ifdef CONFIG_IXGBE_DCA
        /* since we reset the hardware DCA settings were cleared */
-       if (dca_add_requester(&adapter->pdev->dev) == 0) {
-               adapter->flags |= IXGBE_FLAG_DCA_ENABLED;
-               /* always use CB2 mode, difference is masked
-                * in the CB driver */
-               IXGBE_WRITE_REG(hw, IXGBE_DCA_CTRL, 2);
-               ixgbe_setup_dca(adapter);
-       }
+       ixgbe_setup_dca(adapter);
 #endif
 }
 
@@ -5354,9 +5341,6 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
 #ifdef CONFIG_IXGBE_DCA
        if (dca_add_requester(&pdev->dev) == 0) {
                adapter->flags |= IXGBE_FLAG_DCA_ENABLED;
-               /* always use CB2 mode, difference is masked
-                * in the CB driver */
-               IXGBE_WRITE_REG(hw, IXGBE_DCA_CTRL, 2);
                ixgbe_setup_dca(adapter);
        }
 #endif