~ubuntu-branches/ubuntu/quantal/linux-linaro-mx51/quantal

« back to all changes in this revision

Viewing changes to kernel/irq/spurious.c

  • Committer: Package Import Robot
  • Author(s): John Rigby, John Rigby
  • Date: 2011-09-26 10:44:23 UTC
  • Revision ID: package-import@ubuntu.com-20110926104423-3o58a3c1bj7x00rs
Tags: 3.0.0-1007.9
[ John Rigby ]

Enable crypto modules and remove crypto-modules from
exclude-module files
LP: #826021

Show diffs side-by-side

added added

removed removed

Lines of Context:
167
167
                  jiffies + POLL_SPURIOUS_IRQ_INTERVAL);
168
168
}
169
169
 
 
170
static inline int bad_action_ret(irqreturn_t action_ret)
 
171
{
 
172
        if (likely(action_ret <= (IRQ_HANDLED | IRQ_WAKE_THREAD)))
 
173
                return 0;
 
174
        return 1;
 
175
}
 
176
 
170
177
/*
171
178
 * If 99,900 of the previous 100,000 interrupts have not been handled
172
179
 * then assume that the IRQ is stuck in some manner. Drop a diagnostic
182
189
        struct irqaction *action;
183
190
        unsigned long flags;
184
191
 
185
 
        if (action_ret != IRQ_HANDLED && action_ret != IRQ_NONE) {
 
192
        if (bad_action_ret(action_ret)) {
186
193
                printk(KERN_ERR "irq event %d: bogus return value %x\n",
187
194
                                irq, action_ret);
188
195
        } else {
201
208
        raw_spin_lock_irqsave(&desc->lock, flags);
202
209
        action = desc->action;
203
210
        while (action) {
204
 
                printk(KERN_ERR "[<%p>]", action->handler);
205
 
                print_symbol(" (%s)",
206
 
                        (unsigned long)action->handler);
207
 
                printk("\n");
 
211
                printk(KERN_ERR "[<%p>] %pf", action->handler, action->handler);
 
212
                if (action->thread_fn)
 
213
                        printk(KERN_CONT " threaded [<%p>] %pf",
 
214
                                        action->thread_fn, action->thread_fn);
 
215
                printk(KERN_CONT "\n");
208
216
                action = action->next;
209
217
        }
210
218
        raw_spin_unlock_irqrestore(&desc->lock, flags);
262
270
        if (desc->istate & IRQS_POLL_INPROGRESS)
263
271
                return;
264
272
 
265
 
        if (unlikely(action_ret != IRQ_HANDLED)) {
 
273
        /* we get here again via the threaded handler */
 
274
        if (action_ret == IRQ_WAKE_THREAD)
 
275
                return;
 
276
 
 
277
        if (bad_action_ret(action_ret)) {
 
278
                report_bad_irq(irq, desc, action_ret);
 
279
                return;
 
280
        }
 
281
 
 
282
        if (unlikely(action_ret == IRQ_NONE)) {
266
283
                /*
267
284
                 * If we are seeing only the odd spurious IRQ caused by
268
285
                 * bus asynchronicity then don't eventually trigger an error,
274
291
                else
275
292
                        desc->irqs_unhandled++;
276
293
                desc->last_unhandled = jiffies;
277
 
                if (unlikely(action_ret != IRQ_NONE))
278
 
                        report_bad_irq(irq, desc, action_ret);
279
294
        }
280
295
 
281
296
        if (unlikely(try_misrouted_irq(irq, desc, action_ret))) {