ixgb: remove irq_sem
authorJesse Brandeburg <jesse.brandeburg@intel.com>
Fri, 21 Mar 2008 18:07:03 +0000 (11:07 -0700)
committerJeff Garzik <jeff@garzik.org>
Wed, 26 Mar 2008 04:17:53 +0000 (00:17 -0400)
ixgb can remove irq_sem by auditing all the call sites to make sure
that each of them makes sure the adapter is in the correct state
before re-enabling interrupts.  after doing this to all of our other
drivers it is becoming easier.

Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Auke Kok <auke-jan.h.kok@intel.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/net/ixgb/ixgb.h
drivers/net/ixgb/ixgb_main.c

index a95ab55295cd78fdd2d0c5538f2943cef7358942..f2fff90d2c9dca500f66551dcb1294bfe2226db4 100644 (file)
@@ -158,7 +158,6 @@ struct ixgb_adapter {
        uint16_t link_speed;
        uint16_t link_duplex;
        spinlock_t tx_lock;
-       atomic_t irq_sem;
        struct work_struct tx_timeout_task;
 
        struct timer_list blink_timer;
index d9688bbb9292f6d2a4872bb8052b7d1d09805bde..9c9bf31e5c25dc9500ddfe77e6477216505c9231 100644 (file)
@@ -197,7 +197,6 @@ module_exit(ixgb_exit_module);
 static void
 ixgb_irq_disable(struct ixgb_adapter *adapter)
 {
-       atomic_inc(&adapter->irq_sem);
        IXGB_WRITE_REG(&adapter->hw, IMC, ~0);
        IXGB_WRITE_FLUSH(&adapter->hw);
        synchronize_irq(adapter->pdev->irq);
@@ -211,14 +210,12 @@ ixgb_irq_disable(struct ixgb_adapter *adapter)
 static void
 ixgb_irq_enable(struct ixgb_adapter *adapter)
 {
-       if(atomic_dec_and_test(&adapter->irq_sem)) {
-               u32 val = IXGB_INT_RXT0 | IXGB_INT_RXDMT0 |
-                         IXGB_INT_TXDW | IXGB_INT_LSC;
-               if (adapter->hw.subsystem_vendor_id == SUN_SUBVENDOR_ID)
-                       val |= IXGB_INT_GPI0;
-               IXGB_WRITE_REG(&adapter->hw, IMS, val);
-               IXGB_WRITE_FLUSH(&adapter->hw);
-       }
+       u32 val = IXGB_INT_RXT0 | IXGB_INT_RXDMT0 |
+                 IXGB_INT_TXDW | IXGB_INT_LSC;
+       if (adapter->hw.subsystem_vendor_id == SUN_SUBVENDOR_ID)
+               val |= IXGB_INT_GPI0;
+       IXGB_WRITE_REG(&adapter->hw, IMS, val);
+       IXGB_WRITE_FLUSH(&adapter->hw);
 }
 
 int
@@ -305,7 +302,6 @@ ixgb_down(struct ixgb_adapter *adapter, bool kill_watchdog)
 
 #ifdef CONFIG_IXGB_NAPI
        napi_disable(&adapter->napi);
-       atomic_set(&adapter->irq_sem, 0);
 #endif
        /* waiting for NAPI to complete can re-enable interrupts */
        ixgb_irq_disable(adapter);
@@ -594,7 +590,6 @@ ixgb_sw_init(struct ixgb_adapter *adapter)
        /* enable flow control to be programmed */
        hw->fc.send_xon = 1;
 
-       atomic_set(&adapter->irq_sem, 1);
        spin_lock_init(&adapter->tx_lock);
 
        set_bit(__IXGB_DOWN, &adapter->flags);
@@ -1774,7 +1769,6 @@ ixgb_intr(int irq, void *data)
                  of the posted write is intentionally left out.
                */
 
-               atomic_inc(&adapter->irq_sem);
                IXGB_WRITE_REG(&adapter->hw, IMC, ~0);
                __netif_rx_schedule(netdev, &adapter->napi);
        }