do { 379 trace_irq_handler_entry(irq, action); 380ret = action->handler(irq, action->dev_id);//执行用户注册的中断处理函数
381 trace_irq_handler_exit(irq, action, ret); 382 383 switch (ret) { 384 case IRQ_WAKE_THREAD: 385 /* 386 * Set result to handled so the spurious check 387 * does not trigger. 388 */ 389 ret = IRQ_HANDLED; 390 391 /* 392 * Catch drivers which return WAKE_THREAD but 393 * did not set up a thread function 394 */ 395 if (unlikely(!action->thread_fn)) { 396 warn_no_thread(irq, action); 397 break; 398 } 399 400 /* 408 if (likely(!test_bit(IRQTF_DIED, 409 &action->thread_flags))) { 410 set_bit(IRQTF_RUNTHREAD, &action->thread_flags); 411 wake_up_process(action->thread); 412 } 413 414 /* Fall through to add to randomness */ 415 case IRQ_HANDLED: 416 status |= action->flags; 417 break; 418 419 default: 420 break; 421 } 422 423 retval |= ret; 424 action = action->next; //下一个