someting about interrupts

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

   There are some problems puzzled me concerning interrupts.

1. The following excerpt code is from function mask_and_ack_8259a:

 197 handle_real_irq:
 198        if (irq & 8) {
 199                inb(PIC_SLAVE_IMR);     /* DUMMY - (do we need this?) */
 200                outb(cached_slave_mask, PIC_SLAVE_IMR);
 201                outb(0x60+(irq&7),PIC_SLAVE_CMD);/* 'Specific EOI'
to slave */
 202                outb(0x60+PIC_CASCADE_IR,PIC_MASTER_CMD); /*
'Specific EOI' to master-IRQ2 */
 203        } else {
 204                inb(PIC_MASTER_IMR);    /* DUMMY - (do we need this?) */
 205                outb(cached_master_mask, PIC_MASTER_IMR);
 206                outb(0x60+irq,PIC_MASTER_CMD);  /* 'Specific EOI
to master */
 207        }
 208        spin_unlock_irqrestore(&i8259A_lock, flags);

The operations are seemingly all dedicated to change the status of
8259A chip, including masking the corresponding interrupt line
specific to irq, while none to affect the kernel data structure.
Therefore, I wonder what's role of the flag of  IRQ_DISABLED.

2. When processing an IRQ, is there any chance to lost the same IRQ
comes next? Take keyboard, if I keep a key pressing down for a while,
the keyboard will raise the same IRQ continually. The first occurence
lead the CPU to jump to a corresponding ISR, and before the ISR
finishing the 8259A can not accept the same IRQ, and the next
occurence of the same IRQ come form the keyboard.  Will the second
occurence lost?

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux