chelsio: cxgb: Replace the workqueue with threaded interrupt
[linux-2.6-microblaze.git] / drivers / net / ethernet / chelsio / cxgb / cxgb2.c
index 0e4a0f4..bd6f3c5 100644 (file)
@@ -211,9 +211,10 @@ static int cxgb_up(struct adapter *adapter)
        t1_interrupts_clear(adapter);
 
        adapter->params.has_msi = !disable_msi && !pci_enable_msi(adapter->pdev);
-       err = request_irq(adapter->pdev->irq, t1_interrupt,
-                         adapter->params.has_msi ? 0 : IRQF_SHARED,
-                         adapter->name, adapter);
+       err = request_threaded_irq(adapter->pdev->irq, t1_interrupt,
+                                  t1_interrupt_thread,
+                                  adapter->params.has_msi ? 0 : IRQF_SHARED,
+                                  adapter->name, adapter);
        if (err) {
                if (adapter->params.has_msi)
                        pci_disable_msi(adapter->pdev);
@@ -916,41 +917,6 @@ static void mac_stats_task(struct work_struct *work)
        spin_unlock(&adapter->work_lock);
 }
 
-/*
- * Processes elmer0 external interrupts in process context.
- */
-static void ext_intr_task(struct work_struct *work)
-{
-       struct adapter *adapter =
-               container_of(work, struct adapter, ext_intr_handler_task);
-
-       t1_elmer0_ext_intr_handler(adapter);
-
-       /* Now reenable external interrupts */
-       spin_lock_irq(&adapter->async_lock);
-       adapter->slow_intr_mask |= F_PL_INTR_EXT;
-       writel(F_PL_INTR_EXT, adapter->regs + A_PL_CAUSE);
-       writel(adapter->slow_intr_mask | F_PL_INTR_SGE_DATA,
-                  adapter->regs + A_PL_ENABLE);
-       spin_unlock_irq(&adapter->async_lock);
-}
-
-/*
- * Interrupt-context handler for elmer0 external interrupts.
- */
-void t1_elmer0_ext_intr(struct adapter *adapter)
-{
-       /*
-        * Schedule a task to handle external interrupts as we require
-        * a process context.  We disable EXT interrupts in the interim
-        * and let the task reenable them when it's done.
-        */
-       adapter->slow_intr_mask &= ~F_PL_INTR_EXT;
-       writel(adapter->slow_intr_mask | F_PL_INTR_SGE_DATA,
-                  adapter->regs + A_PL_ENABLE);
-       schedule_work(&adapter->ext_intr_handler_task);
-}
-
 void t1_fatal_err(struct adapter *adapter)
 {
        if (adapter->flags & FULL_INIT_DONE) {
@@ -1062,8 +1028,6 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
                        spin_lock_init(&adapter->async_lock);
                        spin_lock_init(&adapter->mac_lock);
 
-                       INIT_WORK(&adapter->ext_intr_handler_task,
-                                 ext_intr_task);
                        INIT_DELAYED_WORK(&adapter->stats_update_task,
                                          mac_stats_task);