~ubuntu-branches/debian/wheezy/linux-2.6/wheezy

« back to all changes in this revision

Viewing changes to drivers/infiniband/hw/ehca/ehca_eq.c

  • Committer: Bazaar Package Importer
  • Author(s): Ben Hutchings, Ben Hutchings, Aurelien Jarno, Martin Michlmayr
  • Date: 2011-04-06 13:53:30 UTC
  • mfrom: (43.1.5 sid)
  • Revision ID: james.westby@ubuntu.com-20110406135330-wjufxhd0tvn3zx4z
Tags: 2.6.38-3
[ Ben Hutchings ]
* [ppc64] Add to linux-tools package architectures (Closes: #620124)
* [amd64] Save cr4 to mmu_cr4_features at boot time (Closes: #620284)
* appletalk: Fix bugs introduced when removing use of BKL
* ALSA: Fix yet another race in disconnection
* cciss: Fix lost command issue
* ath9k: Fix kernel panic in AR2427
* ses: Avoid kernel panic when lun 0 is not mapped
* PCI/ACPI: Report ASPM support to BIOS if not disabled from command line

[ Aurelien Jarno ]
* rtlwifi: fix build when PCI is not enabled.

[ Martin Michlmayr ]
* rtlwifi: Eliminate udelay calls with too large values (Closes: #620204)

Show diffs side-by-side

added added

removed removed

Lines of Context:
122
122
 
123
123
        /* register interrupt handlers and initialize work queues */
124
124
        if (type == EHCA_EQ) {
 
125
                tasklet_init(&eq->interrupt_task, ehca_tasklet_eq, (long)shca);
 
126
 
125
127
                ret = ibmebus_request_irq(eq->ist, ehca_interrupt_eq,
126
128
                                          IRQF_DISABLED, "ehca_eq",
127
129
                                          (void *)shca);
128
130
                if (ret < 0)
129
131
                        ehca_err(ib_dev, "Can't map interrupt handler.");
130
 
 
131
 
                tasklet_init(&eq->interrupt_task, ehca_tasklet_eq, (long)shca);
132
132
        } else if (type == EHCA_NEQ) {
 
133
                tasklet_init(&eq->interrupt_task, ehca_tasklet_neq, (long)shca);
 
134
 
133
135
                ret = ibmebus_request_irq(eq->ist, ehca_interrupt_neq,
134
136
                                          IRQF_DISABLED, "ehca_neq",
135
137
                                          (void *)shca);
136
138
                if (ret < 0)
137
139
                        ehca_err(ib_dev, "Can't map interrupt handler.");
138
 
 
139
 
                tasklet_init(&eq->interrupt_task, ehca_tasklet_neq, (long)shca);
140
140
        }
141
141
 
142
142
        eq->is_initialized = 1;
169
169
        unsigned long flags;
170
170
        u64 h_ret;
171
171
 
172
 
        spin_lock_irqsave(&eq->spinlock, flags);
173
172
        ibmebus_free_irq(eq->ist, (void *)shca);
174
173
 
 
174
        spin_lock_irqsave(&shca_list_lock, flags);
 
175
        eq->is_initialized = 0;
 
176
        spin_unlock_irqrestore(&shca_list_lock, flags);
 
177
 
 
178
        tasklet_kill(&eq->interrupt_task);
 
179
 
175
180
        h_ret = hipz_h_destroy_eq(shca->ipz_hca_handle, eq);
176
181
 
177
 
        spin_unlock_irqrestore(&eq->spinlock, flags);
178
 
 
179
182
        if (h_ret != H_SUCCESS) {
180
183
                ehca_err(&shca->ib_device, "Can't free EQ resources.");
181
184
                return -EINVAL;