 do_IRQ ()   .

unsigned int do_IRQ(struct pt_regs regs)

          
    ,   pt_regs  -
    ,    
   .       -
,   do_IRQ ()    .   -
 86   .

int irq = regs.orig eax & Oxff;

     ,  do_IRQ () -
        
  .     PC,    
  mask_and_ack_8295A (),    do_IRQ ().
  do_IRQ ()  ,     
   ,    -
        .     , 
  handle_IRQ_event (),    
   .    8 
handle_IRQ event ()   .

int handle_IRQ_event(unsigned int irq, struct pt_regs *regs,

struct irqaction *action)

{

int status = 1;

if (!(action->flags & SA_INTERRUPT))
local_irq_enable() ;

do {

status 1= action->flags;

action-handler (irq, action->dev id, regs) ;

action = action->next;

} while (action) ;

if (status & SA_SAMPLE_RANDOM)

add interrupt_randomness(irq);

local_irq_disable() ;

return status;

}

    ,   ,  
  SA_INTERRUPT   . ,  
 INTERRUPT ,       -
 .        -
.       ,   -
   .      . 
   add_interrupt_randomness () ,   
  SA_SAMPLE_RANDOM.     -
 ,       -
 .   , "   ",  
      .

122                                                                    6